我注意到有些人在grok匹配谓词中使用第3部分,比如
%{NUMBER:response_status:int}
^--- ??
前两个意思是明显的,我可以猜测第三个是结果的显式类型,但我找不到第三部分的全面解释。
我同时检查了Logstash documentation和Grok's one,但看不到任何综合语法描述的痕迹。
有任何参考资料吗?
UPD :
这是一个有效的例子,语法正确:
对于配置文件:
input { stdin { } }
filter {
grok {
match => [
"message", "%{NUMBER:a_number:float}"
]
}
}
output { stdout { codec => rubydebug } }
12345
的输出是:
{
"message" => "12345",
"@version" => "1",
"@timestamp" => "2014-10-08T01:08:49.087Z",
"host" => "logstash",
"a_number" => 12345.0
}
如果您删除:float
,则会更改为
{
"message" => "12345",
"@version" => "1",
"@timestamp" => "2014-10-08T01:09:46.055Z",
"host" => "logstash",
"a_number" => "12345"
}
至少对于logstash v1.4.2
是这样答案 0 :(得分:1)
这是对的。默认情况下,所有数据都保存为字符串。可选地,有两种方法来强制使用grok和mutate来强制数据类型。本文解释了这一点......在http://www.elasticsearch.org/blog/little-logstash-lessons-part-using-grok-mutate-type-data/
中查看“在logstash中强制数据类型”答案 1 :(得分:0)
我不够专心,答案在http://logstash.net/docs/1.4.2/filters/grok页面上:
您可以选择将数据类型转换添加到grok模式。默认情况下,所有语义都保存为字符串。如果您希望转换语义的数据类型,例如将字符串更改为整数,则将其与目标数据类型后缀。例如%{NUMBER:num:int}将'num'语义从字符串转换为整数。目前唯一支持的转换是int和float。