如何使用logstash删除字段名称中的下划线?

时间:2015-06-26 08:11:02

标签: regex logstash

我正在考虑使用mutate过滤器和rename选项,但我不知道相应的正则表达式可以实现这一点:

filter {
  mutate {
    rename => {
      "any_field_with_underscore" => "anyfieldwithunderscore" # i don't know how to write regex for this ...
    }
  }
}

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:5)

文档中没有迹象表明rename{}采用正则表达式。

我已经通过ruby{}过滤器看到了这一点。

根据要求,这里有一些未经测试的 Ruby:

begin
    keys = event.to_hash.keys
    keys.each{|key|
        if ( key =~ /_/ )

            newkey = key.gsub(/_/, '')
            event[newkey] = event.remove(key)

        end
    }

rescue Exception => e
    event['logstash_ruby_exception'] = 'underscores: ' + e.message
end

答案 1 :(得分:1)

Alain的答案为基础,

在Logstash> = 5.x中,强制执行事件对象访问器:

 ruby {

  code => "
        begin
            keys = event.to_hash.keys
            keys.each{|key|
                if ( key =~ /http_/ )

                    newkey = key.gsub(/http_/, '')
                    event.set(newkey, event.remove(key))

                end
            }

        rescue Exception => e
            event.set('logstash_ruby_exception', 'underscores: ' + e.message)
        end
        "
 }

}

另见this feature request会做同样的事情