如何用Loki查询在Grafana面板中统计每条错误的唯一系统数
解决Loki+Grafana错误日志统计中唯一主机数展示问题
问题原因
你之前的查询返回的是message+hostname组合的错误次数,使用Grafana「Group by」转换时如果未正确配置聚合逻辑,会导致无法提取唯一主机数。核心问题是转换操作需要针对hostname标签做去重统计,而非数值字段。
方案一:直接通过Loki查询生成所需指标
可以用Loki的聚合逻辑同时输出错误总次数和唯一主机数,无需依赖Grafana转换:
错误总次数查询(原逻辑保留)
topk(10, sum by(message)(count_over_time({job="systemd-journal"} |~ `ERROR:` | regexp `(?P<message>ERROR:.*)` [7d])))
唯一主机数查询
topk(10, count by(message) (sum by(message, hostname)(count_over_time({job="systemd-journal"} |~ `ERROR:` | regexp `(?P<message>ERROR:.*)` [7d]))))
逻辑说明:先按message+hostname分组统计单主机错误次数,再对每个message统计有多少个不同的hostname分组,即得到唯一主机数量。
将这两个查询添加到同一面板(比如表格面板),即可同时展示两项数据。
方案二:通过Grafana转换处理现有查询结果
如果想保留你修改后的sum by(message, hostname)查询,按以下步骤配置转换:
- 保持查询不变:
sum by(message, hostname)(count_over_time({job="systemd-journal"} |~ `ERROR:` | regexp `(?P<message>ERROR:.*)` [7d]))
- 进入面板的「转换」选项卡,添加第一个转换:Group by
- 分组字段选择
message(标签) - 数值字段(Value)的聚合方式选择
Sum,得到每个错误的总次数
- 分组字段选择
- 添加第二个转换:Add field from calculation
- 计算类型选择
Count distinct values - 目标字段选择
hostname(标签) - 新字段名设为
unique_hosts
- 计算类型选择
- 调整字段顺序或隐藏冗余字段,即可得到包含错误消息、总次数、唯一主机数的结果。
内容的提问来源于stack exchange,提问作者Falke
相关产品推荐
相关产品推荐

