Filebeat 如何从日志行(message)中解析出字段?

Filebeat 解析日志行的三种方式:dissect 处理器按固定模式切分、grok 正则提取、JSON 日志用 decode_json_fields。本文给出三种写法的配置示例与选型建议。

最佳实践
Filebeat 如何从日志行(message)中解析出字段?封面

三种方式按日志格式选:结构化 JSON 日志用 decode_json_fields;格式固定的文本用 dissect(快);复杂不规则文本用 grok(灵活但慢)。

方式一:JSON 日志——decode_json_fields

processors:
  - decode_json_fields:
      fields: ["message"]
      target: ""        # 解析到顶层;填 "parsed" 则放到 parsed 下
      overwrite_keys: true

日志 {"user":"tom","action":"login"} 解析后 user、action 成为独立字段,可直接检索。

方式二:固定格式——dissect

processors:
  - dissect:
      tokenizer: "%{timestamp} %{level} %{service} %{msg}"
      field: "message"
      target_prefix: "app"

2024-01-01 INFO order 下单成功app.level=INFOapp.service=order。dissect 是简单切分,性能远好于 grok。

方式三:复杂文本——grok

processors:
  - grok:
      field: message
      patterns:
        - '%{IP:client_ip} - %{USER:user} \[%{HTTPDATE:ts}\] "%{WORD:method} %{URIPATH:path}" %{NUMBER:status:int}'

内置丰富预置模式(IP、WORD、NUMBER、HTTPDATE……),适合 Nginx/Apache 等格式明确的日志。

观测云对照

观测云 DataKit Pipeline 的 grok 函数同样内置大量预置模式,且 Pipeline 在控制台可在线调试——粘贴样例日志立即看到解析结果,省去反复重启 Filebeat 验证的过程。

常见问题(FAQ)

Q:dissect 和 grok 怎么选? 格式稳定用 dissect(快 5-10 倍);需要模式复用与类型转换用 grok。

Q:解析失败的日志会怎样? 默认带错误标记继续发送;想丢弃加 drop_event 条件判断错误字段。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台