1

我有以下设置:

FileBeat -> Logstash -> Elasticsearch -> Kibana(全部 5.1.1)

当我将日志文件JSON(在检查了 FileBeat 日志后,我知道这可能是因为 Filebeat 没有收到已发送日志的确认,所以它一直在重新发送。为了停止接收重复的文件,我想我将不得不使用一个document_idin logstash 配置文件。
IE

output
{ 
    elasticsearch { 
        document_id => "%{offset}"
        index => "ap-index"
        hosts => ["localhost:9222"]
    }
}

我的问题是,每个文档的偏移字段是否唯一?这是停止接收重复的正确方法吗?

4

1 回答 1

1

如果 Filebeat 没有收到来自 Logstash 的确认,这是一个迹象或问题,您应该首先找到根本原因(您的管道可能存在拥塞)。

如果您有多个日志文件或进行任何日志轮换,则偏移量不是唯一的。如果您的日志消息包含时间戳,那么我建议使用指纹过滤器来生成消息的哈希值。然后使用指纹哈希作为 Elasticsearch 中的文档 ID。

input {
  beats {
    port => 5044
  }
}

filter {
  fingerprint {
    method => "SHA1"
    key    => "some_random_hmac_key"
    source => ["[beat][hostname]", "offset", "message"]
    concatenate_sources => true
    target => "[@metadata][id]"
  }
}

output {
  elasticsearch {
    hosts => "localhost:9200"
    manage_template => false
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
    document_id =>"%{[@metadata][id]}"
  }
}
于 2017-04-11T13:11:55.303 回答