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

如何通过Promtail和Loki在Grafana中提取过滤JSON数组条目

问题:从Loki的Errors数组中提取错误并关联system标签展示

我用Promtail将JSON日志发送至Loki,想要在Grafana中制作一个表格面板,左侧显示错误信息,右侧显示对应的system标签。当前遇到的核心问题是无法正确访问JSON结构里的Errors数组条目,之前的查询会把数组元素转成无区分的标签,没法和system标签对应展示。

JSON日志格式

日志文件每分钟重建一次,格式如下:

{
  "Date": "2023-10-23T11:43:57.0096488+02:00",
  "Standort": {
    "GeraeteNr": "01",
    "PLZ": "48653",
    "Ort": "Coesfeld",
    "Strasse": "Boschstraße 14"
  },
  "Errors": [
    {
      "Key1": "value1"
    },
    {
      "Key2": "value2"
    }
  ]
}

当前Promtail采集配置

scrape_configs:
  - job_name: mrs_error_list
    static_configs:
      - targets:
          - localhost
        labels:
          job: mrs_error_list
          system: mrs2-14
          __path__: /var/lib/mrs/data/log/mrs-state.json
    pipeline_stages:
      - multiline:
          firstline: '^\{'
          max_wait_time: 3s

尝试过的查询及问题

使用以下查询时,Errors数组的每个条目会被转成独立标签,但无法区分这些标签是否来自Errors数组,也没法和system标签对应展示:

{job="test_6", system="mrs2-14"} | json | line_format `{{.log}}`

解决方案

1. 优化Promtail Pipeline配置

修改pipeline_stages,将Errors数组展开为单独日志条目,同时保留system标签关联:

pipeline_stages:
  - multiline:
      firstline: '^\{'
      max_wait_time: 3s
  # 解析JSON,提取Errors数组和原标签中的system字段
  - json:
      expressions:
        errors: Errors
        system: system
  # 将Errors数组的每个元素展开为独立日志条目
  - unfold:
      source: errors
  # 将system字段保留为标签,确保每个错误条目都绑定对应系统标识
  - labels:
      system:

2. Grafana查询与表格配置

在Grafana中使用以下LogQL查询:

{job="mrs_error_list", system="mrs2-14"} | json

然后在表格面板的字段映射中:

  • 将errors字段设置为第一列(错误信息)
  • 将system字段设置为第二列(对应系统标签)

如果需要把错误的键值对转为可读文本展示,可调整查询为:

{job="mrs_error_list", system="mrs2-14"} | json | line_format "{{.errors}} | 系统: {{.system}}"

进阶:解析错误内的具体键值对

如果需要把Errors数组内的具体键值(比如Key1、Key2)单独作为字段展示,可以在Pipeline中增加一步解析:

pipeline_stages:
  - multiline:
      firstline: '^\{'
      max_wait_time: 3s
  - json:
      expressions:
        errors: Errors
        system: system
  - unfold:
      source: errors
  # 解析每个错误条目内的键值对为单独字段
  - json:
      source: errors
  - labels:
      system:

此时Grafana查询后会自动生成Key1、Key2等字段,可直接添加到表格中展示。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:23:14