Logstash 过滤器如何找出哪些事件已被删除?

Logstash filter how to find out what events have been dropped?

我有 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 过滤器不匹配的事件,如果您想知道哪些事件未能被解析,您将需要停止丢弃这些事件,然后重定向这些事件到另一个输出以进行更好的分析,如果你愿意,你也可以将 then 保留在相同的输出中并稍后过滤。

您可以使用类似下面的配置。

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

您也可以 运行 将日志级别设置为调试的 logstash,但它会记录很多内容,这不是处理您的情况的最佳方式。