由于 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
}
"
}
}