如何在Loki/Grafana中通过静态系统列表排查不活跃系统?
实现方案
核心思路
从静态JSON列表中提取所有系统名称,再排除近5分钟内有日志上报的系统,剩余结果即为目标系统。
最终LogQL查询
count by(system) ( {job="mrs_system_info"} | json allSystems | unnest allSystems | label_format system="{{.allSystems}}" ) unless count by(system) (count_over_time({job="mrs_error_list"} [5m]))
各部分说明
- 静态列表解析:
{job="mrs_system_info"}:定位存储静态系统列表的日志条目| json allSystems:解析日志中的JSON结构,提取allSystems数组| unnest allSystems:将数组展开为单个系统的条目(每个系统对应一条记录)| label_format system="{{.allSystems}}":将展开后的系统名称映射为和日志中一致的system标签count by(system):确保每个系统仅保留一条记录(自动去重)
- 排除在线系统:
count by(system) (count_over_time({job="mrs_error_list"} [5m])):统计近5分钟内有日志上报的系统unless:从静态列表结果中移除上述有日志的系统,剩余即为近5分钟未上报的系统
注意事项
- 确保静态列表中
allSystems的系统名称,与mrs_error_list日志里system标签的名称格式完全一致(大小写、特殊字符等),否则会出现匹配失败 - 如果静态列表包含多条日志,
count by(system)会自动完成系统名称去重
内容的提问来源于stack exchange,提问作者Falke
相关产品推荐
相关产品推荐

