日志格式jobID status data
。
假设我的日志是按照5hgsxyt3838 RUNNING data
5hgsxyt3838 RUNNING data
5hgsxyt3838 COMPLETE data
的顺序打印的。这里我希望我在elasticsearch的最终状态是日志最后一行的状态。但是我观察到,对于多个jobID,我的最终状态不是最后一行的状态,而是来自前面某行的状态。可能是什么原因?有没有办法使用管道来解决这个问题(如果我的最后一行状态是“完成”,则前面的任何其他行都不应覆盖它)或其他内容?
输出块
output {
if [fields][target_index] == "import-export-logger" {
if [status] == "SCHEDULED" {
elasticsearch {
hosts => [ "localhost:9200" ]
index => "import-export-logger-%{index-name}"
document_id => "%{jobID}"
action => "create"
}
}
else {
elasticsearch {
hosts => [ "localhost:9200" ]
index => "import-export-logger-%{index-name}"
document_id => "%{jobID}"
action => "update"
doc_as_upsert => true
}
}
}
}
1条答案
按热度按时间jhdbpxl91#
您需要只使用一个工作线程来运行管道。如果不这样做,则会创建与可用CPU数量一样多的工作线程,在这种情况下,某些事件可能会被并发处理,前一行可能会在最后一行之后到达。
如果已在
pipeline.yml
中配置管道,则需要在配置文件中进行设置:否则,如果从命令行运行Logstash,则只需添加
-w
开关或等效地