Logstash сообщает о [0] _grokparsefailure при анализе журналов

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

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

or

%{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"}
}

person Cole Shores    schedule 07.11.2013    source источник


Ответы (1)


Для вашей справки: сайт GrokDebugger действительно удобен для решения подобных проблем.

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

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

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

person rutter    schedule 07.11.2013
comment
Вот что это получилось! В итоге я разбил TCP_HIT и 200 на две отдельные переменные, такие как% {WORD: result_code} /% {INT: status_code}, поскольку после небольшого дополнительного исследования они в любом случае представляют собой два отдельных результата. Спасибо за вашу помощь - person Cole Shores; 08.11.2013