使用convert in mutate将所有以“id”结尾的字段转换为整数?

时间:2016-07-04 06:07:44

标签: logstash logstash-grok elastic-stack logstash-configuration

目前我在我的logstash配置文件中执行类似的操作:

filter {
    ...
    mutate {
        ...
        convert => {
            "blahId" => "integer"
            "blahblahId" => "integer"
            ...
            ...
            "b...blahId" => "integer"
        }
        ...
    }
    ...
}

所以基本上我想将所有以“Id”结尾的字段转换为整数。有没有办法在一行中做到这一点?像"*Id" => "integer"这样的东西呢?

修改:我试过了

convert => {
    "*Id" => "integer"
}

正如我所料,没有奏效。

也许使用ruby过滤器?

2 个答案:

答案 0 :(得分:3)

对此没有具体答案,但这是我最终要做的事情:

ruby {
        code => "
            fieldArray = event['kvmess'].split('|');
            for field in fieldArray
                name = field.split('=')[0];
                value = field.split('=')[1];
                if value =~ /\A\d+\Z/
                    event[name] = value.to_i
                else
                    event[name] = value
                end
            end
        "
    }

我的kvmess就像" blahId = 123 | blahblahId = 456 | some = thing | b..blahId = 789" 。 因此,这将所有具有数值的键转换为整数。

有一个插件 - kv专门用于此但它没有将数据类型更改为int的功能,所以我最终使用了这个ruby插件。

答案 1 :(得分:0)

我认为你可以使用ruby过滤器:

ruby {
        code => "
                for k,v in event
                    if k.match(/^.*Id$/i)
                        event[k]=v.to_i
                    end
                end
        "
}

注意:我没有测试过。