web-dev-qa-db-ja.com

LogstashGrokフィルターApacheアクセスログ

私はあちこちを探していましたが、動作する解決策を見つけることができませんでした。 Logstash構成ファイル内でGrokFilterを使用して、Apache-Accessログファイルをフィルタリングしようとしています。ログメッセージは次のようになります:{"message":"00.00.0.000 - - [dd/mm/YYYY:hh:mm:ii +0000] \"GET /index.html HTTP/1.1\" 200 00"}.

現時点では、grok { match => [ "message", "%{IP:client_ip}" ] }を使用してのみクライアントIPをフィルタリングできました。

フィルタリングしたい:

- The GET method, 
- requested page (index.html), 
- HTTP/1.1\, 
- server response 200
- the last number 00 after 200 inside the message body

これらのどれも私にとっては機能しないことに注意してください:

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

または

grok { match => [ "message", "%{COMBINEDAPACHELOG}" ] }
6
O Connor
grok {
  match => [ "message", "%{IP:client_ip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:Apache_timestamp}\] \"%{Word:method} /%{NOTSPACE:request_page} HTTP/%{NUMBER:http_version}\" %{NUMBER:server_response} " ]
}
18
O Connor

Grokデバッガーを使用して、ログ形式を完全に一致させます。その唯一の方法。

http://grokdebug.herokuapp.com/

18
Garreth McDaid

これにはCOMBINEDAPACHELOGパターンを使用できます。

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

たとえば、このサンプルのApacheログについて考えてみます。

111.222.333.123ホーム-[01/Feb/1998:01:08:46 -0800] "GET /bannerad/ad.htm HTTP/1.0" 200 28083 " http://www.referrer.com/bannerad /ba_intro.htm ""Mozilla/4.01(Macintosh; I; PPC) "

上記のフィルターは、

{
  "clientip": [
    [
      "111.222.333.123"
    ]
  ],
  "HOSTNAME": [
    [
      "111.222.333.123"
    ]
  ],
  "IP": [
    [
      null
    ]
  ],
  "IPV6": [
    [
      null
    ]
  ],
  "IPV4": [
    [
      null
    ]
  ],
  "ident": [
    [
      "HOME"
    ]
  ],
  "USERNAME": [
    [
      "HOME",
      "-"
    ]
  ],
  "auth": [
    [
      "-"
    ]
  ],
  "timestamp": [
    [
      "01/Feb/1998:01:08:46 -0800"
    ]
  ],
  "MONTHDAY": [
    [
      "01"
    ]
  ],
  "MONTH": [
    [
      "Feb"
    ]
  ],
  "YEAR": [
    [
      "1998"
    ]
  ],
  "TIME": [
    [
      "01:08:46"
    ]
  ],
  "HOUR": [
    [
      "01"
    ]
  ],
  "MINUTE": [
    [
      "08"
    ]
  ],
  "SECOND": [
    [
      "46"
    ]
  ],
  "INT": [
    [
      "-0800"
    ]
  ],
  "verb": [
    [
      "GET"
    ]
  ],
  "request": [
    [
      "/bannerad/ad.htm"
    ]
  ],
  "httpversion": [
    [
      "1.0"
    ]
  ],
  "BASE10NUM": [
    [
      "1.0",
      "200",
      "28083"
    ]
  ],
  "rawrequest": [
    [
      null
    ]
  ],
  "response": [
    [
      "200"
    ]
  ],
  "bytes": [
    [
      "28083"
    ]
  ],
  "referrer": [
    [
      ""http://www.referrer.com/bannerad/ba_intro.htm""
    ]
  ],
  "QUOTEDSTRING": [
    [
      ""http://www.referrer.com/bannerad/ba_intro.htm"",
      ""Mozilla/4.01 (Macintosh; I; PPC)""
    ]
  ],
  "agent": [
    [
      ""Mozilla/4.01 (Macintosh; I; PPC)""
    ]
  ]
}

ここでテストできます、

https://grokdebug.herokuapp.com/

0
Sufiyan Ghori

以下を使用してください。

filter {
    grok {
            match => { "message" => "%{COMMONAPACHELOG}" }
    }
}

パターンからわかるように、COMBINEDAPACHELOGは、いくつかの不足しているコンポーネントがあるために失敗します。

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

https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns

0
Costin Aldea