Poundのログ設定でハマった

以前このブログで紹介したpound。前に書いた通り、設定の簡単さ、機能面は非常に優れているのだが、ここで2つほど問題が持ち上がってくる。それはログ出力先とアクセス解析である。

デフォルトインストールでは、poundのログは/var/log/messagesに出力される。ログ監視などを考えるといまいち。出力先のログを変更するには、poundのコンパイル時にconfigureオプションで指定する。例えばsyslogのファシリティをlocal5にしたい場合、configure時に以下のように指定(-with-sslSSLラッパを使用するため指定)。


$ ./configure --with-log=LOG_LOCAL5 --with-ssl=/usr/bin
pound.cfgでは「LogFacility local5」を指定。当然、syslog.confで使用したいファシリティ(この場合はlocal5)を適宜設定する。 ただし、poundのグローバル設定でDaemonパラメータを0にしていると、LogFacilityの設定が有効にならないので注意。他のやり方として、poundのログは標準出力に出しておいて、これをsyslog-ngを使用し切り出す方法もある。

観点は2つあり、poundサーバへのアクセスログの解析、Webサーバでのアクセスログ解析の2点。前述の方法で/var/log/messagesとpoundのログを折角分離したが、ログの出力フォーマットはsyslog特有のSyslog Header(アクセスログの先頭にlog日時とサーバー名が入る)がついてしまい、そのまま解析ツールに流し込めそうにない。ここで、コンパイルオプションで「--without-log」を指定し、poundのログを標準出力に出す形で実装してみる(Syslogの設定でSyslogHeaderを書き出さない方法が分からなかったorz)。


#/usr/local/sbin/pound >>/var/log/Pound/pound.log 2>>/var/log/Pound/pound.error.log &

これでなんとかpoundサーバへのアクセス解析については目的を達した。あとはこれを起動停止用スクリプトの組み込みつつ、出力されたアクセスログを元にAnalogなりWebalizerなりで解析できそう。

次にWebサーバでのログ解析を考える。

Webサーバでのアクセスログは、poundサーバがバックエンドのWebサーバにアクセスしたように記録され、これだとアクセス解析するときにこれでは問題あり。さてどうするか?mod_rpafというのを発見。これはなんだかよさそうだ。なんでも、このモジュールはリバースプロキシ経由のリクエストに付与されるリモートホストのアドレスを記録した X-Forwarded-For を Host に上書きしてくれるとのこと。ApacheのLogFormat設定でもX-Forwarded-Forヘッダを抜き出せるが、


LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
どっちが楽なのかしら。近日検証予定。
mod-rpafについての参考資料