Есть ли способ, чтобы иметь скользящую среднюю в Grafana?
Я не нашел функцию "скользящей средней", и мне интересно, есть ли обходной путь.
Я использую influxdb в качестве бэкэнда.
5 ответов
Grafana не делает никаких вычислений, он просто запрашивает бэкэнд и рисует хорошие диаграммы. Таким образом, агрегирующие способности зависят исключительно от вашего бэкэнда. Хотя графит поддерживает оконные функции, такие как скользящая средняя, InfluxDB в настоящее время не поддерживает его.
существует довольно много запросов на скользящую среднюю в influxdb в интернете. Вы можете оставить свой "+1" и отслеживать прогресс в этом билете https://github.com/influxdb/influxdb/issues/77
возможно (еще не так просто) обходной путь-создать пользовательский скрипт (cron, daemon, whatever), который предварительно вычислит MA и сохранит его в отдельной серии influxdb.
Grafana поддерживает добавление movingAverage()
. Мне также было трудно найти его в документах, но вы можете (несколько весело) увидеть его использование на feature intro page:
как обычно, нажмите на заголовок графика, отредактируйте, добавьте метрику 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".
число в скобках будет количеством очков, которые вы хотите, чтобы среднее значение было принято.
скриншоты: