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

Logstash解析JSON时remoteReferenceId字段取值异常求助

问题原因

  1. JSON解析配置错误:你设置的json filter指定source => "messages",但实际输入的是包含messages数组的完整JSON对象,应该先解析整个输入内容,而非直接解析messages字段。这导致Logstash事件的顶层不存在remoteReferenceId字段,所以mutate里的占位符%{[remoteReferenceId]}找不到对应值,只能原样输出。
  2. 未处理数组拆分:messages是数组结构,remoteReferenceId只存在于数组的每个元素中。你没有将数组拆分为单独的事件,直接在顶层引用不存在的字段,自然无法获取到真实值。

修正后的Logstash配置

input {
  file {
    mode => "read"
    path => "/path-to-data/*.json"
    file_completed_action => "delete"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    type => "json"
    codec => multiline {
        pattern => "remoteReferenceId"
        negate => true
        what => previous
        auto_flush_interval => 1
        multiline_tag => ""
     }
  }
}
filter{
    # 解析整个输入的JSON内容,生成顶层的messages数组和timestamp字段
    json{
        source => "message"
    }
    # 将messages数组拆分为单独事件,每个数组元素对应一条事件
    split {
        field => "messages"
    }
    # 拆分后每个事件的messages是单个对象,可直接引用其中的remoteReferenceId
    mutate {
        add_field => {
            "remoteReferenceId" => "%{[messages][remoteReferenceId]}"
        }
        # 可选:不需要保留原始messages字段时可删除
        # remove_field => ["messages"]
    }
}
output {
    elasticsearch{
        hosts => ["http://localhost:9200/"]
        index => "index_messages"
    }
    stdout { codec => rubydebug }
}

关键说明

  • 用json{ source => "message" }解析完整输入,让Logstash识别到顶层的messages数组和timestamp字段。
  • split filter把数组拆成独立事件,每个事件对应一条消息数据。
  • 拆分后每个事件的messages是单个对象,通过%{[messages][remoteReferenceId]}就能正确提取到目标值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:22:16