Elapsed Filter 插件奇怪的行为
Elapsed Filter Plugin weird behaviour
我正在使用 elapsed 过滤器插件来计算特定 ID 的多个 start/end 事件之间的时间差。
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。
我终于得到了答案。
所以以后,如果有人遇到同样的问题。
这是经过的过滤器插件的问题。由于您的 logstash 运行 的工人数量不是单一的。
They should mention in their documentation that elapsed filter plugin works correct only with single logstash worker. As they have mentioned for aggregate filter plugin.
可能会出现一个 id 的开始标记由一个 worker 处理而结束标记由另一个 worker 处理的情况。所以在这种情况下,它会为该结束事件添加标签 "elapsed_end_without_start"。
但是,如果有多个worker。这并不是说 elapsed 插件会完全失败。它可以给你大约 70-80% 的准确率(它给了我这么多。它完全是随机的)
解决这种情况的方法是我们可以将 logstash worker 的数量定义为一个。但是,这不是最佳解决方案,因为数据摄取会很慢,并且会给一名工作人员带来沉重的负担。
我正在使用 elapsed 过滤器插件来计算特定 ID 的多个 start/end 事件之间的时间差。
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。
我终于得到了答案。
所以以后,如果有人遇到同样的问题。 这是经过的过滤器插件的问题。由于您的 logstash 运行 的工人数量不是单一的。
They should mention in their documentation that elapsed filter plugin works correct only with single logstash worker. As they have mentioned for aggregate filter plugin.
可能会出现一个 id 的开始标记由一个 worker 处理而结束标记由另一个 worker 处理的情况。所以在这种情况下,它会为该结束事件添加标签 "elapsed_end_without_start"。
但是,如果有多个worker。这并不是说 elapsed 插件会完全失败。它可以给你大约 70-80% 的准确率(它给了我这么多。它完全是随机的)
解决这种情况的方法是我们可以将 logstash worker 的数量定义为一个。但是,这不是最佳解决方案,因为数据摄取会很慢,并且会给一名工作人员带来沉重的负担。