logstash 使用自定义ID字段在Elasticsearch中更新插入文档

k2arahey  于 2022-12-09  发布在  Logstash
关注(0)|答案(1)|浏览(368)

我试图从一些日志文件加载/摄取数据,这些文件几乎是存储在一些第三方供应商的数据库中的数据的副本。数据是管道分隔的“键-值”值,我可以使用logstash中的kv过滤器插件将其拆分。
示例数据-
1.)表格=“交易”|商品ID =“1234”| 数量=100个|价格=100.00| BuyOrSell=“买入”|股票=“ABCD公司”
如果我们收到对上述记录的修改,
2.)表格=“交易”|商品ID =“1234”|数量=120|价格=101.74| BuyOrSell=“买入”|股票=“ABCD公司”
我们需要更新在第一个条目上创建的记录。因此,我需要将TradeID设置为ID字段,并需要更新插入记录,这样就不会出现相同TradeID记录的重复。
logstash.conf的代码如下所示-

input {
  file {
    path => "some path"
  }
}

filter {
  kv {
    source => "message"
    field_split => "\|"
    value_split => "="
  }
}

output {
  elasticsearch {
    hosts => ["https://localhost:9200"]
    cacert => "path of .cert file"
    ssl => true
    ssl_certificate_verification  => true
    index => "trade-index"
    user => "elastic"
    password => ""
  }
}
gtlvzcf8

gtlvzcf81#

您需要更新elasticsearch输出,如下所示:

output {
  elasticsearch {
    hosts => ["https://localhost:9200"]
    cacert => "path of .cert file"
    ssl => true
    ssl_certificate_verification  => true
    index => "trade-index"
    user => "elastic"
    password => ""

    # add the following to make it work as an upsert
    action => "update"
    document_id => "%{TradeID}"
    doc_as_upsert => true
  }
}

因此,当Logstash读取第一笔交易时,ID为1234的文档将不存在,并将被插入(即创建)。当读取第二笔交易时,该文档将存在,并将被简单地更新。

相关问题