logstash kv 过滤器无法将字符串转换为整数

logstash kv filter cannot convert strings to integers

我的日志格式类似于:

stage_name=stage1
stage_duration=30
stage_result=failed

问题是我在多个日志文件上使用这个解析器,每个日志文件基本上都包含许多 kv 对。

有没有一种方法可以识别值何时为整数并将其转换为整数,而不必对每个键值对使用 mutate? (而不是字符串)

我发现使用 ruby 可能会解决我的问题,因为我需要了解如何将 ' ' = space 替换为 /n = 下一行

input {
    stdin {}
}

filter {
    ruby {
        code => "
            fieldArray = event['message'].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
        "
    }
}
output {
    stdout { codec => rubydebug }
}

如果在创建字段时未给出映射,则使用ECS(Elastic Common Schema)自动确定字段类型。 Logstash kv 过滤器也是如此 Ref.

您可以使用动态模板来确定字段的类型。

例如:如果字段名称是stage_duration*_duration,让他们成为整数。

设置动态模板:Ref.

PUT hagay_bar/
{
   "mapping": {
     "dynamic_templates": [
       {
         "strings_as_integer": {
           "match_mapping_type": "string",
           "match": "*_duration",
           "mapping": {
           "type": "integer"
           }
         }
       }
     ]
   }
}

注意:索引的映射不能改变。必须创建一个新索引。