如何使用正则表达式从 logstash 中的字段键中删除前缀下划线



由于 Kibana 需要在字段键链接中使用前缀下划线(此问题似乎尚未解决(,因此我无法处理 Kiabana 中默认起始下划线附带的字段键值(例如 docker 的日志(。我目前正在使用 logstash 将日志推送到 elasticsearch。我读了这个使用红宝石过滤器删除所有下划线的答案,但我想这种方法会让我的消费者非常慢。

有没有办法使用 logstash 中的正则表达式的强大功能从所有字段名称中删除前缀下划线?

例如-

_HELO: World

现在应该更改为:

HELLO: World

可能是通过使用与ruby不同的插件

您可以使用 kv 过滤器从正则表达式的键中删除前缀。它有助于自动解析foo=bar种类的消息(或特定事件字段(,并具有用于从键中删除字符串的配置选项remove_char_key

例如,这将从键中删除<>[, ],字符

filter {
kv {
remove_char_key => "<>[],"
}
}

另一个选项是remove_char_value可用于从值中删除字符

例如,这将从值中删除<>[, ],字符

filter {
kv {
remove_char_value => "<>[],"
}
}

这些可以与source一起使用,以执行key=value搜索

filter { 
kv { 
source => "message" 
remove_char_value => "<>[],"
remove_char_key => "<>[],"
} 
}

另请查看trim_key和trim_value选项

如果您只想删除下划线,即名为fieldname的字段的第一个字符,您可以使用:

mutate {
gsub => [
"fieldname", "^_", ""
]
}

见 https://www.elastic.co/guide/en/logstash/current/plugins-filters-mutate.html#plugins-filters-mutate-gsub

您需要求助于ruby过滤器,该过滤器查找以_开头的键,并基本上重命名它们(将值复制到新键,然后删除原始键(:

filter {
ruby {
code => "
event.to_hash.keys.each { |k|
if k.start_with?('_')
event.set(k[1,-1],event.get(k))
event.remove(k)
end
}
"
}
}

最新更新