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

如何在Logstash中从message字段提取等号后的值生成新字段?

问题描述

我的日志里的message字段内容是这样的:

"message":"name="Alert notification" event_id=123 alert_name="alert 1234" ipaddr="192.168.0.1" object_name="localhost.local""

我想通过Grok过滤器把等号后面的值提取出来作为新字段,最终要得到这样的结果:

"alert_name":"alert 1234",
"object_name":"localhost.local",
"ipaddr":"192.168.0.1"

我试过下面这个Grok配置,但它会把整个键值对都抓进去(比如得到"alert_name":"alert_name"="alert 1234"),完全不符合预期:

grok {
        match => { "message" => "%{WORD:method1} %{WORD:method2} %{WORD:method3}" }
      }

请问怎么才能只提取等号后面的值作为新字段的内容?

解决方案

你可以用精准的Grok匹配规则,直接定位目标字段的键和等号后的取值。下面是适配你日志格式的配置:

grok {
  match => {
    "message" => '%{DATA:ignore1}alert_name="%{DATA:alert_name}" %{DATA:ignore2}ipaddr="%{DATA:ipaddr}" %{DATA:ignore3}object_name="%{DATA:object_name}"'
  }
  remove_field => ["ignore1", "ignore2", "ignore3"] # 删掉临时用的冗余字段
}

规则说明:

  • %{DATA:字段名}:DATA模式可以匹配除换行外的任意字符,适合捕获像alert 1234这种带空格的取值。
  • 用alert_name="%{DATA:alert_name}"这种格式,精准匹配alert_name="开头、"结尾的部分,把中间内容直接存为alert_name字段。
  • ignore1/ignore2/ignore3是临时字段,用来跳过不需要的前置内容,最后用remove_field清理即可。

如果你的日志字段顺序不固定,也可以用更灵活的写法逐个匹配目标字段:

grok {
  match => {
    "message" => [
      'alert_name="%{DATA:alert_name}"',
      'ipaddr="%{DATA:ipaddr}"',
      'object_name="%{DATA:object_name}"'
    ]
  }
}

这种写法不管字段在日志中的顺序如何,都能正确提取对应的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:24:14