Logstash(6.5.4)ElasticSearch输出

km0tfn4u  于 2022-12-03  发布在  ElasticSearch
关注(0)|答案(1)|浏览(175)

我的filebeat位于两个服务器上。假设app1和app2
我的日志格式为

jobID status data

示例:app1日志

5hgsxyt3838 SCHEDULED data

app2日志

5hgsxyt3838 COMPLETE data

这里这两个日志具有相同的jobID。

elasticsearch {
            hosts => [ "localhost:9200" ]
            index => "import-export-logger-%{index-name}"
            document_id => "%{jobID}"
        }

现在,我希望elasticsearch中的最终状态为COMPLETE,但有时app1上的负载很高,因此app2日志会先处理,然后再处理app1。因此,最终状态变为SCHEDULED
是否有方法可以防止这种情况发生,例如,我希望仅在状态为“完成”时更新文档?当状态为“完成”时,文档不能更新自身

jgovgodb

jgovgodb1#

我不是一个超级粉丝覆盖这样的事件(这将是更好的只是记录所有的事件,然后在您的查询过滤)。
但如果你想走这条路,你可以这样做:

output {
    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
        }
    }
}

因此,如果状态为“已计划”,则将创建文档(如果不存在),完成将更新或创建。

相关问题