代码之家  ›  专栏  ›  技术社区  ›  Akash

如何使用regex从logstash中的字段键中删除前缀下划线

  •  2
  • Akash  · 技术社区  · 8 年前

    因为Kibana要求字段键中有前缀下划线- link (这个问题似乎没有解决),我无法处理Kiabana中带有默认起始下划线的字段键值(例如docker的日志)。我目前正在使用logstash将日志推送到elasticsearch。我读了这个 answer 它使用ruby过滤器来记忆 都是下划线 ,但我想这种方法会让我的消费者非常慢。

    有没有办法使用logstash中regex的强大功能从所有字段名中删除前缀下划线?

    比如-

    _HELO: World
    

    现在应该改为:

    HELLO: World
    

    可能是使用了不同于 ruby

    3 回复  |  直到 8 年前
        1
  •  1
  •   Sufiyan Ghori    8 年前

    你可以使用 kv filter 使用正则表达式从键中删除前缀。它有助于自动解析属于 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 选项

        2
  •  0
  •   baudsp Alain Collins    8 年前

    如果只想删除名为 fieldname ,你可以使用:

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

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

        3
  •  -1
  •   Alcanzar    8 年前

    你需要求助于 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
         }
       "
      }
    }