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

标签 logstash

在更改 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/

相关文章:

python - Logstash 将字段名称全部小写

logging - 如何使用 Logstash 处理多个异构输入?

elasticsearch - 在基巴纳使用Logstash

tomcat - 如何使用 LogStash 在 tomcat 日志文件上创建索引

logstash - 在logstash中,我是否需要为逻辑上不同的应用程序日志单独输入文件?

elasticsearch - 如何删除因意外重命名和更改实际节点而创建的重影节点

date - Elasticsearch无法解析[时间戳记]

elasticsearch - Logstash与模式不匹配

elasticsearch - 所有索引模板映射的geo_point

elasticsearch - Logstash在 Elasticsearch 中插入记录时跳过记录