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

Logstash Grok解析失败求助:MongoDB输出格式配置问题

问题分析与解决提示

核心问题

出现_grokparsefailure的主要原因是错误地用grok插件执行字段添加/删除操作。grok的核心作用是文本解析匹配,若仅配置add_field或remove_field却未指定match规则,它会默认尝试匹配message字段,因无有效匹配规则导致解析失败,进而添加失败标签。此外,分散的grok解析块也存在冗余,增加了出错概率。

修正后的配置示例

filter {
  # 一次性解析所有核心字段,覆盖原message
  grok {
    match => {
      "message" => "%{LOGLEVEL:level}: %{YEAR:year}/%{MONTHNUM:month}/%{MONTHDAY:day} %{TIME:time} %{DATA:title}\.go:%{NUMBER:line}: %{GREEDYDATA:content}"
    }
    overwrite => [ "message" ]
    tag_on_failure => [] # 若存在格式异常日志,可根据需求调整是否保留失败标签
  }

  # 用mutate插件拼接目标日期字段
  mutate {
    add_field => {
      "date" => "%{year}-%{month}-%{day}T%{time}+09:00"
    }
  }

  # 用mutate插件清理冗余字段
  mutate {
    remove_field => ["year", "month", "day", "time", "event", "@version", "agent", "host", "@timestamp", "ecs"]
  }
}

关键修改说明

  • 合并grok解析规则:把分散的多个grok块合并为一个,一次性解析出level、year、month、day、time、title、line、content字段,减少解析步骤,降低出错概率。
  • 替换字段操作插件:mutate是Logstash专门用于字段增删改的工具,用它替代grok执行add_field和remove_field,从根源避免无匹配导致的失败标签。
  • 失败标签可控:通过tag_on_failure => []可关闭当前grok块的失败标签添加,若日志存在多种格式,可保留标签后续处理异常日志。

预期处理效果

修正后,文档将不再包含_grokparsefailure标签,最终结构如下:

{
  "level": "ERROR",
  "title": "statistics_sales",
  "line": "136",
  "content": "sdb.FindUserByID, error:  mongo: no documents in result",
  "date": "2022-08-16T13:27:42.292305+09:00",
  "log": {
    "offset": 575,
    "file": {
      "path": "/home/bjkang/LogCollector/Log/service_log_2022-08-23.log"
    }
  },
  "input": {
    "type": "log"
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:34:43