我正在使用Logstash中的fingerprint
过滤器创建指纹字段,我在document_id
输出中设置为elasticsearch
。
配置如下:
filter {
fingerprint {
method => "SHA1"
key => "KEY"
}
}
output {
elasticsearch {
host => localhost
document_id => "%{fingerprint}"
}
}
默认为source
消息,但如何将SHA1设为整个记录而不仅仅是消息?请注意,记录的哪些字段取决于消息。
答案 0 :(得分:2)
我认为使用指纹插件没有内置的可能性。即使 concatenate_sources 选项也无法识别所有字段,并且随着字段的更改,您无法将其手动设置为 source 。
但是,您可以考虑使用ruby插件来计算有关所有字段的SHA1哈希值。以下可能会做你想要的。
filter {
ruby {
init => "require 'digest/sha1'; require 'json'"
code => "event['fingerprint'] = Digest::SHA1.hexdigest event.to_json"
}
}
我刚刚对它进行了测试,并得到了适合所有领域的SHA1哈希值。
答案 1 :(得分:1)
添加到@hurb的解决方案,由于破坏了更改而使用Logstash 5.x,以下内容似乎正在起作用:
ruby {
init => "require 'digest/sha1'; require 'json'"
code => "event.set('fingerprint', Digest::SHA1.hexdigest(event.to_json))"
}