获取 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}"
  }
}

这默认为 sourcemessage,但我如何使其 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))"
}