grok匹配模式的最后一部分是什么?

时间:2014-10-07 20:23:15

标签: parsing logstash grok logstash-grok

我注意到有些人在grok匹配谓词中使用第3部分,比如

%{NUMBER:response_status:int}
                          ^--- ??

前两个意思是明显的,我可以猜测第三个是结果的显式类型,但我找不到第三部分的全面解释。

我同时检查了Logstash documentationGrok'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

是这样

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。