Apache のアクセスログから HEAD リクエストを除外する
Posted on
Kindle Alert の Web サーバを外部から監視するために Uptimer を使っています。ダウン時のアラートはもちろんのこと、レスポンスタイムをリアルタイムで表示してくれるのでおすすめです。
Uptimer から 60 秒おきに HEAD リクエストを受けて死活監視を行っているわけですが、アクセスログが無駄に肥大化してしまうので HEAD リクエストを除外するようにしました。
環境は Fedora 17 と Apache 2.2.23 です。 conf ファイルからアクセスログに関するところだけ抜き出すとこんな感じ。
SetEnvIf Request_Method "GET|POST|PUT|DELETE" log
CustomLog logs/www.kindle-alert.com_access_log common env=log
SetEnvIf でメソッド名が GET, POST, PUT, DELETE のときだけ環境変数をセットしています。
CustomLog の 3 つ目の引数で、先ほど定義した環境変数をチェックしています。 env=log とすれば、環境変数が定義されている場合だけアクセスログに記録されます。
Kindle Alert はバーチャルホストで運用しているので、VirtualHost ディレクティブの下に書いています。 Apache を reload すれば反映されます。
<VirtualHost *:80>
DocumentRoot /var/www/vhosts/www.kindle-alert.com/htdocs
ServerName www.kindle-alert.com:80
ErrorLog logs/www.kindle-alert.com_error_log
SetEnvIf Request_Method "GET|POST|PUT|DELETE" log
CustomLog logs/www.kindle-alert.com_access_log common env=log
...
</VirtualHost>
wget コマンドから HEAD リクエストを送って、ちゃんと設定されたか確認してみます。 spider オプションをつけると HEAD リクエストを送れます。
$ wget --spider http://www.kindle-alert.com/
設定前は以下のようなログが記録されていましたが、設定後は記録されなくなりました。
219.94.252.67 - - [06/Apr/2013:19:21:06 +0900] "HEAD / HTTP/1.1" 200 -
ロードバランサーなどから死活監視を行っているのであれば、IP アドレスで除外した方がスマートかもしれません。