如何在logstash中删除消息?

时间:2017-12-01 08:04:42

标签: logstash

我的应用将日志作为json写入stdout。应用程序在docker中运行。而docker也以json格式记录stdout。所以我有一个json嵌套在json中。这是一个例子:

{"log":"{\"message\":\"Something failed\",\"thread_name\":\"http-nio-8080-exec-1\",\"level\":\"WARN\",\"level_value\":30000,\"test-mdc\":\"test-mdc-value\",\"appname\":\"myWebservice\"}\n","stream":"stdout","time":"2017-11-30T14:44:19.514Z"}

我想删除我的应用程序的日志并将所有字段移到顶层。感谢这个答案Parsing nested JSON string in Logstash我设法解析了所有jsons(虽然我不能理解这个配置中的任何内容),但我的应用程序日志仍然不在顶层。这是我得到的:

 {
      "@version" => "1",
          "host" => "4c11913cddf3",
    "@timestamp" => 2017-12-01T07:50:16.562Z,
       "message" => {
           "test-mdc" => "test-mdc-value",
            "appname" => "myWebservice",
              "level" => "WARN",
        "thread_name" => "http-nio-8080-exec-1",
        "level_value" => 30000,
            "message" => "Something failed"
    }
}

我的配置:

 input { stdin { } }

filter {
 json {
    source => "message"
    target => "message"
  }
 json {
   source => "[message][log]"
   target => "[message]"
 }
}

output { stdout { codec => rubydebug } }

如果有重复项,我可以将所有嵌套字段移到顶层覆盖重复项吗?没有红宝石更好,因为我不知道。

1 个答案:

答案 0 :(得分:0)

回答我自己的问题。您需要删除target => "[message]"。虽然我仍然不完全了解这里发生的事情,但配置应如下所示:

input { stdin { } }

filter {
 json {
    source => "message"
    target => "message"
  }
 json {
   source => "[message][log]"
 }
}

output { stdout { codec => rubydebug } }