每次启动命令时,我都会递增一个计数器,并且每隔几毫秒添加一个条目来输入计数器的当前值,从而生成如下所示的条目。
time value
---- -----
1549754123986 0
1549754183993 1
1549754243999 2
1549754304005 3
我想要一个 Grafana 时序仪表板,显示命令在一个时间间隔内启动了多少次(例如每小时、每 3 小时、每 6 小时......
例如,如果命令在 9:00、9:30、10:45、11:00 和 12:15 启动,则每小时启动的命令图如下所示:
3|
2| ------- -----------
1|------- -------- ----- ----- ----------------
0|_________________________________________________________________________
9:00 9:30 10:00 10:30 11:00 11:30 12:00 12:30 1:00
从 https://docs.influxdata.com/influxdb/v1.5/query_language/functions 上列出的流入函数中,我想在间隔 1 小时(与其他间隔间隔的 3、6、12、24 小时(的最大值之间做一个差异。
我的选择语句会是什么样子?
感谢布鲁诺里在下面回答,然后我编辑了我的问题以使其更清晰。
您可以将SUM()
与GROUP BY
一起使用,以选择该值在三小时内为 1 的总次数:
> SELECT SUM(value) FROM my_data GROUP BY time(3h);
name: my_data
time sum
---- ---
2019-02-06T12:00:00Z 216
2019-02-06T15:00:00Z 766
2019-02-06T18:00:00Z 704
2019-02-06T21:00:00Z 547
2019-02-07T00:00:00Z 436
2019-02-07T03:00:00Z 497
>
从您的数据中,我知道value
总是1
或0
.
如果有更多不同的数字,并且您希望每次都是 1 时都得到,则可以使用带有条件的 COUNT:
> SELECT COUNT(value) FROM my_data WHERE value=1 GROUP BY time(3h);
上面的查询适用于 influx,如果您想在 grafana 中实现它们,我建议您定义一个间隔变量(请参阅文档(或使用 $__interval
变量(请参阅文档(,该变量将根据您的缩放级别自动调整:
SELECT SUM(value) FROM my_data GROUP BY time($__interval);
对于每小时计数: 从"计数器"中选择non_negative_derivative(最后一个("值"(, 1h( 其中$timeFilter分组时间(1小时( 填充(空(