logstash - 已用过滤器插件奇怪的行为
问题描述
我正在使用经过的过滤器插件来计算特定 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。
解决方案
我终于得到了我的答案。
所以在未来,如果有人面临同样的问题。这是经过过滤器插件的问题。由于为您的 logstash 运行的工人数量不是单一的。
他们应该在他们的文档中提到,经过过滤器插件仅适用于单个 logstash 工作人员。正如他们提到的聚合过滤器插件。
可能会发生一个 id 的开始标签由一个工作人员处理而结束标记由另一个工作人员处理的情况。因此,在这种情况下,它会为该结束事件添加标签“elapsed_end_without_start”。
但是,如果有多个工人。它并不是那个过期的插件会完全失败。它可以给你大约 70-80% 的准确度(它给了我这么多。它完全是随机的)
针对这种情况的解决方法是我们可以将 logstash 工作人员的数量定义为一个。但是,它不是最佳解决方案,因为数据摄取会很慢,并且一名工作人员的负载会很重。
推荐阅读
- terminal - 有什么方法可以将 tmux 窗格调整为不相等的百分比?
- apache-kafka - “jmx_prometheus_javaagent”在 Kafka 集群上不起作用
- sql-server - 错误 0xc0204016:SSIS.Pipeline:“数据转换 [....]”的长度无效。长度必须在 0 到 8000 之间
- reactjs - 如何在反应路线的孩子中使用不同的CSS文件
- hibernate - JPA/Hibernate/Querydsl 无法 sql 命令实体数据类名命令
- monitoring - 结合 2 个不同实例的状态配置 Prometheus 告警规则
- reactjs - 是否有任何反应本机库来检查标记为收藏/加星标的联系人?
- java - Android后台Wifi扫描前台服务
- javascript - 使函数不可变
- javascript - 删除 JS 行和列