获取logstash“指纹”过滤器以获取每个字段的源
我正在使用Logstash中的指纹过滤器创建一个指纹字段,我将其设置为elasticsearch输出中的document_id 配置如下:获取logstash“指纹”过滤器以获取每个字段的源,logstash,elasticsearch-plugin,Logstash,elasticsearch Plugin,我正在使用Logstash中的指纹过滤器创建一个指纹字段,我将其设置为elasticsearch输出中的document_id 配置如下: filter { fingerprint { method => "SHA1" key => "KEY" } } output { elasticsearch { host => localhost document_id => "%{fingerprint}" } } 默认情况下,
filter {
fingerprint {
method => "SHA1"
key => "KEY"
}
}
output {
elasticsearch {
host => localhost
document_id => "%{fingerprint}"
}
}
默认情况下,源是消息,但如何使其成为整个记录,而不仅仅是消息?注意,记录包含哪些字段取决于消息。我认为使用指纹插件无法实现这一点。即使是concatenate_sources选项也无法识别所有字段,并且随着字段的更改,您无法手动将其设置为源
但是,您可能会考虑使用Ruby插件来计算关于所有字段的Sh1散列。以下内容可能会满足您的需要
filter {
ruby {
init => "require 'digest/sha1'; require 'json'"
code => "event['fingerprint'] = Digest::SHA1.hexdigest event.to_json"
}
}
我刚刚对它进行了测试,得到了关于所有字段的合适的SHA1哈希值。我认为使用指纹插件无法实现这一点。即使是concatenate_sources选项也无法识别所有字段,并且随着字段的更改,您无法手动将其设置为源
但是,您可能会考虑使用Ruby插件来计算关于所有字段的Sh1散列。以下内容可能会满足您的需要
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))"
}
要添加到@hurb的解决方案中,由于破坏性的更改,使用Logstash 5.x,以下内容似乎起到了作用:
ruby {
init => "require 'digest/sha1'; require 'json'"
code => "event.set('fingerprint', Digest::SHA1.hexdigest(event.to_json))"
}
正是我想要的。因为我只是想消化整个过程,所以我将_json改为_s,并去掉了require'json'。这正是我想要的。因为我只想消化整个过程,所以我将_json改为_s,并去掉了require'json'。