Code Monkey home page Code Monkey logo

Comments (9)

scohen avatar scohen commented on July 17, 2024 1

We use exometer_report_opentsdb exclusively.

from elixometer.

scohen avatar scohen commented on July 17, 2024

I'm assuming that you're talking about the pobox stuff; Elixometer also has a genserver that serves to serialize config changes. None of the metric updates go through that process.

The reason Elixometer has pobox is to shed load if metrics are updated en masse. We experienced a pretty significant performance bottleneck with exometer when we threw many metrics updates at it at once. Adding pobox completely fixes this by dropping updates after the process mailbox reaches 1000, which is a large amount of backlog. If you're under the limit, you won't be affected, and if you're over this limit, I think discarding metrics is better than slowing your app down.

from elixometer.

aerosol avatar aerosol commented on July 17, 2024

Hey @scohen, thanks for the reply! ❤️

The reason Elixometer has pobox is to shed load if metrics are updated en masse. We experienced a pretty significant performance bottleneck with exometer when we threw many metrics updates at it at once.

Interesting! Have you found out which of exometer's processes was the culprit? Was it the reporter itself, that is only capable of receiving and handling one metric/datapoint message at a time? Or was it the underlying gen_tcp setup?

after the process mailbox reaches 1000

Do you recall what's the flush interval I could use to replicate that?


The main question origin is: I'm very new to exometer and I don't really grok it fully yet. I'm looking for a drop-in replacement for my folsom/folsomite setup, where it simply blows up with around 3k total unique metrics (due to ETS leak). I'm dumping the aggregated metrics to hostedgraphite every 40 seconds. I know I can fix this by just bumping ERL_ETS_MAX_TABLES, but that won't scale in the long run, and I feel there should be a way to do better, without dropping metrics overflow on the floor. So I guess what I'm looking for is a test case that'll allow me to benchmark this properly, before I make the production switch (staging is a lie).

from elixometer.

scohen avatar scohen commented on July 17, 2024

@aerosol, The problem wasn't with the flush interval, but because exometer uses :gen_server.call somewhere in its stack. We were flooding the exometer process with tens of thousands of messages at once, and the calls were synchronous, and it would take 30ms or so for the process to clear its queue.

I don't think having tens of thousands of messages will be a problem, but I'm not extremely familiar with exometer's internals. You might want to ask Ulf about this. The problem we fixed was due to many, many messages being created in a very short time.

from elixometer.

aerosol avatar aerosol commented on July 17, 2024

@scohen awesome.

We were flooding the exometer process with tens of thousands of messages at once, and the calls were synchronous

How many unique metrics (as in "metric name") did you have?

from elixometer.

aerosol avatar aerosol commented on July 17, 2024

BTW, do you think it'd be worthwhile to extend elixometer with a metric for the number of messages dropped?

from elixometer.

scohen avatar scohen commented on July 17, 2024

How many unique metrics (as in "metric name") did you have?

Per app? Maybe 10 - 50.

BTW, do you think it'd be worthwhile to extend elixometer with a metric for the number of messages dropped?

In our world, dropping doesn't happen often, and I didn't think it was that important in the grand scheme of things. Exometer can process tens of thousands of messages per second, and we've only ever had a single application cross this threshold to where exometer became a bottleneck.
The pobox library handles dropping of messages, so we'd have to instrument that somehow.

from elixometer.

aerosol avatar aerosol commented on July 17, 2024

Thank you, this helps a lot! Last final question and we can close this: which reporter plugin did you use?

from elixometer.

scohen avatar scohen commented on July 17, 2024

@aerosol I'm going to close this, feel free to ask more questions if any come up.

from elixometer.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.