19

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

我使用 influxdb 作为后端。

4

7 回答 7

20

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

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

像往常一样,单击图形标题,编辑,按照石墨文档中的描述添加指标movingAverage()

movingAverage(seriesList, windowSize)

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

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

例子:

&target=movingAverage(Server.instance01.threads.busy,10)
&target=movingAverage(Server.instance*.threads.idle,'5min')
于 2014-12-15T17:39:45.967 回答
18

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

网络上有很多关于 influxdb 移动平均线的请求。您可以留下您的“+1”并在此工单中跟踪进度https://github.com/influxdb/influxdb/issues/77

可能(但不是那么容易)的解决方法是创建一个自定义脚本(cron、守护进程等),它将预先计算 MA 并将其保存在单独的 influxdb 系列中。

于 2015-02-19T22:22:42.063 回答
5

我发现自己在这里尝试使用 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 做到这一点。

于 2018-05-17T05:08:04.663 回答
4

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

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

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

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

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

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

截屏:

截屏

于 2018-07-05T22:42:00.297 回答
2

InfluxDB 2 允许您计算查询中的移动平均值,例如:

from(bucket: "iot")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "PoolWeather")
  |> filter(fn: (r) => r["_field"] == "batteryvoltage")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> movingAverage(n: 10)
  |> yield(name: "average")

在此处输入图像描述

于 2021-12-02T08:09:25.057 回答
1

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

于 2018-07-02T09:17:26.853 回答
0

尝试 avg_over_time(mymetric[5m])

在此处输入图像描述

于 2020-02-26T11:46:53.343 回答