Logstash(6.5.4)为ElasticSearch添加管道

mcvgt66p  于 2022-12-09  发布在  Logstash
关注(0)|答案(1)|浏览(171)

日志格式jobID status data
假设我的日志是按照5hgsxyt3838 RUNNING data5hgsxyt3838 RUNNING data5hgsxyt3838 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
            }
        }
    }
}
jhdbpxl9

jhdbpxl91#

您需要只使用一个工作线程来运行管道。如果不这样做,则会创建与可用CPU数量一样多的工作线程,在这种情况下,某些事件可能会被并发处理,前一行可能会在最后一行之后到达。
如果已在pipeline.yml中配置管道,则需要在配置文件中进行设置:

pipeline.workers: 1

否则,如果从命令行运行Logstash,则只需添加-w开关

bin/logstash -f logstash.conf -w 1

或等效地

bin/logstash -f logstash.conf --pipeline.workers 1

相关问题