我正在使用经过过滤器插件来计算特定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。
答案 0 :(得分:2)
我终于得到了答案。
所以将来,如果有人遇到同样的问题。 这是过滤器插件已失效的问题。由于正在为您的logstash运行的工人数不是单数。
他们应该在自己的文档中提到,经过过滤器插件仅适用于单个logstash worker。正如他们提到的聚合过滤器插件一样。
id的开始标签可能由一个工作人员处理,而结束标签则由另一工作人员处理。因此,在这种情况下,它将为该结束事件添加标签“ elapsed_end_without_start”。
但是,如果有多个工作人员。它不是那个过去的插件将完全失败。
可以给您大约70-80%的精度(这给了我很多。这完全是随机的)。针对这种情况的解决方法是,我们可以将logtash工人的编号定义为1。但是,它不是最佳解决方案,因为数据提取速度很慢,并且一个工作人员的负担很重。