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

Logstash事件字段引用不生效 无法正确提取product字段值如何解决

问题背景

从Python向Logstash传入的事件结构如下:

{
   "@timestamp":"2022-06-13T16:48:39.422Z",
   "@version":"1",
   "message":"Something happened",
   "host":"Not important",
   "path":"Not important",
   "tags":[],
   "type":"logstash",
   "level":"INFO",
   "logger_name":"python-logstash-logger",
   "product":"MySoftware"
}

需求是提取事件中的product字段,供后续Kibana使用。
之前尝试使用的filter配置:

filter {
    mutate {
        add_field => { "Product" => "%{product}" }
    }
}

实际输出为Product = %{product},不符合预期的Product = MySoftware结果。

故障原因

%{product}格式没有被解析为实际字段值,核心原因是mutate执行add_field操作时,当前事件上下文里不存在根层级的product字段,常见触发场景:

  • filter插件顺序错误:新增字段的mutate配置放在了日志格式解析插件(json/grok等)之前,原始传入的日志还没被拆解为独立字段,自然无法引用到product
  • 字段层级错误:product没有被解析到事件根目录,而是嵌套在其他子字段下,直接写%{product}无法匹配到对应路径
正确配置方案

根据实际场景选择对应配置即可:

  • 调整filter执行顺序,先完成日志格式解析,再操作字段
    如果Python端发送的是JSON格式日志,必须先通过json插件把原始日志内容解析为根层级的独立字段,再执行字段新增操作,参考配置:
    filter {
        # 第一步:解析message字段中存储的JSON日志内容,拆解为独立字段
        json {
            source => "message"
            target => ""
        }
        # 第二步:字段解析完成后,再新增目标字段
        mutate {
            add_field => { "Product" => "%{[product]}" }
        }
    }
    
  • 补全嵌套字段的引用路径
    如果解析后product存在于嵌套结构中,比如在fields子字段下,把字段引用修改为对应完整路径即可:%{[fields][product]}
  • 优先使用copy配置做字段复制
    如果只是要把现有product字段的值同步到新的Product字段,用mutate的copy选项更稳定,不需要依赖sprintf字符串解析逻辑:
    filter {
        json {
            source => "message"
        }
        mutate {
            copy => { "product" => "Product" }
        }
    }
    

调试提示:配置调试阶段可以开启stdout输出插件,使用rubydebug编码格式打印全量事件内容,确认product字段的实际存在层级和解析时机,再调整filter顺序与字段引用路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:48:29