我正在构建logstash,并希望构建功能来匿名化消息中指定的字段。
根据以下消息,字段fta
是要匿名化的字段列表。我想使用%{fta}
并将其传递给匿名过滤器,但这似乎不起作用。
{ "containsPII":"True", "fta":["f1","f2"], "f1":"test", "f2":"5551212" }
我的配置如下
input {
stdin { codec => json }
}
filter {
if [containsPII] {
anonymize {
algorithm => "SHA1"
key => "123456789"
fields => %{fta}
}
}
}
output {
stdout {
codec => rubydebug
}
}
输出
{
"containsPII" => "True",
"fta" => [
[0] "f1",
[1] "f2"
],
"f1" => "test",
"f2" => "5551212",
"@version" => "1",
"@timestamp" => "2016-07-13T22:07:04.036Z",
"host" => "..."
}
有没有人有任何想法?我在这一点上尝试了几种排列而没有运气。
谢谢, -D
编辑: 在Elastic论坛上发帖后,我发现使用基本logstash功能是不可能的。我会尝试使用红宝石过滤器。那么,为了修改我的问题,如何在ruby过滤器中调用另一个过滤器?我尝试了以下没有运气,老实说,甚至不知道在哪里看。我对红宝石很新。
filter {
if [containsPII] {
ruby {
code => "event['fta'].each { |item| event[item] = LogStash::Filters::Anonymize.execute(event[item],'12345','SHA1') }"
add_tag => ["Rubyrun"]
}
}
}
答案 0 :(得分:0)
好吧,我无法弄清楚如何从红宝石过滤器中调用另一个过滤器,但我确实达到了功能目标。
filter {
if [fta] {
ruby {
init => "require 'openssl'"
code => "event['fta'].each { |item| event[item] = OpenSSL::HMAC.hexdigest(OpenSSL::Digest::SHA256.new, '123456789', event[item] ) }"
}
}
}
如果字段FTA存在,它将对该数组中列出的每个字段进行SHA2编码。
答案 1 :(得分:0)
您可以从ruby脚本执行过滤器。步骤将是:
以下是示例配置文件。
input { stdin { codec => json_lines } }
filter {
ruby {
init => "
require 'logstash/filters/anonymize'
# Create instance of filter with applicable parameters
@anonymize = LogStash::Filters::Anonymize.new({'algorithm' => 'SHA1',
'key' => '123456789',
'fields' => ['my_ip']})
# Make sure to call register
@anonymize.register
"
code => "
# Invoke the filter
@anonymize.filter(event)
"
}
}
output { stdout { codec => rubydebug {metadata => true} } }