Grafana / InfluxDB 查询具有时间范围的计数器数据
Posted
技术标签:
【中文标题】Grafana / InfluxDB 查询具有时间范围的计数器数据【英文标题】:Grafana / InfluxDB query counter data with a time range 【发布时间】:2018-08-06 18:07:11 【问题描述】:我有一个将指标发送到流入数据库的应用程序,我们使用 grafana 根据该数据绘制图表。对于其中一个指标,应用程序发送一种计数器类型的数据,基本上只要有事件发生,计数就会增加。有没有办法在 Grafana 中查询这种类型的数据和绘图?
我尝试使用 DIFFERENCE 函数,但图表仅在 10 秒内显示正确的值,然后显示为零。
实现这一目标的正确方法是什么?
例子:
T1 : 10
T1+10minutes : 12
我想在 T2 和 T1(10 分钟)之间看到图表为 2,在我的情况下,它显示 2 10 秒,然后重置为零。
我正在使用下面的 influx/grafana 查询
select difference(sum("Counter_Metrics")) FROM "My_Measurement" WHERE $timeFilter GROUP BY time(10s), host fill(null)
提前致谢
【问题讨论】:
说实话,我无法理解你的问题。你试图想象什么? “计数器类型的数据”是什么意思?您是否尝试显示价值增量而不是价值本身? 时间范围边缘会出现零点 - 计算差异需要两个点。 “T1+10分钟”之后是否有更新的数据点? @WindyFields 是的,这是正确的,因为我的应用程序没有重置计数器,所以我想显示增量而不是实际值 @YuriLachin 是的,在 T1+10min 之后会有一个更新的数据点,并且会有一个新的值。我只想查看任何时间戳之间的差异 我怀疑这可能与按时间步长分组有关。如果您的数据的数据点间隔为 10 分钟,并且您以 10 秒为单位进行分组,则大多数间隔将为空。您可以尝试使用 GROUP BY time(10m) 吗?另外,您真的需要 sum() 内的差异()吗?我希望根本没有任何功能或 last() ... 【参考方案1】:如果您只需要一段时间内当前和之前的计数器值之间的差异(本质上是值增量),那么只需使用 DIFFERENCE
函数而不使用任何 SUM
:
SELECT * FROM api_calls
name: api_calls
time value
---- -----
2018-03-02T17:22:53.5335191Z 1
2018-03-02T17:22:56.3249691Z 2
2018-03-02T17:22:59.619759Z 4
2018-03-02T17:23:01.6130663Z 6
2018-03-02T17:23:04.1959738Z 7
每次您的应用程序向您报告一个新的计数器值时(在我的例子中,我有 API 调用计数器)。
调用 DIFFERENCE
会给我每个指标报告(每个时间戳)的计数器增量:
SELECT DIFFERENCE(value) FROM api_calls
name: api_calls
time difference
---- ----------
2018-03-02T17:22:56.3249691Z 1
2018-03-02T17:22:59.619759Z 2
2018-03-02T17:23:01.6130663Z 2
2018-03-02T17:23:04.1959738Z 1
【讨论】:
以上是关于Grafana / InfluxDB 查询具有时间范围的计数器数据的主要内容,如果未能解决你的问题,请参考以下文章
从 InfluxDB 查询关于 Grafana 变量模板的 timeFilter 的标签
Grafana/InfluxDB:查询在面板中工作,而不是在变量中
InfluxDB 和 Grafana:在同一图形面板上比较两个具有不同时间戳的数据库
在 Grafana 上使用 InfluxDB 计算平均请求时间