elasticsearch 日志存储更新Elasticsearch中以前的文档,elasticsearch,logstash,kibana,logstash-configuration,elasticsearch,Logstash,Kibana,Logstash Configuration" /> elasticsearch 日志存储更新Elasticsearch中以前的文档,elasticsearch,logstash,kibana,logstash-configuration,elasticsearch,Logstash,Kibana,Logstash Configuration" />

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}"
}