You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Grafana中使用Loki统计特定ERROR日志消息的数量?

问题

我搭建了包含Promtail、Loki和Grafana的环境,当前正将systemd-journal日志发送至Loki。我尝试创建一个Grafana仪表盘,展示7天内日志中不同ERROR消息的计数。日志样本包含多种ERROR消息,目标是在仪表盘上按不同ERROR消息分别显示对应计数。

发送至Loki的日志片段:

2023-09-14 08:57:55  ERROR: AuthController: Login TECHNIKER: Falsches Passwort bei Local-Login
2023-09-14 08:57:35  ERROR: AuthController: Login TECHNIKER: Falsches Passwort bei Local-Login
2023-09-14 08:57:31  ERROR: AuthController: Login TECHNIKER: Falsches Passwort bei Local-Login
2023-09-14 03:39:07  ERROR: VDAI: SetErrorClass[Timeout]: Keine Verbindung nach 5 Minuten
2023-09-13 11:25:55  ERROR: No reversePort received
2023-09-13 11:25:55  ERROR: ssh failed with exitcode=255 in requestReversePortNumber()
2023-09-13 11:25:20  ERROR: No reversePort received
2023-09-13 11:25:20  ERROR: ssh failed with exitcode=255 in requestReversePortNumber()
2023-09-13 11:24:41  ERROR: No reversePort received

我目前使用的查询仅能统计过去7天所有ERROR消息的总数:

count_over_time({job="systemd-journal"} |~ `ERROR:` [7d])

预期要在仪表盘上展示的分类统计结果:

[3] ERROR: AuthController: Login TECHNIKER: Falsches Passwort bei Local-Login
[1] ERROR: VDAI: SetErrorClass[Timeout]: Keine Verbindung nach 5 Minuten
[3] ERROR: No reversePort received
[2] ERROR: ssh failed with exitcode=255 in requestReversePortNumber()

现在需要实现按每条唯一ERROR消息展示对应计数的查询写法。

解决方案

要实现按唯一ERROR消息分类统计,需要通过LQL提取错误消息作为标签,再按标签分组统计计数,以下是两种可行方法:

方法1:使用pattern提取错误消息

适合日志格式固定的场景,直接提取ERROR:开头的整条消息作为标签:

sum by (error_message) (
  count_over_time(
    {job="systemd-journal"} 
    | pattern `<_> <error_message>` 
    |~ `error_message="ERROR:.*"` [7d]
  )
)
  • pattern <_> <error_message>:忽略日志开头的时间部分,将剩余内容全部提取为error_message`标签;
  • |~ error_message="ERROR:.*"`:过滤出所有包含ERROR的消息;
  • sum by (error_message):按提取到的错误消息分组,统计每组的总条数。

方法2:使用regexp精准提取错误消息

如果日志格式有变动,用正则表达式匹配ERROR:到行尾的内容:

sum by (error_message) (
  count_over_time(
    {job="systemd-journal"} 
    | regexp `^.*?(ERROR:.*)$` 
    | label_format error_message="$1" [7d]
  )
)
  • regexp ^.?(ERROR:.)$`:匹配从`ERROR:`开始到行尾的完整错误内容;
  • label_format error_message="$1":将匹配结果赋值为error_message标签;
  • 最后按标签分组求和,得到每条错误消息的计数。

Grafana可视化设置

在Grafana添加面板时,推荐选择以下类型:

  • Table面板:将error_message设为一列,统计值设为另一列,直观展示每条错误的计数;
  • Stat面板:选择按error_message拆分,每个错误消息单独显示对应计数。

内容的提问来源于stack exchange,提问作者Falke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 23:26:29