过滤 Logstash 中的 JSON/non-JSON 个条目

Filtering JSON/non-JSON entries in Logstash

我对在 Logstash 中过滤条目有疑问。我有两个不同的日志进入 Logstash。一个日志只是带有时间戳和消息的标准格式,但另一个以 JSON.

形式出现

我使用 if 语句来测试某个主机,如果该主机存在,那么我使用 JSON 过滤器来应用于消息...问题是当它遇到非-JSON stdout 消息无法解析并抛出异常。

有谁知道如何测试一个条目是否 JSON 进入应用过滤器,如果没有,就忽略它?

谢谢

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

您可以先尝试使用 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"
     }
}

可能有比这个更简洁的解决方案,但它可以完成工作。