使用自定义类型和 _id 从 Filebeat 推送到 Elasticsearch

Push from Filbeat to Elasticsearch with custom _type and _id

问题是将 Filebeat 收集的 json 日志推送到具有定义的 _type 和 _id 的 Elasticsearch。默认 elastic _type 是 "log" 并且 _id 是 smth。像 "AVryuUKMKNQ7xhVUFxN2".

我的日志行:

 {"unit_id":10001,"node_id":1,"message":"Msg ..."}

Elasticsearch 中所需的记录:

"hits" : [ {
    "_index" : "filebeat",
    "_type" : "unit_id",
    "_id" : "10001",
    ...
    "_source" : {        
        "message" : "Msg ...",
        "node_id" : 1,
        ...
    }
} ]

我知道如何用 Logstash 做到这一点,只需在输出部分使用 document_id => "%{unit_id}" 和 document_type => "unit_id" .目标是仅使用 Filebeat。因为它是一个非常轻量级的解决方案,这里不需要中间聚合。

您可以使用 Filebeat 中的 document_type 选项设置自定义 _type。 从版本 5.x 开始,无法直接在 Filebeat 中设置 _id

filebeat.prospectors:
- paths: ['/var/log/messages']
  document_type: syslog

您可以使用 Elasticsearch 摄取节点功能来设置 _id 字段。您需要使用 script processor to copy a value from the event into the _id field. Once you have defined your pipeline you would tell Filebeat to send its data to that pipeline using the output.elasticsearch.pipeline 配置选项。

您现在可以设置自定义 _id :https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-deduplication.html