Logstash过滤器如何找出已删除的事件?

问题描述

我有LogStash过滤器,我想知道自从此以来日志文件中的哪些事件已被删除 我在logstash输出文件中看不到它们。该怎么做?

我的过滤器如下:

filter {
  grok {
    patterns_dir => "C:\logstash-7.4.2\patterns"
    match => { "message" => "^\[%{TIMESTAMP_ISO8601:timestamp}\]\[%{LOGLEVEL:level}\]\[%{TThread:thread}\]\[%{JAVACLASS:class}\] %{GREEDYDATA:msg}" }
  }
  if "_grokparsefailure" in [tags] {
    drop{}
  }
  

}

解决方法

当您drop在管道中的事件停止在管道中存在时,您不会在任何输出中看到它,也无法删除事件并将其放入输出中。

在这种情况下,您要删除与grok过滤器不匹配的事件,如果您想知道哪些事件未能解析,则需要停止删除这些事件,然后将这些事件重定向到另一个事件输出以进行更好的分析,如果需要,还可以将其保留在相同的输出中,然后再进行过滤。

您可以使用以下配置。

output {
  if "_grokparsefailure" in [tags] {
    output to store failed events
  }
  if "_grokparsefailure" not in [tags] {
    normal output for the other events
  }
}

您还可以在日志级别设置为debug的情况下运行logstash,但是它将记录很多内容,并不是您进行此操作的最佳方法。