在ElasticSearch中更改我的映射以更明确地输入我输入系统的数据之后,我无意中将我的新变量设置为嵌套对象。在考虑更多之后,我实际上喜欢这些字段是嵌套对象的想法,因为这样我可以明确地知道src_port
统计信息是来自netflow还是来自ASA日志,作为示例。
我想使用mutate
(也许是gsub?)来将给定类型的所有字段名重命名为newtype.fieldname
。我看到有gsub
使用正则表达式,并且重命名采用文字字段名称,但是当我将替换该类型中的所有字段时,我想防止有30个不同的gsub / rename语句" newtype"前缀。
有办法做到这一点吗?
答案 0 :(得分:3)
以下是供您参考的示例。
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
}
}