通过Logstash过滤器清理日志

时间:2019-07-17 18:15:15

标签: elasticsearch logstash grok

我是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的尝试都失败了。有什么想法可以使它起作用吗?

1 个答案:

答案 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。