我有以下设置:
FileBeat - > Logstash - > Elasticsearch - > Kibana(全部5.1.1)
当我将日志文件(JSON
)推入Filebeat时,如果我尝试在Kibana界面中看到它,则会添加相同的日志3-4次(重复)。
检查FileBeat日志后,我发现可能是因为Filebeat没有收到已发送日志的确认,因此它会继续重新发送。
停止接收重复文件我想我必须在logstash配置文件中使用document_id
。
即
output
{
elasticsearch {
document_id => "%{offset}"
index => "ap-index"
hosts => ["localhost:9222"]
}
}
我的问题是,每个文档的偏移字段是唯一的吗? 这是否是停止接收重复的正确方法?
答案 0 :(得分: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]}"
}
}