elasticsearch 通过Logstash过滤器清理日志,elasticsearch,logstash,logstash-grok,elasticsearch,Logstash,Logstash Grok" /> elasticsearch 通过Logstash过滤器清理日志,elasticsearch,logstash,logstash-grok,elasticsearch,Logstash,Logstash Grok" />

elasticsearch 通过Logstash过滤器清理日志

elasticsearch 通过Logstash过滤器清理日志,elasticsearch,logstash,logstash-grok,elasticsearch,Logstash,Logstash Grok,我是logstash的新手,想看看是否有人可以帮助解析我的应用程序日志,这看起来像是用随机字符更改了api键: 2019-07-17 16:57:20522:钎焊信息:主体:{属性: [{外部id:vT9fswqW,电子邮件:aaa@yahoo.com,网址: 现场}],api_密钥:fg09831e-9re0-tc19-81c6-08934539f0vx2,事件: [{properties:{site:site},外部_id:vT9fswqW,名称: 寄存器,时间:2019-07-17'+0'

我是logstash的新手,想看看是否有人可以帮助解析我的应用程序日志,这看起来像是用随机字符更改了api键:

2019-07-17 16:57:20522:钎焊信息:主体:{属性: [{外部id:vT9fswqW,电子邮件:aaa@yahoo.com,网址: 现场}],api_密钥:fg09831e-9re0-tc19-81c6-08934539f0vx2,事件: [{properties:{site:site},外部_id:vT9fswqW,名称: 寄存器,时间:2019-07-17'+0'16:57:20.522380}]}

此日志进入logstash,在将日志存储到ES之前,可以在其中应用过滤器。我想清理此日志以隐藏某些信息,如电子邮件、外部id和api密钥,因此logstash的最终输出如下:

2019-07-17 16:57:20522:钎焊信息:主体:{属性: [{外部id:***,电子邮件:***,网站: 站点}],api_密钥:fg09831e-***,事件: [{properties:{site:site},外部_id:***,名称: 寄存器,时间:2019-07-17'+0'16:57:20.522380}]}

以…开头的部分{attributes…是一个有效的JSON,所以我在想,如果我可以将日志的这一部分存储在一个单独的字段中,那么我可以应用JSON logstash过滤器,然后对字段进行变异。我试图分离日志以仅获取JSON,但我所有使用grok的尝试都失败了。有什么办法可以让它工作吗?

你可以使用

    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。

谢谢,@Badger,这确实帮助解决了我的问题!