Logstash 中如何解析 JSON 格式的日志?

Logstash 处理 JSON 日志两种方式:input 的 codec => json 整个事件按 JSON 解析,或 filter 的 json 插件解析 message 字段。本文给出配置示例及常见问题。

最佳实践
Logstash 中如何解析 JSON 格式的日志?封面

JSON 日志两种接法:如果每行日志整体就是一个 JSON 对象,在 input 中设 codec => "json" 一步到位;如果 JSON 嵌在 message 字段里(混合格式),用 filter 的 json 插件解析。

方式一:codec => json(整行都是 JSON)

input {
  file {
    type => "json"
    path => "/var/log/mylogs.log"
    start_position => "beginning"
    codec => "json"
  }
}

假设日志内容:

{"status": 200, "ip": "127.0.0.1", "level": 30, "msg": "Connected to database", "timestamp": 1696150204}

解析后 JSON 的每个键直接成为事件的顶层字段,无需 filter。

方式二:filter json 插件(JSON 在字段里)

filter {
  json {
    source => "message"
  }
}

解析失败会给事件打上 _jsonparsefailure 标签,可按标签分流处理。

解析后常用操作

filter {
  json { source => "message" }

  # 用 JSON 里的时间字段作为事件时间
  date {
    match => ["timestamp", "UNIX"]
  }

  # 字段类型转换
  mutate {
    convert => { "status" => "integer" }
  }
}

观测云对照

观测云 DataKit 采集 JSON 日志后,Pipeline 自动识别 JSON 并提取字段,无需编写 codec 或 filter 配置;字段类型可在 Pipeline 中控制,检索、告警直接可用。

常见问题(FAQ)

Q:日志是"前缀文本 + JSON"的混合格式?
A:先用 grok 把 JSON 部分提取到单独字段,再用 json 插件解析该字段。

Q:JSON 里有嵌套对象会怎么处理?
A:嵌套结构原样保留,Logstash 里用 [parent][child] 语法访问子字段。

Q:codec json 解析失败会丢数据吗?
A:不会丢,事件会以原始 message 形式继续流转并打上 _jsonparsefailure 标签。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台