2013-11-07 4 views
9

У меня есть журналы, которые входят в этот формат. Я присвоил переменную logstash шаблону ниже. Я считаю, что у меня есть каждый из этих элементов, назначенных должным образом с предопределенными тегами Grok, которые поставляются вместе с ним. Однако, когда я запускаю logstash, он отражает: [0] "_grokparsefailure", указывающий, что он не может выполнить синтаксический анализ запроса. Я в недоумении, что именно не так с моим conf. Кто-нибудь здесь знает, что может вызвать это? Я довольно новичок в logstash. Заранее спасибоОтчеты Logstash [0] _grokparsefailure при разборе журналов

1383834858 0 71.172.136.12 20097903 198.2.20.171 80 TCP_HIT/200 252 ГОЛОВКА http://podcasts.someserver.com/80830A/podcasts.someserver.com/nyv/voice-film-club/2013/11/the-sexy-god-thor.mp3 - 0 355 "-" "Подкасты/2.0" 33546 "-"

или

%{BASE10NUM:timestamp} = 1383834858 
%{BASE10NUM:time_taken} = 0 
%{IP:clientip} = 71.172.136.12 
%{BASE10NUM:filesize} = 20097903 
%{IP:serverip} = 198.2.20.171 
%{BASE10NUM:port} = 80 
%{WORD:status_code} = TCP_HIT/200 
%{BASE10NUM:sc_bytes} = 252 
%{WORD:method} = HEAD 
%{URI:cs_uri} = http://podcasts.someserver.com/80830A/podcasts.someserver.com/nyv/voice- film-club/2013/11/the-sexy-god-thor.mp3 
%{NOTSPACE:ignore2} = - 
%{BASE10NUM:rs_duration} = 0 
%{BASE10NUM:rs_bytes} = 355 
%{QS:c_referrer} = "-" 
%{QS:user_agent} = "Podcasts/2.0" 
%{BASE10NUM:customerid} = 33546 
%{QS:ignore} = "-" 

Мой файл logstash.conf выглядит следующим образом:

input { 
    #wpa_media logs from the CDN(see puppet module) 
    redis { 
     type => "wpc_media" 
     host => "devredis1.somedomain.com" 
     # these settings should match the output of the agent 
     data_type => "list" 
     key => "wpc_media" 
     codec => json 
     debug => true 
    } 
} 


filter { 
    grok { 
     type => "wpc_media" 
     pattern => [ "%{BASE10NUM:timestamp} %{BASE10NUM:time_taken} %{IP:clientip} %{BASE10NUM:filesize} %{IP:serverip} %{BASE10NUM:port} %{WORD:status_code} %{BASE10NUM:sc_bytes} %{WORD:method} %{URI:cs_uri} %{NOTSPACE:ignore2} %{BASE10NUM:rs_duration} %{BASE10NUM:rs_bytes} %{QS:c_referrer} %{QS:user_agent} %{BASE10NUM:customerid} %{QS:ignore} " ] 
    } 

    mutate { 
     #just something to cover up the error not really fixing it 
     #remove_tag => [ "_grokparsefailure" ] 
     remove => [ "customer_id", "ignore", "c_referrer", "time_taken" ] 
    } 
} 
output { 
    stdout { debug => true debug_format => "ruby"} 
} 

ответ

27

для вашей собственной справки, GrokDebugger сайта очень удобна для таких проблем, как это.

Для данного события в журнале, которое вы предоставили, %{WORD} не соответствует TCP_HIT/200.

Быстрое решение должно совпадать с %{DATA:status_code} (вы можете увидеть built-in patterns on GitHub). Вы могли бы создать более целенаправленный матч, но это трудно сделать, не видя возможных входов.

Если вы всегда ожидали word/number, то что-то вроде (?<status_code>%{WORD}/%{INT}) могло бы работать.

+2

Это что-то! Я закончил разбивку TCP_HIT и 200 на две отдельные переменные, такие как% {WORD: result_code} /% {INT: status_code}, так как после немного большего исследования они как бы представляют собой два отдельных результата. Благодарим вас за помощь –