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"
}
}
}
]
}
}
注意:索引的映射不能改变。必须创建一个新索引。
我的日志格式类似于:
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"
}
}
}
]
}
}
注意:索引的映射不能改变。必须创建一个新索引。