Grafana中count_over_time时间范围查询异常求助
Grafana count_over_time 函数使用问题及饼图可视化方案
问题描述
需要用count_over_time计算最近1分钟发送"Timestamp"行的系统数减去最近1小时发送该行的系统数,但结果完全依赖仪表盘时间范围,不按手动指定的1m/1h参数计算;最终目标是将相关数值用饼图可视化,接受转换方案。
附相关截图:


问题原因
count_over_time([1m])这类写法的相对时间窗口,默认基于仪表盘时间范围的结束时间计算。如果仪表盘选了非“最近X”的自定义时间段,统计范围就会和预期不符。另外,直接用count_over_time统计的是行数,不是系统数,这也会导致结果错误。
正确查询写法
要统计系统数,需先按系统维度分组,再判断该系统是否在目标时间窗口内发送过数据:
1. 统计最近1分钟发送过的系统数
count(count by (system_label) (last_over_time(your_metric{message="Timestamp"}[1m]) > time() - 60))
2. 统计最近1小时发送过的系统数
count(count by (system_label) (last_over_time(your_metric{message="Timestamp"}[1h]) > time() - 3600))
3. 计算差值(若需求是“1小时内活跃但1分钟不活跃的系统数”,用1小时总数减1分钟总数更合理)
count(count by (system_label) (last_over_time(your_metric{message="Timestamp"}[1h]) > time() - 3600)) - count(count by (system_label) (last_over_time(your_metric{message="Timestamp"}[1m]) > time() - 60))
饼图适配方案
单数值差值无法生成饼图,建议拆分为两个统计系列作为饼图切片:
- 最近1分钟内活跃的系统数(对应上述第一个查询)
- 最近1小时内活跃但近1分钟不活跃的系统数(对应上述差值查询)
在Grafana饼图面板中添加这两个查询,分别设置系列名称,即可生成符合需求的饼图。
内容的提问来源于stack exchange,提问作者Falke
相关产品推荐
相关产品推荐

