有没有办法在格拉法纳有一个移动平均线?

bru*_*oqc 10 metrics influxdb grafana

我没有找到"移动平均"功能,我想知道是否有解决方法.

我正在使用Influxdb作为后端.

小智 17

Grafana支持添加movingAverage().我也很难在文档中找到它,但你可以(有点滑稽)在功能介绍页面上看到它的用法:

屏幕截图显示了movingAverage()调用

正常情况下,单击图表标题,编辑,按照石墨文档中的描述添加指标movingAverage():

movingAverage(seriesList, windowSize)
Run Code Online (Sandbox Code Playgroud)

绘制指标(或指标)在固定数量的过去点或时间间隔上的移动平均值.

采用一个度量或通配符seriesList,后跟数量N的数据点或带有时间长度的带引号的字符串,如'1hour'或'5min'(有关时间格式的示例,请参阅render_api_中的/ until).绘制图表上每个点的前面数据点的平均值.在图表的开头,所有先前的数据点都设置为"无".

例:

&target=movingAverage(Server.instance01.threads.busy,10)
&target=movingAverage(Server.instance*.threads.idle,'5min')
Run Code Online (Sandbox Code Playgroud)

  • 使用Influxdb时,UI有点不同.我似乎涌入dbx正在进行聚合,所以我开始认为它必须在Influxdb中实现.也许它和石墨一样.movingAverage是一个石墨函数:http://graphite.readthedocs.org/en/latest/functions.html#graphite.render.functions.movi​​ngAverage (2认同)

Ser*_*nov 12

Grafana本身没有计算,只是查询后端并绘制漂亮的图表.所以聚合能力完全取决于你的后端.虽然Graphite支持移动平均等窗口函数,但InfluxDB目前不支持它.

在网上涌入db3的移动平均数有很多要求.你可以留下你的"+1"并跟踪这张票的进度https://github.com/influxdb/influxdb/issues/77

可能(但不是那么容易)的解决方法是创建一个自定义脚本(cron,daemon,无论如何),它将预先计算MA并将其保存在单独的Influxdb系列中.

  • 从v1.2开始,InfliuxDB现在支持[moving_average](https://docs.influxdata.com/influxdb/v1.2/query_language/functions/#moving-average) (10认同)

tha*_*smt 8

我发现自己尝试使用 PostgreSQL 数据库在 Grafana 中进行移动平均,因此我将添加一种使用 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;
Run Code Online (Sandbox Code Playgroud)

这使用“窗口”函数来计算最后 4 行(加上当前行)的平均值。

我确信 MySQL 也有办法做到这一点。


小智 6

其方法和功能取决于您的数据源。

您指定了 InfluxDB,因此您的查询需要在 moving_average($aggregation_function, $num_of_points) “转换函数”内包装一个“聚合函数”[例如mean($field)]。

在“指标”选项卡中,您将在菜单的“选择”部分中找到“转换”功能。

首先使用“聚合函数”(平均值、最小值、最大值等)编写查询 - 这样您可以确保数据看起来符合您的预期。

之后,只需单击“聚合函数”旁边的“+”按钮,然后在“转换”菜单下选择“移动平均”。

括号中的数字将是您希望取平均值的点数。

截屏:

截屏


Rya*_*der 5

尝试 avg_over_time(mymetric[5m])

在此输入图像描述

  • 虽然此代码片段可能是解决方案,但[包括解释](//meta.stackexchange.com/questions/114762/explaining-entirely-‌​code-based-answers)确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而那些人可能不知道您建议代码的原因。 (2认同)