Lucas Ribeiro
Lucas Ribeiro

Reputation: 6282

Count how many metrics matches a condition in graphite

I have a list of classes that extracts info from the web. Every time each one of them saves something, it sends a different counter to graphite. So, every one of them is a different metric.

How do I know how many of them satisfy a certain condition??

For example, let:

movingAverage(summarize(groupByNode(counters.crawlers.*.saved, 2, "sumSeries), "1hour"), 24)

be the average of content download in past 24 hours. How can i know, at a moment "t", how many of my metrics have this value above 0?

Upvotes: 0

Views: 2422

Answers (2)

Matt Self
Matt Self

Reputation: 20095

You can use the currentAbove function. Check it out. For example:

currentAbove(stats.route.*.servertime.*, 5)

The above example gets all of the metrics (in the series) that are above 5.


You could then count the number of targets returned, and while Graphite doesn't provide a way to count the "buckets" you should be able to capture it fairly easily.

For example, a way to get a quick count (using curl to pipe to grep and count on the word "target"). Like so:

> curl -silent http://test.net/render?target=currentAbove(stats.cronica.dragnet.messages.*, 5)&format=json \
> | grep -Po "target" | grep -c "target"

Upvotes: 0

erbdex
erbdex

Reputation: 1909

In the rendering endpoint, add format=json. This would return the data-points with corresponding epochs in JSON, which is a breeze to parse. The time-stamps wherein your script sent nothing will be NULL.

[{
 "target": "carbon.agents.ip-10-0-0-228-a.metricsReceived",
 "datapoints": 
  [
    [912, 1383888170], 
    [789, 1383888180], 
    [800, 1383888190], 
    [null, 1383888200], 
    [503, 1383888210], 
    [899, 1383888220]
  ]
}]

Upvotes: 1

Related Questions