2016-09-19 4 views
0

Как установить условие в logstash с фильтром grok, когда есть ответ на восходящий поток, а когда нет.Как установить условие в grok/logstash для ответа на восходящий поток, а не

Я хочу использовать это когда есть.

match => { "message" => "%{COMBINEDAPACHELOG} %{NUMBER:request_time:float} %{NUMBER:upstream_time:float}" } 

Если ответа нет.

match => { "message" => "%{COMBINEDAPACHELOG} %{NUMBER:request_time:float}"} 

ответ

0
match => { "message" => "%{COMBINEDAPACHELOG} %{NUMBER:request_time:float}(%{NUMBER:upstream_time:float})?" } 

Должно работать! ? по полю означает, что он является необязательным. Убедитесь в том, чтобы включить это пространство, прежде чем он не является обязательным, либо путем ()?%{NUMBER:upstream_time:float}? или путем группирования его upstream_time (%{NUMBER:upstream_time:float})?

0

Вы можете также использовать conditionals:

if [message] =~ /\d+\s+\d+$/ { 
    grok { 
    match => { "message" => "%{COMBINEDAPACHELOG} %{NUMBER:request_time:float} %{NUMBER:upstream_time:float}" } 
    } 
} else { 
    grok { 
    match => { "message" => "%{COMBINEDAPACHELOG} %{NUMBER:request_time:float}" } 
    } 
} 

Регулярное выражение \d+\s+\d+$ проверка в конце строки (с якорь $) наличие двух групп цифр (\d) любого размера (+), разделенных любым количеством пробелов (\s+).