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

时间:2014-12-15 16:53:18

标签: metrics influxdb grafana

我没有找到“移动平均线”功能,我想知道是否有解决方法。

我正在使用Influxdb作为后端。

6 个答案:

答案 0 :(得分:16)

Grafana支持添加movingAverage()。我也很难在文档中找到它,但你可以(有点滑稽)在feature intro page上看到它的用法:

screenshot showing movingAverage() call

正常情况下,点击图表标题,修改,按照movingAverage()中所述添加指标graphite documentation

movingAverage(seriesList, windowSize)

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

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

示例:

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

答案 1 :(得分:11)

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

在网上涌入db3的移动平均数有很多要求。您可以保留“+1”并跟踪此故障单https://github.com/influxdb/influxdb/issues/77

中的进度

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

答案 2 :(得分:2)

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

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

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

首先使用“聚合函数”(均值,最小值,最大值等)编制查询-这样,您可以确保数据看起来像您期望的那样。

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

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

截屏:

Screenshot

答案 3 :(得分:1)

我发现自己在这里尝试使用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;

这使用"窗口"函数表示最后4行(加上当前行)的平均值。

我确信有办法用MySQL做这件事。

答案 4 :(得分:1)

另一种选择是将数据报告为“计时”指标而不是计数。 这很容易做到,尤其是在您的堆栈中使用Statsd时。 已经内置了绘制时序数据(来自statsd)作为报告数据点的平均值的方法。

答案 5 :(得分:-1)

尝试avg_over_time(mymetric[5m])

enter image description here