过滤logstash中的json/非json条目

o75abkj4  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(508)

我有一个关于过滤logstash中的条目的问题。我有两个不同的日志进入日志库。一个日志只是带有时间戳和消息的std格式,而另一个则是json格式。
我使用if语句测试某个主机,如果该主机存在,则使用json过滤器应用于消息。。。问题是当它遇到非json标准输出消息时,它无法解析它并抛出异常。
有没有人知道如何测试一个条目是否是json,如果不是,就忽略它?
谢谢

if [agent][hostname] == "some host"
  # if an entry is not in json format how to ignore?
  {
    json {
      source => "message"
      target => "gpfs"
     }
  }
xsuvu9jc

xsuvu9jc1#

作为第一步,您可以尝试使用grok过滤器。

grok {
    match => {
      "message" => [
        "{%{GREEDYDATA:json_message}}",
        "%{GREEDYDATA:std_out}"
     ]
  }
}
if [json_message]
{
    mutate {
        replace => { "json_message" => "{%{json_message}}"}
    }
    json {
        source => "json_message"
        target => "gpfs"
     }
}

也许有比这更清洁的解决方案,但它会做的工作。

相关问题