获取logstash“指纹”过滤器以获取每个字段

时间:2015-07-23 12:41:00

标签: logstash elasticsearch-plugin

我正在使用Logstash中的fingerprint过滤器创建指纹字段,我在document_id输出中设置为elasticsearch

配置如下:

filter {
  fingerprint {
    method => "SHA1"
    key => "KEY"
  }
}

output {
  elasticsearch {
    host => localhost
    document_id => "%{fingerprint}"
  }
}

默认为source 消息,但如何将SHA1设为整个记录而不仅仅是消息?请注意,记录的哪些字段取决于消息。

2 个答案:

答案 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))"
}