2016-04-21 4 views
1

У меня есть матч ГРОК так:Logstash Grok плагин, добавлять поля при сопоставлении

grok{ match => [ “message”, “Duration: %{NUMBER:duration}”, “Speed: %{NUMBER:speed}” ] } 

Я также хочу добавить еще одно поле для захваченных переменных, если она соответствует шаблону ГРОК. Я знаю, что могу использовать плагин mutate, а if-else - добавлять новые поля, но у меня слишком много совпадений, и это будет слишком долго. Например, я хочу захватить правые поля для данных текстов.

"Duration: 12" => [duration: "12", type: "duration_type"] 
"Speed: 12" => [speed: "12", type: "speed_type"] 

Есть ли способ сделать это?

ответ

2

Я не уверен на 100%, если это то, что вам нужно, но я сделал что-то подобное. У меня есть основной синтаксический анализ для моего сообщения, а затем я отдельно анализирую поле с дополнительными совпадениями.

Как вы можете видеть, первое просто соответствует полному сообщению. У меня есть полевой поток, который в основном является информацией Logger. Однако в моей настройке HTTP-запросы добавляют некоторую информацию в имя потока. В этих случаях я также хочу ОПТИМАЛЬНО сопоставить их.

Приведенная выше настройка полей reqType, reqPath, reqParam создаются только в том случае, если поток может соответствовать им. В противном случае это не так.

Надеюсь, это то, что вы хотели.

Спасибо, Артур

+0

Не совсем то, что я просил, но помогает с моей текущей проблемой. благодаря – yolgun

0

Что-то вроде этого?

filter{ 
    grok { match => [ "message", "%{GREEDYDATA:types}: %{NUMBER:value}" ] } 
    mutate { 
    lowercase => [ "types" ] 
    add_field => { "%{types}" => "%{value}" 
        "type" => "%{types}_type" } 
    remove_field => [ "value", "types" ] 
    } 
}