Graphite Graph - how fast can we update a graph?

We are trying to use Graphite for a (close) real-time web graphics system. However, we cannot accelerate graphite faster than 1 second. Ultimately, we would like to update 100 ms

From reading frequently asked questions, it sounds like graphite quickly - but it is either very misleading, or I donโ€™t understand how to speed up graphite

whisper timing information seems to use UNIX timestamps

How scalable is graphite?

From a processor point of view, graphite scales horizontally on both the interface and the backend, which means that you can simply add more machines to the mix to get more bandwidth. It is also fault tolerant in the sense that loss of a backend machine will result in a minimum amount of data loss (no matter which machine was cached in memory) and will not disrupt the system if you have sufficient capacity to handle the load.

From the point of view of I / O under load, graphite very quickly performs many I / O operations on many different files. This is because each individual metric sent to Graphite is stored in its own database file, similar to how many tools (drraw, Cacti, Centreon, etc.) are built on top of RRD work. In fact, Graphite originally used RRD for storage until fundamental limitations requiring a new storage engine came up.

High volume (several thousand different metrics updated in the smallest detail) pretty much requires a good RAID array. A graphite backend caches incoming data if the disks cannot handle a large number of small write operations (each data point takes only a few bytes, but most disks cannot perform more than a few thousand I / O operations per second, even if they are tiny). When this happens, the Graphite database engine, in a whisper, allows carbon to record multiple data points at once, thereby increasing overall throughput only by storing excess data stored in memory until it is written.

How are real-time graphics?

Highly. Even under heavy load, where the number of metrics arriving at each time interval is much greater than the speed at which your storage system can perform I / O, and many data points are cached in the storage pipeline (see the previous question for an explanation), Graphite is still drawing real-time graphics. The trick is that when Graphite webapp receives a request to draw a graph, it simultaneously retrieves data from disk and also from the pre-memory cache (which can be allocated if you have several server servers), and combines two data sources to create real time graphics.

They also show only seconds and without fractional points: http://graphite.readthedocs.org/en/latest/config-carbon.html as well as from and until must be a time specification conforming to the AT-STYLE time specification described here: http://oss.oetiker.ch/rrdtool/doc/rrdfetch.en.html . http://graphite.wikidot.com/url-api-reference

So what is it? Is graphite fast? or just quickly process large amounts of data - we are looking for an easy-to-use web-based packet data receiver for visual display. Graphite seemed like a great solution, but now that we're all configured and running, I guess we just wasted a lot of time

Thank!

+5
graph graphite graphite-carbon
01 Oct '13 at
source share
1 answer

Graphite will store no more than one data point for an exact certain accuracy (additional data received will be deleted) in your schemas-schemas.conf. Maximum accuracy - 1 second. . retentions = 1s : 6h, 1min: 7d, 10min: 5y

To achieve your goals you need to put an aggregator in front of the graphics. The aggregator will take all the indicators and aggregate the data, rinsing in the graphite storage in order to match the storage scheme. The aggregator will perform calculations (avg, sum, mean, etc.) by tags and send them. for example, in the last second you averaged 14 ms to process the request OR in the last 10 seconds, the total number of requests was 4234.

So, while you cannot report finer granularity than 1 second, you can use the aggregator to capture - the sum and average of what happened during the 1 second time interval, and report it.

Two common options: StatsD and graphite, supplied in a carbon aggregator.

** StatD, IMO is the way to go. This is a network daemon that you run separately and send to it via UDP. However, you can do the same (e.g. UDP) with carbon-aggregator.py.

+6
03 Oct '13 at 3:05
source share



All Articles