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

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

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

リファラがある行はOK:

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