【问题标题】:Parsing an array of JSON objects from logfile in Logstash从 Logstash 中的日志文件解析 JSON 对象数组
【发布时间】:2021-12-15 03:01:48
【问题描述】:

我有以下格式的日志:

2021-10-12 14:41:23,903716 [{"Name":"A","Dimen":[{"Name":"in","Value":"348"},{"Name":"ses","Value":"asfju"}]},{"Name":"read","A":[{"Name":"ins","Value":"348"},{"Name":"ses","Value":"asf5u"}]}]
2021-10-12 14:41:23,903716 [{"Name":"B","Dimen":[{"Name":"in","Value":"348"},{"Name":"ses","Value":"a7hju"}]},{"Name":"read","B":[{"Name":"ins","Value":"348"},{"Name":"ses","Value":"ashju"}]}]

每个日志都在一个新行上。问题是我希望顶层数组中单行中的每个对象都是一个单独的文档并进行相应的解析。

我需要解析这个并将其发送到 Elasticsearch。我尝试了许多过滤器、grok、JSON、split 等,但我无法让它按我需要的方式工作,而且我对这些过滤器的经验很少,所以如果有人能提供帮助,将不胜感激。

如果我可以从文件中删除文本/时间戳,我将需要 JSON codec

"如果要发送的数据是一个位于根的 JSON 数组,则将创建多个事件(每个元素一个)"

如果有办法做到这一点,这也会有所帮助

【问题讨论】:

    标签: arrays json parsing elasticsearch logstash


    【解决方案1】:

    这是您的用例的配置示例:

    input { stdin {} }
    filter {
    grok {
            match => { "message" => "%{DATA:date},%{DATA:some_field} %{GREEDYDATA:json_message}" }
          }
    
    #Use the json plugin to translate raw to json
    json { source => "json_message" target => "json" }
    
    #and split the result to dedicated raws
    split { field => "json" }
    
    }
    output {
      stdout {
        codec => rubydebug 
      }
    }
    

    如果您需要将日志的开头解析为日期,您可以使用日期格式的 grok 或连接两个字段并将比设置为日期插件的源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多