Logstash 我可以使用gsub递归地用另一个字段替换所有字段名吗?

Logstash 我可以使用gsub递归地用另一个字段替换所有字段名吗?,logstash,Logstash,在将ElasticSearch中的映射更改为更明确地输入到系统中的数据后,我无意中将新变量设置为嵌套对象。仔细考虑后,我实际上喜欢这些字段是嵌套对象的想法,因为这样我可以明确地知道src_port统计数据是来自netflow还是来自ASA日志,例如 我想使用mutate(可能是gsub?)将给定类型的所有字段名重命名为newtype.fieldname。我看到有使用regexp的gsub,还有使用文本字段名的rename,但是当我将用“newtype”前缀替换该类型中的所有字段时,我想避免使用3

在将ElasticSearch中的映射更改为更明确地输入到系统中的数据后,我无意中将新变量设置为嵌套对象。仔细考虑后,我实际上喜欢这些字段是嵌套对象的想法,因为这样我可以明确地知道
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”。这可能吗?我已经更新了我的答案!如果您喜欢,请接受它作为答案。谢谢您,祝您愉快:)您提供的代码完全符合我的需要!谢谢。