Какая последняя часть в шаблоне соответствия grok?

Я заметил, что некоторые люди используют третью часть в предикате соответствия grok, например

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

Очевидно, что означают первые 2, и я могу предположить, что 3-я часть является явным типом результата, но я не могу найти исчерпывающего объяснения того, что это за 3-я часть.

Я проверил как документацию Logstash, так и 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.


person zerkms    schedule 07.10.2014    source источник
comment
Можете ли вы представить, где вы видите, что люди используют 3 части в гроке? До сих пор я ни разу не видел, чтобы кто-нибудь использовал 3 части в logstash grok.   -  person Ben Lim    schedule 08.10.2014
comment
@BenLim, например, здесь gist.githubusercontent.com/poolski/9911628/raw/postfix .grok (случайный результат, не тот, который я использую). И это действительно влияет на результат: тип совпадающего результата по умолчанию является строкой и изменяется на целое число с заданным модификатором.   -  person zerkms    schedule 08.10.2014
comment
3 части в Grok недействительны в logstash. Вы можете обратиться сюда: github.com/elasticsearch/logstash/ blob / v1.4.2 / patterns /. Итак, я думаю, что logstash не может использовать Grok из трех частей.   -  person Ben Lim    schedule 08.10.2014
comment
@BenLim: 3 части в grok недействительны в logstas --- это неправда. См. Обновление вопроса   -  person zerkms    schedule 08.10.2014
comment
Прости за это. Спасибо за ваше упоминание.   -  person Ben Lim    schedule 08.10.2014


Ответы (2)


Это правильно. По умолчанию все данные сохраняются в виде строки. Необязательно, есть два способа принуждения типа данных: grok и mutate. Эта статья объясняет это ... ознакомьтесь с "приведением типа данных в logstash" в http://www.elasticsearch.org/blog/little-logstash-lessons-part-using-grok-mutate-type-data/

person evivasp    schedule 13.11.2014

Я был недостаточно внимателен, и ответ находится на http://logstash.net/docs/1.4.2/filters/grok страница:

При желании вы можете добавить преобразование типа данных в свой шаблон Grok. По умолчанию вся семантика сохраняется в виде строк. Если вы хотите преобразовать тип данных семантики, например, измените строку на целое число, затем добавьте к ней суффикс целевого типа данных. Например,% {NUMBER: num: int}, который преобразует семантику «num» из строки в целое число. В настоящее время поддерживаются только преобразования типа int и float.

person zerkms    schedule 08.10.2014