そこから入ってくるログはこの形式です。以下のパターンに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.mp -0 355 "-" "Podcasts/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"}
}
ご参考までに、 GrokDebugger サイトは、このような問題に本当に便利です。
指定した特定のログイベントについて、%{Word}
はTCP_HIT/200
と一致しません。
簡単な修正の1つは、代わりに%{DATA:status_code}
と照合することです( GitHubの組み込みパターン を確認できます)。あなたは確かによりターゲットを絞ったマッチを構築することができますが、可能な入力を見ないでそうすることは難しいです。
常にWord/number
を期待している場合は、(?<status_code>%{Word}/%{INT})
のようなものが機能する可能性があります。