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
我有一个动态字段,字段格式看起来像
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