如何使用正则表达式

时间:2018-05-31 09:19:57

标签: regex logstash kibana

由于Kibana在字段键中需要前缀下划线 - link(此问题似乎未解决),我无法处理默认启动下划线附带的字段键值(例如,docker的日志记录) Kiabana。我目前正在使用logstash将日志推送到elasticsearch。我读了这个answer使用ruby过滤器去除所有下划线,但我想这种方法会让我的消费者变得非常慢。

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

例如 -

_HELO: World

现在应该改为:

HELLO: World

可能使用与ruby

不同的插件

3 个答案:

答案 0 :(得分:1)

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

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

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

另一个选项是remove_char_value,可用于从值

中删除字符

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

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

这些内容可与source一起用于{/ 1}}搜索

key=value

请同时查看trim_keytrim_value选项

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:-1)

您需要使用ruby过滤器来查找以_开头的密钥,并基本上重命名它们(将值复制到新密钥然后删除原始密钥):< / p>

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