Tim*_*rda 3 elasticsearch logstash
我的日志格式类似于:
name=johnny amount=30 uuid=2039248934
Run Code Online (Sandbox Code Playgroud)
问题是我在多个日志文件上使用此解析器,每个日志文件基本上包含许多kv对.
有没有办法识别值是整数并在不必对每个键值对使用mutate的情况下强制转换它们?(而不是字符串)
我发现了这个链接,但模板json文件的位置非常模糊,以及我如何使用它. 可以告诉kv自动检测数值并将它们作为数字JSON值发出吗?
您可以使用ruby插件来执行此操作.
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 }
}
Run Code Online (Sandbox Code Playgroud)
首先,通过SPACE将消息拆分为数组.然后,对于每个k,v映射,检查值是否为numberic,如果为YES,则将其转换为Integer.
以下是输入的示例输出:
{
"message" => "name=johnny amount=30 uuid=2039248934",
"@version" => "1",
"@timestamp" => "2015-06-25T08:24:39.755Z",
"host" => "BEN_LIM",
"name" => "johnny",
"amount" => 30,
"uuid" => 2039248934
}
Run Code Online (Sandbox Code Playgroud)
Logstash 5的更新解决方案:
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.set(name, value.to_i)
else
event.set(name, value)
end
end
"
}
}
output {
stdout { codec => rubydebug }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4271 次 |
| 最近记录: |