Есть ли способ, чтобы иметь скользящую среднюю в Grafana?

Я не нашел функцию "скользящей средней", и мне интересно, есть ли обходной путь.

Я использую influxdb в качестве бэкэнда.

5 ответов


Grafana не делает никаких вычислений, он просто запрашивает бэкэнд и рисует хорошие диаграммы. Таким образом, агрегирующие способности зависят исключительно от вашего бэкэнда. Хотя графит поддерживает оконные функции, такие как скользящая средняя, InfluxDB в настоящее время не поддерживает его.

существует довольно много запросов на скользящую среднюю в influxdb в интернете. Вы можете оставить свой "+1" и отслеживать прогресс в этом билете https://github.com/influxdb/influxdb/issues/77

возможно (еще не так просто) обходной путь-создать пользовательский скрипт (cron, daemon, whatever), который предварительно вычислит MA и сохранит его в отдельной серии influxdb.


Grafana поддерживает добавление movingAverage(). Мне также было трудно найти его в документах, но вы можете (несколько весело) увидеть его использование на feature intro page:

screenshot showing movingAverage() call

как обычно, нажмите на заголовок графика, отредактируйте, добавьте метрику movingAverage() согласно описанному в графит документации:

movingAverage(seriesList, windowSize)

графики скользящей средней Метрики (или метрик) за фиксированное число прошлых точки или временной интервал.

принимает одну метрику или список подстановочных знаков, за которым следует число n точек данных или цитируемая строка с длиной времени, такой как "1hour" или "5min" (см. from / until в render_api_ для примеров форматов времени). Графики среднее значение предыдущих точек данных для каждой точки На графике. Все предыдущие точки данных имеют значение None в начале графика.

пример:

&target=movingAverage(Server.instance01.threads.busy,10)
&target=movingAverage(Server.instance*.threads.idle,'5min')

я оказался здесь, пытаясь сделать скользящую среднюю в Grafana с базой данных PostgreSQL, поэтому я просто добавлю способ сделать с SQL-запросом:

SELECT
  date as time,
  AVG(daily_average_column) 
    OVER(ORDER BY date ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) 
    AS value,
  '5 Day Moving Average' as metric
FROM daily_average_table
ORDER BY time ASC;

Это использует функцию "окно" в среднем из последних 4 строк (плюс текущая строка).

Я уверен, что есть способы сделать это с MySQL.


другой вариант-сообщить данные как" временные " метрики и не подсчитывает. Это легко сделать, особенно с Statsd в вашем стеке. Построение графика данных синхронизации (поступающих из statsd) как среднее из сообщаемых точек данных уже встроено.


метод и возможности для этого зависят от вашего источника данных.

вы указали InfluxDB, поэтому ваш запрос должен будет обернуть "функцию агрегации" [ например, mean ($field) ] в moving_average ($aggregation_function, $num_of_points) "функция преобразования".

на вкладке "Метрики" вы найдете обе функции "преобразование" в части "выбрать" меню.

создайте свой запрос с помощью "функции агрегации" (среднее значение, мин, Макс и др.) во-первых-таким образом вы можете убедиться, что данные выглядят так, как вы ожидаете.

после этого просто нажмите кнопку " + "рядом с" функцией агрегации "и в меню "преобразования" выберите "moving_average".

число в скобках будет количеством очков, которые вы хотите, чтобы среднее значение было принято.

скриншоты:

Screenshot