当サイトは(意味もなく)Webサーバを2重化して、lvsで負荷分散している。よってapacheのログもバラバラになっている。これではアクセス解析をするときにうまくないので、2台分のログをマージしてから解析してやろう。
おおまかな流れを説明すると、まず各Webサーバでログローテーションをするときにアクセスログを別ファイルに書き出す。このサーバ達にはAWstatsをインストールする必要はない。次に監視サーバで、定期的にrsyncを使って各サーバのアクセスログを取ってくる。そしてAWstatsに付属しているログファイルマージツールですべてのサーバのログをマージする。最後にAWstatsでマージ済みのログファイルを解析する。この方法だと解析をするのが週に一回になってしまうが、即時性は求めていないので構わないだろう。
まずはWebサーバの設定。各サーバの/etc/logrotate.d/httpdを以下のように修正する。追加したのはprelotateからendscriptまでの3行。
[root@www1 ~]# cat /etc/logrotate.d/httpd
/var/log/httpd/*log {
prerotate
cp -f /var/log/httpd/access_log /tmp/access_log
endscript
missingok
notifempty
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
endscript
}
次に、解析サーバの設定。以下のようなスクリプトを作って実行権限を付与する。中身は一目瞭然だとおもう。
[root@manager1 ~]# cat /usr/local/bin/awstatsmerge #!/bin/sh rsync www1:/tmp/access_log /tmp/access_log1 rsync www2:/tmp/access_log /tmp/access_log2 logresolvemerge.pl /tmp/access_log1 /tmp/access_log2 > /tmp/access_log /usr/bin/perl /var/www/awstats/awstats.pl -update -config=www.grandarbre.net > /dev/null
次に解析サーバのcronで、上記のスクリプトを定期的に回すように設定する。下記のようにすると毎週日曜日の5:00に起動するはず。
[root@manager1 ~]# cat /etc/cron.d/awstats 0 5 * * 0 root /usr/local/bin/awstatsmerge
AWstatsの設定としては、参照するログファイルのパスを変えるだけ。
[root@manager1 ~]# cat /etc/awstats/awstats.www.grandarbre.net.conf ... LogFile="/tmp/access_log" ...