在编写logstash配置时,我面临以下问题。输入文件如下所示
{
"Id": 1,
"item.status":"PENDING_APPROVAL",
"originalId": 1,
"process": "Item creation"
}将项目id : 1插入到弹性搜索中。同一项随后被批准,并且该批准还生成一个日志,字段originalId为1,表示id 1的项已被批准。
{
"Id": 2,
"item.status":"APPROVED",
"originalId": 1,
"process" : "Item approval"
}我在这里的问题是如何更新插入数据的状态,同时也插入已批准的日志,以便弹性搜索中的结果数据应该类似于
{
"Id": 1,
"item.status":"APPROVED",
"originalId": 1,
"process": "Item creation"
}
{
"Id": 2,
"item.status":"APPROVED",
"originalId": 1,
"process" : "Item approval"
}我确实在logstash中尝试了doc_as_upsert方法。status字段将得到更新的,但审批文档不会插入。我怎样才能做到这一点?
我对logstash非常陌生,所以任何帮助都是非常感谢的:)。
这是我的储藏室。
input {
file {
//input file location
}
}
filter {
json{
skip_on_invalid_json => true
source => "message"
}
if ( [process] in ["Item approval"] ) {
prune{
whitelist_names => ["item.status","originalId"]
}
}
}
output {
elasticsearch {
action => "update"
hosts => [ "localhost:9200" ]
index => "items"
document_id => "%{originalId}"
doc_as_upsert => true
}
}发布于 2021-04-15 17:52:02
您必须使用两个elasticsearch输出。一个用来重新插入,一个用来索引文档。
elasticsearch {
action => "update"
hosts => [ "localhost:9200" ]
index => "items"
document_id => "%{originalId}"
doc_as_upsert => true
}
elasticsearch {
hosts => [ "localhost:9200" ]
index => "items"
document_id => "%{Id}"
}如果要将完整的文档转到一个输出,而只将白色字段转到另一个输出,则使用具有叉道模式的管道到管道通信。将文档写入两个管道,一个是白名单和向上插入,另一个是索引文档。
https://stackoverflow.com/questions/67113163
复制相似问题