Подсчитайте, сколько метрик соответствует условию в графите

У меня есть список классов, которые извлекают информацию из Интернета. Каждый раз, когда каждый из них что-то сохраняет, он отправляет в графит другой счетчик. Таким образом, каждый из них является различным показателем.

Как узнать, сколько из них удовлетворяют определенному условию??

Например, пусть:

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

быть средним числом загрузок контента за последние 24 часа. Как я могу узнать в момент «t», сколько моих показателей имеют это значение выше 0?


person Lucas Ribeiro    schedule 08.11.2013    source источник


Ответы (2)


В конечной точке рендеринга добавьте format=json. Это вернет точки данных с соответствующими эпохами в формате JSON, который легко проанализировать. Отметки времени, в которые ваш скрипт ничего не отправлял, будут NULL.

[{
 "target": "carbon.agents.ip-10-0-0-228-a.metricsReceived",
 "datapoints": 
  [
    [912, 1383888170], 
    [789, 1383888180], 
    [800, 1383888190], 
    [null, 1383888200], 
    [503, 1383888210], 
    [899, 1383888220]
  ]
}]
person erbdex    schedule 08.11.2013
comment
Спасибо @erbdex. Это один из способов посчитать. Это лучше, чем то, что у меня есть сейчас. Думаю, я не ясно выразился. Я хочу представить это на графитовом графике. - person Lucas Ribeiro; 08.11.2013
comment
Подход «сделай сам» состоит в том, чтобы написать простой скрипт, который вычисляет все, что вам нужно, и отправляет его обратно в statsd для повторного построения графика (метаданных графика). Ничто не сравнится с гибкостью этого подхода. - person erbdex; 09.11.2013

Вы можете использовать функцию currentAbove. Проверьте. Например:

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

Приведенный выше пример получает все метрики (в серии), которые выше 5.


Затем вы можете подсчитать количество возвращенных целей, и, хотя Graphite не предоставляет способа подсчета «сегментов», вы сможете довольно легко их захватить.

Например, способ получить быстрый подсчет (используя curl для конвейера для grep и подсчета слова «цель»). Вот так:

> curl -silent http://test.net/render?target=currentAbove(stats.cronica.dragnet.messages.*, 5)&format=json \
> | grep -Po "target" | grep -c "target"
person Matt Self    schedule 11.11.2013
comment
countSeries(*seriesLists) рисует горизонтальную линию, представляющую количество узлов, найденных в списке seriesList. Он доступен начиная с версии 0.9.10. Но я не думаю, что он хочет знать, сколько подстановочных знаков было разрешено. - person erbdex; 20.11.2013
comment
Хороший. Я не знал об этой функции. В этом случае комбинация currentAbove (вокруг его исходного скользящего среднего и т. д.) с использованием 0 (чтобы получить метрики выше 0), обернутая с помощью countSeries, будет делать то же самое, что и скрипт. Хотя, возможно, я неправильно понял вопрос. - person Matt Self; 20.11.2013
comment
я предполагаю, что он хочет гибкости программирования пользовательских проверок, когда он говорит, что удовлетворяет определенному условию. :) Но да, действительно не знаю. - person erbdex; 20.11.2013