我是Logstash的新手,想看看是否有人可以帮助解析我的应用程序日志,如下所示(更改了具有随机字符的api键):
2019-07-17 16:57:20,522:钎焊信息:正文:{“属性”: [{“ external_id”:“ vT9fswqW”,“ email”:“ aaa@yahoo.com”,“ site”: “ site”}],“ api_key”:“ fg09831e-9re0-tc19-81c6-08934539f0vx2”,“事件”: [{“ properties”:{“ site”:“ site”},“ external_id”:“ vT9fswqW”,“ name”: “ REGISTER”,“ time”:“ 2019-07-17'+ 0'16:57:20.522380”}]}
此日志转到logstash,在将日志存储到ES中之前可以在其中应用过滤器。我想清理此日志以隐藏某些信息,例如电子邮件,external_id和api_key,因此,logstash的最终输出将类似于:
2019-07-17 16:57:20,522:钎焊信息:正文:{“属性”: [{“ external_id”:“ ****”,“ email”:“ ****”,“ site”: “ site”}],“ api_key”:“ fg09831e-****”,“事件”: [{“ properties”:{“ site”:“ site”},“ external_id”:“ ****”,“ name”: “ REGISTER”,“ time”:“ 2019-07-17'+ 0'16:57:20.522380”}]}
以{"attributes"...
开头的部分是有效的JSON,因此我在考虑是否可以将日志的该部分存储在单独的字段中,然后可以应用json
logstash过滤器然后进行突变田野。我正在尝试将日志分开以仅获取json,但是所有使用grok的尝试都失败了。有什么想法可以使它起作用吗?
答案 0 :(得分:1)
您可以使用
grok { match => { "message" => "Body: %{GREEDYDATA:[@metadata][json]}" } }
json {
source => "[@metadata][json]"
remove_field => [ "[api_key]", "[attributes][0][email]", "[attributes][0][external_id]", "[events][0][external_id]" ]
}
要解析消息的第一部分,我将使用Dissect而不是grok。