0

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

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

前 2 的含义很明显,我可以猜到第三是结果的明确类型,但我找不到关于第三部分是什么的全面解释。

我检查了Logstash 文档Grok 的文档,看不到任何综合语法描述的痕迹。

有参考吗?

更新

这是一个有效且语法正确的示例:

对于配置文件:

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 是这样

4

2 回答 2

1

这是对的。默认情况下,所有数据都保存为字符串。可选地,有两种方法可以强制数据类型,使用 grok 和 mutate。本文对此进行了解释……查看http://www.elasticsearch.org/blog/little-logstash-lessons-part-using-grok-mutate-type-data/中的“在 logstash 中强制数据类型”

于 2014-11-13T18:02:49.520 回答
0

我不够专心,答案在http://logstash.net/docs/1.4.2/filters/grok页面上:

或者,您可以将数据类型转换添加到您的 grok 模式。默认情况下,所有语义都保存为字符串。如果您希望转换语义的数据类型,例如将字符串更改为整数,然后使用目标数据类型作为后缀。例如 %{NUMBER:num:int} 将“num”语义从字符串转换为整数。目前唯一支持的转换是 int 和 float。

于 2014-10-08T01:59:48.707 回答