如何用LogQL查询Loki中缺失的日志以判断系统未运行?
如何通过LogQL查询“缺失的日志”判断系统未运行?
下图展示了通过以下LogQL查询生成的系统日志活动:
sum(count_over_time({job="ET10"} |= "Station 1" [1m]))
当系统因故障停止运行时,不会生成相应的日志行,但日志活动会随之终止。
我尝试过两种查询方式,但都没达到预期:
- 将活动转为布尔值查询:
sum(count_over_time({job="ET10"} |= "Station 1" [1m])) > bool 0

- 对上述查询取反:
sum(count_over_time({job="ET10"} |= "Station 1" [1m])) < bool 1
这个查询没达到预期,因为大约2:30之后无日志产生,所以没有返回结果;仅在有日志的时段(如绿色条之间)有响应,这不是我想要的。
我期望得到的效果如下:
解决方案
要实现检测日志缺失的效果,可直接使用LogQL的absent_over_time函数,它专门用于检测指定时间窗口内是否无匹配日志序列。
核心查询语句:
absent_over_time({job="ET10"} |= "Station 1" [1m])
- 原理:该函数会在每个时间间隔内检查匹配日志:
- 窗口内无符合条件的日志时,返回值为1
- 窗口内有日志时,返回空(不生成数据点)
匹配期望图表的优化查询:
如果需要更直观的布尔值展示(1表示系统未运行,0表示运行中),可结合or操作补充正常时段的数值:
absent_over_time({job="ET10"} |= "Station 1" [1m]) or vector(0)
这样系统正常运行时返回0,停止运行时返回1,完全匹配你期望的图表效果。
内容的提问来源于stack exchange,提问作者user2366975
相关产品推荐
相关产品推荐

