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

如何在Promtail中将传入JSON文本转换为驼峰式命名?

解决方案:用Promtail模板阶段转换JSON键为小写

核心思路

利用Promtail的template阶段结合ToLower函数(或直接构造小写键),将原始JSON的字段键转换为小写格式,同时保留字段值不变。

具体配置示例

方式一:分步解析+重命名

先通过json阶段解析原始日志,再逐个将字段重命名为小写,最后清理冗余字段:

scrape_configs:
  - job_name: "example_job"
    static_configs:
      - targets: [localhost]
        labels: { job: "example" }
    pipeline_stages:
      # 第一步:解析原始JSON,提取所有大写开头的字段
      - json:
          expressions:
            ts_raw: Timestamp
            msg_raw: Message
            lvl_raw: Level
            exp_raw: Exception
      # 第二步:用template阶段生成小写键的字段
      - template:
          source: timestamp
          template: '{{ .ts_raw }}'
      - template:
          source: message
          template: '{{ .msg_raw }}'
      - template:
          source: level
          template: '{{ .lvl_raw }}'
      - template:
          source: exception
          template: '{{ .exp_raw }}'
      # 第三步:移除原始的大写键字段,避免冗余
      - remove:
          fields: ["ts_raw", "msg_raw", "lvl_raw", "exp_raw"]
      # 可选:重新打包为结构化JSON输出
      - json:
          output: { source: output }
          expressions:
            timestamp: timestamp
            message: message
            level: level
            exception: exception

方式二:直接构造完整JSON(字段较少时推荐)

如果日志字段不多,可以直接在一个template阶段里生成符合要求的JSON:

scrape_configs:
  - job_name: "example_job"
    static_configs:
      - targets: [localhost]
        labels: { job: "example" }
    pipeline_stages:
      - json:
          expressions:
            Timestamp: Timestamp
            Message: Message
            Level: Level
            Exception: Exception
      - template:
          source: output
          template: |
            {
              "timestamp": "{{ .Timestamp | quote }}",
              "message": "{{ .Message | quote }}",
              "level": "{{ .Level | quote }}",
              "exception": "{{ .Exception | quote }}"
            }

注意:如果字段值包含双引号、换行等特殊字符,必须用{{ .字段名 | quote }}进行转义,否则会破坏JSON格式。

进阶批量处理建议

如果日志字段数量较多,逐个处理效率低,可以考虑启用Promtail的lua阶段,通过Lua脚本批量遍历字段并转换键名格式,不过这种方式需要额外配置Lua环境,复杂度更高,适合字段数量多的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:00:57