在更改 ElasticSearch 中的映射以更明确地输入我输入到系统中的数据后,我无意中将新变量设置为嵌套对象。经过更多思考,我实际上喜欢将这些字段作为嵌套对象的想法,因为这样我就可以明确地知道 src_port
统计信息是来自 netflow 还是来自 ASA 日志(例如)。
我想使用mutate
(也许是gsub?)将给定类型的所有字段名重命名为newtype.fieldname
。我看到有 gsub
使用正则表达式,并且 rename 采用文字字段名称,但当我要替换中的所有字段时,我想防止出现 30 个不同的 gsub/rename 语句该类型带有“newtype”前缀。
有办法做到这一点吗?
最佳答案
这是一个示例供您引用。
input {
stdin{
type => 'netflow'
}
}
filter {
mutate {
add_field => {"%{type}.message" => "%{message}"}
remove_field => ["message"]
}
}
output {
stdout{
codec => rubydebug
}
}
在此示例中,我将 message
字段名称更改为 type.message
,然后删除原始 message
字段。我认为你可以使用这个示例来做你想做的事情。
希望这可以帮助你。
我更新了我的答案!
使用 ruby 插件做你想做的事!
请注意,elasticsearch 使用 @timestamp
字段来做索引,所以我建议不要更改字段名称。
input {
stdin{
type => 'netflow'
}
}
filter {
ruby {
code => "
data = event.clone.to_hash;
type = event['type']
data.each do |k,v|
if k != '@timestamp'
newFieldName = type +'.'+ k
event[newFieldName] = v
event.remove(k)
end
end
"
}
}
output {
stdout{
codec => rubydebug
}
}
关于logstash - 我可以使用 gsub 将所有字段名递归地替换为另一个字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26878135/