我的计划是使用 Logstash 过滤特定 IP 的日志文件。
我从一个简单的IP过滤器开始,它应该删除所有无效IP的行,然后删除。
grok {
match => [ "ip_filter" , " %{IPV4:clientip}" ]
tag_on_failure => [ "_todelete" ]
}
因此,每行具有无效 IP 的行都应该被标记为_todelete,但在 Kibana 上,我看到每一行都标有它。知道为什么吗?
我的下一步是删除所有带有标签"_todelete"的行
grok {
remove_tag => [ "_todelete" ]
}
这让我想到了一个"_grokparsefailure">
感谢您的帮助!
如果有人也需要答案:问题是格罗克在IP之前寻找一个空间。就我而言,该行直接以IP开头,所以我的解决方案是使用
^%{IPV4:clientip}
您可以使用基于标记的条件来控制是否将行发送到 logstash 文件中的 ES 输出。
尝试这样的事情:
output {
if "_todelete" not in [tags] {
elasticsearch {
index => "index-%{+YYYY.MM.dd}"
}
}
}
添加此条件应过滤不需要的行,而不是将它们输出到 ES 索引。