Logstash 将事件添加到 elasticsearch 中的现有文档

时间:2021-01-28 09:35:52

标签: elasticsearch logstash kibana logstash-configuration

我已经在 Elasticsearch 中有一个带有 id 的文档(假设为 1)。我需要配置 Logstash,以便将具有相同 ID 的事件插入到 Elasticsearch 中。

已存在 ID 的示例文档:

{
  "name": "abc"
}

Logstash 事件:

{
  "address": "new york",
  "mobile no": "xxx"
}

Elasticsearch 中的最终结果:

{
  "name": "abc",
  "address": "new york",
  "mobile no": "xxx"
}

我尝试在输出插件中使用更新脚本:

elasticsearch {
    action => "update"
    hosts => [ "localhost:9200" ]
    index => "details"
    scripted_upsert => true
    document_id => "%{id}"
    script => "ctx._source.name = params.event.get('name')"
}

这允许我添加每个字段(nameaddress 等),但我需要插入整个 json 事件而不指定每个字段。如何做到这一点?

1 个答案:

答案 0 :(得分:0)

我认为这比你想象的要容易;)

Elasticsearch 支持更新插入:https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html#plugins-outputs-elasticsearch-doc_as_upsert

因此将 action => updatedoc_as_upsert => true 结合起来应该可以完成这项工作:

elasticsearch {
    action => "update"
    hosts => [ "localhost:9200" ]
    index => "details"
    doc_as_upsert => true
    document_id => "%{id}"
}