我是新手,可能有些细节描述不清楚,请大家耐心看完。我的测试环境如下:
1)elasticsearch版本2.2.0,安装目录/opt/elasticsearch
2)logstash版本2.2.2,安装目录/opt/logstash
3)测试文件为/tmp/test_file,内容只有一行
{"b":{"b1":0.0}}
4)logstash的配置文件内容
input {
file {
path => ["/tmp/test_file"]
sincedb_path => "/tmp/sincedb"
codec => json
type => "nginx_visit"
start_position => "beginning"
}
}
filter {
fingerprint {
method => "SHA1"
key => "160129"
source => ["[b]"]
}
}
output {
elasticsearch {
hosts => "192.168.233.103"
document_id => "%{fingerprint}"
}
}
问题描述:
每次停止logstash之后,删除sincedb,然后再启动logstash,在elasticsearch中会生成一个新的document,但是原来的document仍然保留。因此就产生了重复记录
另外我发现的问题还有:
1)正如我的配置文件logstash.conf中,如果logstash的input插件是file,file指定的文件test_file的内容中某一个字段含有子字段,并且子字段的数据类型是浮点数时,每次重新启动logstash,fingerprint就会产生不一样的值。
2)如果第1)条中的子字段的类型不是浮点数,而是整型或字符串型等,每次重启logstash,fingerprint就能计算出唯一值
3)我用checksum插件代替fingerprint用来生成documentID,出现的情况和fingerprint的情况相同。
请大家帮我看看我的错误出在什么地方。谢谢