elasticsearch 日志存储更新Elasticsearch中以前的文档
我在编写日志存储配置时面临以下问题。 输入文件如下所示
elasticsearch 日志存储更新Elasticsearch中以前的文档,
elasticsearch,logstash,kibana,logstash-configuration,
elasticsearch,Logstash,Kibana,Logstash Configuration,我在编写日志存储配置时面临以下问题。 输入文件如下所示 { "Id": 1, "item.status":"PENDING_APPROVAL", "originalId": 1, "process": "Item creation" } 将项id:1插入到弹性搜索中。同一个项目随后被批准,批准还生成一个字段originalId为1的日志,该字段表示id为1的项
{
"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\u as\u upsert
方法。
状态
字段将更新,但不会插入审批单。我如何做到这一点
我是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
}
}
您必须使用两个elasticsearch输出。一个用于执行upsert,一个用于索引文档
elasticsearch {
action => "update"
hosts => [ "localhost:9200" ]
index => "items"
document_id => "%{originalId}"
doc_as_upsert => true
}
elasticsearch {
hosts => [ "localhost:9200" ]
index => "items"
document_id => "%{Id}"
}
如果您希望将完整文档转到一个输出,而仅将白名单字段转到另一个输出,则使用带模式的管道到管道通信。将文档写入两个管道,一个是白名单,另一个只是索引文档。我理解,但第二个弹性搜索输出不会只插入白名单字段吗?我有其他与审批流程相关的字段,它们丢失了。那么,有没有办法更新状态字段而不必将其列入白名单?或者当第二个弹性搜索输出执行时,我们可以忽略白名单吗?更新以回答这个问题。
elasticsearch {
action => "update"
hosts => [ "localhost:9200" ]
index => "items"
document_id => "%{originalId}"
doc_as_upsert => true
}
elasticsearch {
hosts => [ "localhost:9200" ]
index => "items"
document_id => "%{Id}"
}