【问题标题】:What is the last part in the grok match pattern?grok 匹配模式的最后一部分是什么?
【发布时间】:2014-10-07 20:23:14
【问题描述】:

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

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

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

我在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

【问题讨论】:

  • 你能提供你在哪里看到人们在 grok 中使用 3 部分吗?到目前为止,我从未见过有人在 logstash grok 中使用 3 部分。
  • @BenLim 例如这里gist.githubusercontent.com/poolski/9911628/raw/postfix.grok (只是一个随机结果,不是我使用的那个)。而且它确实会影响结果:匹配结果的类型默认为字符串,并使用给定修饰符更改为整数。
  • grok中的3部分在logstash中无效。您可以参考这里:github.com/elasticsearch/logstash/blob/v1.4.2/patterns/…。所以,我认为logstash不能使用3部分grok。
  • @BenLim:“grok 中的 3 个部分在 logstas 中无效”——这不是真的。查看问题的更新
  • 很抱歉。感谢您的提及。

标签: parsing logstash grok logstash-grok


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多