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

Logstash Grok解析失败求助:无法提取content字段

Logstash Grok解析失败问题解决方法

问题背景

Grok规则在调试器中测试原始日志示例正常,但Logstash运行时出现_grokparsefailure标签,无法提取content等自定义字段。

相关信息

  • 服务器日志示例:

2023-07-14 16:33:58.464 [traceId:] [http-nio-9013-exec-10] INFO com.tlx.usercenter.socket.service.WebSocketServer - websocket disconnect!

  • 使用的Grok配置:
grok {
  match => { "message" => "(?<logTime>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{3})\s+\[(?<traceId>\S*)\]\s+\[(?<thread>.*)\]\s+(?<level>\w*)\s+(?<class>\S*)\s+\-\s+(?<content>.*)" }
}
  • Logstash输出日志片段:
{
    "tags": [
        "multiline",
        "_grokparsefailure"
    ],
    "level": "INFO",
    "message": "【websocket服务端】连接断开,总数为:1",
    "thread_name": "http-nio-9013-exec-10",
    "logger_name": "com.tlx.usercenter.socket.service.WebSocketServer",
    "@timestamp": 2023-07-14T08:33:58.464Z
}

排查关键点

  1. message字段内容不符:调试器使用完整原始日志行,但Logstash输出中的message仅为日志内容部分,说明输入阶段已通过log4j/json等codec将原始日志解析为结构化数据,message不再是整行日志。
  2. multiline标签影响:输出带有multiline标签,可能是multiline插件合并日志行导致message为多行内容,与Grok规则匹配的单行格式冲突。
  3. Grok规则细节问题:规则中\d{2}:\d{2}:\d{2}.\d{3}的.未转义,正则中.匹配任意字符,可能导致匹配异常。

解决步骤

1. 确认输入阶段的日志处理逻辑

  • 若使用log4j/json等codec:这类codec会自动解析日志为结构化字段(如level、thread_name),此时content对应的数据就是当前的message字段。若需保留原始日志行,可在输入阶段添加字段存储原始内容:
input {
  file {
    path => "/path/to/your/logs"
    codec => log4j {
      add_field => { "raw_message" => "%{message}" }
    }
  }
}

之后将Grok匹配目标改为raw_message字段。

  • 若使用multiline插件:检查配置是否正确,确保每条日志为独立单行。正确配置示例(以时间戳开头作为新日志起始):
input {
  file {
    path => "/path/to/your/logs"
    codec => multiline {
      pattern => "^%{YEAR}-%{MONTHNUM}-%{MONTHDAY}"
      negate => true
      what => "previous"
    }
  }
}

2. 修正Grok规则

转义正则中的.,调整后的规则:

grok {
  match => { "raw_message" => "(?<logTime>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3})\s+\[(?<traceId>\S*)\]\s+\[(?<thread>.*)\]\s+(?<level>\w*)\s+(?<class>\S*)\s+\-\s+(?<content>.*)" }
}

3. 验证实际字段内容

在Logstash配置中添加标准输出,确认message或raw_message的实际内容:

output {
  stdout { codec => rubydebug }
}

根据输出的字段内容调整Grok匹配的目标字段和规则,确保与实际输入的日志内容一致。

内容的提问来源于stack exchange,提问作者刘楠庭

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:52:40