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