0
votes

We would like to use Graphite to plot values related to events such as "a packet of N messages has been published". When no packet is published, no code is run at all and so we cannot send zero to Graphite.

Essentially, we would like to compute some kind of publication rate per second.

Here are some sample data that we send to Graphite (with added timestamps):

2016-11-28 14:46:33.6338Z   api.message.publication.count:100
2016-11-28 15:01:36.0780Z   api.message.publication.count:12
2016-11-28 15:01:36.9911Z   api.message.publication.count:1
2016-11-28 15:01:37.0679Z   api.message.publication.count:100

Between 14:46:33 and 15:01:36, no messages were sent. However, between 15:01:36 and 15:01:37, 13 messages were sent (reported as two values, 12 and 1).

I've tried the summarize() function but it does not give results that make sense to me, i.e. I cannot correlate what I'm sending to Graphite and what is displayed by Graphite. Moreover, it seems that summarize() does not support 1-second intervals (I've tried "1second" and "1s" for the interval parameter).

The perSecond() function computes a rate of change (i.e. a derivative) but what we're sending is already a kind of derivative (maybe it's closer to a Dirac delta?) so it doesn't make sense in our context.

Are we completely off, or is there a way to make this work with Graphite?


Edit: I guess we need to add an aggregation stage to our data. Would Carbon aggregation fit the bill here?

1

1 Answers

0
votes

It turns out that we were already sending our metrics to statsd, which supports aggregation via the c metric type, and a few other nifty things: https://github.com/etsy/statsd/blob/master/docs/metric_types.md