Logstash 我可以使用gsub递归地用另一个字段替换所有字段名吗?
在将ElasticSearch中的映射更改为更明确地输入到系统中的数据后,我无意中将新变量设置为嵌套对象。仔细考虑后,我实际上喜欢这些字段是嵌套对象的想法,因为这样我可以明确地知道Logstash 我可以使用gsub递归地用另一个字段替换所有字段名吗?,logstash,Logstash,在将ElasticSearch中的映射更改为更明确地输入到系统中的数据后,我无意中将新变量设置为嵌套对象。仔细考虑后,我实际上喜欢这些字段是嵌套对象的想法,因为这样我可以明确地知道src_port统计数据是来自netflow还是来自ASA日志,例如 我想使用mutate(可能是gsub?)将给定类型的所有字段名重命名为newtype.fieldname。我看到有使用regexp的gsub,还有使用文本字段名的rename,但是当我将用“newtype”前缀替换该类型中的所有字段时,我想避免使用3
src_port
统计数据是来自netflow还是来自ASA日志,例如
我想使用mutate
(可能是gsub?)将给定类型的所有字段名重命名为newtype.fieldname
。我看到有使用regexp的gsub
,还有使用文本字段名的rename,但是当我将用“newtype”前缀替换该类型中的所有字段时,我想避免使用30个不同的gsub/rename语句
有办法做到这一点吗?这里有一个例子供您参考
input {
stdin{
type => 'netflow'
}
}
filter {
mutate {
add_field => {"%{type}.message" => "%{message}"}
remove_field => ["message"]
}
}
output {
stdout{
codec => rubydebug
}
}
在本例中,我已将消息
字段名称更改为类型.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
}
}
你好,本,谢谢你的回复!我的问题更多的是“我能用一个变种遍历所有字段名吗?例如,我想添加字段netflow.%{fieldname},而不是%{type}.message”。这可能吗?我已经更新了我的答案!如果您喜欢,请接受它作为答案。谢谢您,祝您愉快:)您提供的代码完全符合我的需要!谢谢。