首页 > 解决方案 > 已用过滤器插件奇怪的行为

问题描述

我正在使用经过的过滤器插件来计算特定 id 的多个开始/结束事件之间的时间差。

if [StepName] == "Step1" and [StepStatus] == "start" {
    mutate { add_tag => "Step1_start" }
} else if [StepName] == "Step1" and [StepStatus] == "end" {
    mutate { add_tag => "Step1_end" }
} else if [StepName] == "Step2" and [StepStatus] == "start" {
    mutate { add_tag => "Step2_start" }
} else if [StepName] == "Step2" and [StepStatus] == "end" {
    mutate { add_tag => "Step2_end" }
} else if [StepName] == "Step3" and [StepStatus] == "start" {
    mutate { add_tag => "Step3_start" }
} else if [StepName] == "Step3" and [StepStatus] == "end" {
    mutate { add_tag => "Step3_end" }
} 

elapsed{
    start_tag => "Step1_start"
    end_tag => "Step1_end"
    unique_id_field => "FrtId"
    new_event_on_match => false
    timeout => 1800
}
elapsed{
    start_tag => "Step2_start"
    end_tag => "Step2_end"
    unique_id_field => "FudtId"
    new_event_on_match => false
    timeout => 1800
}
elapsed{
    start_tag => "Step3_start"
    end_tag => "Step3_end"
    unique_id_field => "FudtId"
    new_event_on_match => false
    timeout => 1800
}

我面临的问题是,尽管数据绝对正确。对于许多文档,我得到了“elapsed_end_without_start”标签。但是,对于同一个文档,我在加载它的文件中已经存在开始标记。

任何帮助将不胜感激。感谢A2A。

标签: logstashlogstash-configurationlogstash-file

解决方案


我终于得到了我的答案。

所以在未来,如果有人面临同样的问题。这是经过过滤器插件的问题。由于为您的 logstash 运行的工人数量不是单一的。

他们应该在他们的文档中提到,经过过滤器插件仅适用于单个 logstash 工作人员。正如他们提到的聚合过滤器插件。

可能会发生一个 id 的开始标签由一个工作人员处理而结束标记由另一个工作人员处理的情况。因此,在这种情况下,它会为该结束事件添加标签“elapsed_end_without_start”。

但是,如果有多个工人。它并不是那个过期的插件会完全失败。它可以给你大约 70-80% 的准确度(它给了我这么多。它完全是随机的

针对这种情况的解决方法是我们可以将 logstash 工作人员的数量定义为一个。但是,它不是最佳解决方案,因为数据摄取会很慢,并且一名工作人员的负载会很重。


推荐阅读