Edited at

LogstashのApache用grokフィルタ %{COMBINEDAPACHELOG}

Logstash から Elasticsearch にログを送って Kibana で表示したけどアクセス数が変?


よく見る Apache アクセスログ用 grokフィルタ:

filter {

grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }

https://github.com/hpcugent/logstash-patterns/blob/master/files/grok-patterns 

によると、

%{COMBINEDAPACHELOG} の内容は、読んだまんま combined ログフォーマットで、 

%{COMMONAPACHELOG} %{QS:referrer} %{QS:agent}

と同等。ログの最後にリファラとAgentがついてない行は無視されてしまうぽい。

%{COMMONAPACHELOG} の方の内容はこれ:

%{IPORHOST:clientip} %{HTTPDUSER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes}|-)

ログの例:

123.45.78.9 - - [14/Nov/2018:00:00:04 +0900] "GET / HTTP/1.1" 200 18696

%{} の順番とログを見比べてみよう

オリジナルのログ出力にしてあるならその通りに組み立てればOK


Grok debugger

https://grokdebug.herokuapp.com/

上の箱にログを貼り付けて下に grok パターンを書くと、何が返るかを表示してくれる。

%{COMMONAPACHELOG} の例:

スクリーンショット 2018-11-28 18.38.21.png

リファラとagentがないと、%{COMBINEDAPACHELOG} ではエラー:

スクリーンショット 2018-11-28 18.38.45.png

リファラがある行はOK:

スクリーンショット 2018-11-28 18.40.52.png

複数条件はうまく読んでくれない...?

スクリーンショット 2018-11-28 18.44.41.png