Как сделать четкий подсчет метрики, используя графитовый источник данных в графане? - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть метрика, которая показывает состояние сервера.Значения являются целыми числами, и если значение равно 0 (нулю), то сервер стабилен, иначе он нестабилен.И график у нас на минутном уровне.Итак, я хочу показать агрегированное значение, чтобы узнать, сколько часов сервер нестабилен в выбранном диапазоне времени.

Допустим, если я выберу «Последние 7 дней» в качестве продолжительности времени ... мы получим X часов нестабильности сервера.

И еще одна вещь, у меня есть линейный график(график временных рядов), который показывает состояние сервера ... но, дело в том, что когда я выбираю "Последние 24 часа или 48 часов", я получаю график на минутном уровне ... когда я увеличиваю продолжительность до четвертиЯ получаю график каждые 5 минут или что-то в этом роде ... Я понимаю, что он агрегирует значения .... но кто-нибудь знает, как графана выполняет агрегацию ??

Я пыталсяФункция «scaleToSeconds» и «ConsolidateBy» и многое другое, чтобы сначала получить счетчик минут с ненулевым значением, но безуспешно.

Любая помощь будет принята с благодарностью.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Существует несколько различных способов решения этой проблемы, в этой ситуации агрегация происходит в двух местах:

  1. Когда вы запрашиваете временной интервал, превышающий интервал хранения, ишепот возвращает агрегированные данные.Используемый здесь метод агрегирования определен в вашей конфигурации агрегации углерода.

  2. Когда Grafana отправляет запрос в Graphite, он передает maxDataPoints=<width of graph in pixels>, и Graphite выполняет агрегацию, чтобы получить максимум столько точек(потому что у вас недостаточно пикселей, чтобы отобразить больше точек).Метод, используемый для этой консолидации, контролируется функцией consolidateBy.

Возможно, что оба они могут использоваться в одном запросе, если, например, у вас есть панель, которая запрашивает 3дней, и вы храните 2 дня с интервалом в 1 минуту и ​​7 дней с 5-минутным интервалом шепотом, тогда у вас будет 72 * 60/5 = 864 пункта из 5-минутного архива шепотом, но если ваш графикшириной всего 500px, тогда во время выполнения она будет консолидирована до 10-минутных интервалов и даст 432 балла.

Итак, если вы хотите всегда иметь доступ к счетчику, вы можете изменить конфигурацию углерода для использования sum агрегирование для этих серий (и удаление существующих шепотных файлов, чтобы новые создавались с новой конфигурацией агрегации) и передача consolidateBy('sum') в ваших запросах, и вы всегда будете получать сумму обратно для каждого интервала.

Тем не менее, вы также можете решить эту проблему во время запроса, умножив среднее значение обратно, чтобы получить общее значение (при условии, что ваша агрегация шепота соnfig использует average).Простейшим способом сделать это будет summarize данных с average в сегменты, которые соответствуют наибольшему интервалу агрегации, который вы будете запрашивать, затем scale этих значений к этому интервалу для расчета общего количества минут.Наконец, вы захотите использовать consolidateBy('sum'), чтобы любая консолидация во время выполнения работала должным образом.

consolidateBy(scale(summarize(my.series, '10min', 'avg'), 60), 'sum')

Учитывая все вышесказанное, вы, возможно, захотите рассматривать время безотказной работы отчетов в процентах, а не в сырых минутах., в этом случае вы можете использовать сырые средние значения напрямую.

0 голосов
/ 26 сентября 2019

Когда вы говорите, что значение равно нулю (0), сервер исправен - о каких других значениях сообщается, если сервер неработоспособен / нестабилен?Если вы сообщаете, например, только ноль (исправно) или единицу (неработоспособно), то вы можете использовать функцию sumSeries, чтобы получить счетчик для нескольких серверов.

Здесь требуется дополнительная информация о типахзначения, о которых сервер сообщает, чтобы дать вам лучший ответ.

Grafana агрегирует или консолидирует данные, как правило, используя функцию усреднения. Вы можете переопределить это с помощью агрегации 'sum' в функции consolidateBy .

Чтобы получить текущие вычисления по времени, вам, скорее всего, придется использовать функцию суммирования (также с суммированием) и укажите период времени, например, 1 час, 1 день, 1 неделя и т. д.Вы могли бы сделать этот шаг дальше, комбинируя это с шаблонной переменной time, чтобы по мере увеличения / уменьшения периода период суммирования соответственно увеличивался / уменьшался.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...