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

Regex 如何使用logstash删除字段名中的下划线?,regex,logstash,Regex,Logstash,我正在考虑使用mutate过滤器和rename选项,但我不知道如何使用相应的正则表达式来实现这一点: filter { mutate { rename => { "any_field_with_underscore" => "anyfieldwithunderscore" # i don't know how to write regex for this ... } } } 有人能帮忙吗?文档中没有指示rename{}使用regexp 我已经看

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

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

有人能帮忙吗?

文档中没有指示
rename{}
使用regexp

我已经看到使用
ruby{}
过滤器完成了这项工作

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


文档中没有指示
rename{}
使用regexp

我已经看到使用
ruby{}
过滤器完成了这项工作

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

以奥巴马的回答为基础

在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
        "
 }

}
还可以看到,这也会对客户的答案起到同样的作用

在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
        "
 }

}

还可以看到这也会起到同样的作用

好吧。。。好吧,只是有点贪婪,一个人如何用ruby{}实现它呢?它几乎可以工作。存储kvs并将其添加到迭代之外没有什么大不了的:发生了Ruby异常:无法在迭代期间将新键添加到哈希中{:level=>:error,:file=>“logstash/filters/Ruby.rb”,:line=>“41”,:method=>“filter”}这就是为什么它会在循环之前将键复制到一个新变量。也许你把它从代码中去掉了?与LS<5.x一样工作得很好,但是请注意,直接访问事件对象在较新版本中不起作用,因为它已被纯Java对象取代,需要通过getter和setter进行访问。好的。。。好吧,只是有点贪婪,一个人如何用ruby{}实现它呢?它几乎可以工作。存储kvs并将其添加到迭代之外没有什么大不了的:发生了Ruby异常:无法在迭代期间将新键添加到哈希中{:level=>:error,:file=>“logstash/filters/Ruby.rb”,:line=>“41”,:method=>“filter”}这就是为什么它会在循环之前将键复制到一个新变量。也许您从代码中去掉了它?与LS<5.x的情况一样完美,但请注意,直接访问事件对象在较新版本中不起作用,因为它已被纯Java对象取代,需要通过getter和setter进行访问。