logstash 名称字段动态

logstash name fields dynamically

我有一个动态字段,字段格式看起来像

A-B-C::D_[randomNum]

该字段是动态的,因为 randonNUM , 我想将“-”更改为“_”并删除 [randomNUM] 它看起来如下所示,

  A_B_C::D

有没有解决这个问题的插件/策略?

您应该可以使用 mutate/gsub 过滤器

实现此目的
filter {
  mutate {
    gsub => [
      # replace random num suffix
      "fieldname", "_\d+", "",
      # replace all dashes with underscores
      "fieldname", "-", "_"
    ]
  }
}

确保将 fieldname 替换为您的实际字段名称。

更新

根据您的评论,事实证明是动态的字段名称而不是值。因此,您不能使用上述解决方案,但下一个应该可以,即使用 ruby filter:

filter {
  ruby {
    code => "
      newhash = {}
      event.to_hash.each {|key, value| 
        if key =~ /^CISCO/ then
            newkey = key.gsub(/_\d+/, '').gsub('-', '_')
            newhash[newkey] = event[key]
            event.remove(key)
        end
      }
      newhash.each {|key,value|
        event[key] = value
      }
    "
  }
}

此过滤器运行后,您的事件将包含字段 A_B_C::D 而不是原来的 A-B-C::D_num