FreeBSD初歩

Webalizer + apacheログ ローテーション

  • 肥大化していくapacheログを日毎に分割
  • Web統計として有名なWebalizer(日本語表示)の導入
2003/06/16
使用した環境
FreeBSD 4.8-RELEASE
webalizer 2.01-10
apache 2.0.44

1.apacheログ出力先の変更

httpd.confの書き換え

# cd /usr/local/apache2/conf
# vi httpd.conf
※apacheインストール方法やパージョンによって場所は異なります。

CustomLog /var/logs/access_log common
           ↓
CustomLog /var/logs/access_log combined
ログ出力先を指定すると共に形式を変更します
ErrorLog /var/logs/error_log ErrorLog出力先
  • この時にPidFileで始まる(PidFile logs/httpd.pid等)という記述の行をメモしておきます。
    (自動スクリプト記述の際に使用します)

apacheを再起動します。
# /usr/local/apache2/bin/apachectl restart

 

2.Webalizerのインストール

portを使ってみました
# cd /usr/ports/japanese/webalizer
# make install
GDやら何やらと悩む必要も無く簡単です。

 

3.Webalizerの設定

webalizer.confの書き換え
全てを表示すると見る気が無くなるので、修正・追加した部分だけです。

# cd /usr/local/etc
# cp ja-webalizer.conf-dist webalizer.conf
# vi webalizer.conf

LogFile /var/logs/access_log apacheの吐き出すログファイル名
OutputDir /home/user/public_html/webalizer Web閲覧可能なURLディレクトリ
HostName ns.mydomain.com ホストネーム
HTMLHead <META http-equiv="Content-Type" content="text/html; charset="EUC-JP"> これを入れないと良く化けます
TopSites 30
TopKSites 10
TopURLs 30
TopKURLs 10
TopReferrers 200
TopAgents 50
TopCountries 30
TopEntry 10
TopExit 10
TopSearch 20
TopUsers 20

基本的にはコメントアウトを外すだけです。

私は個人的にReferrerを多く見たいので
上位200サイトが表示されるようにしています。

HideSite localhost
HideSite *.mydomain.com
HideSite 192.168.*.*
自サイトからのアクセスをカウントしない為の記述

上述のOutputDirを作成
# mkdir /home/user/public_html/webalizer

これで一応動作するはずです。
# /usr/local/bin/ja-webalizer
LogFileで指定したログを解析してOutputDirにHTMLやGIFを書き出します。
http://mydomain.com/~user/webalizer/
で確認できます。

 

4.スクリプトの記述

前もって分割したログを保存しておくディレクトリを作成しておきます。
# mkdir /home/user/logs

  • apacheから出力されるログを1日毎に分割
  • それと同時にWebalizerで集計させる

というスクリプトを/var/logs/access_log.shとして作成します。

# cd /var/logs
# vi access_log.sh

-------------------------------------------------------
#! /bin/sh
cd /var/logs
mv access_log /home/user/logs/access_log.`date '+%y%m%d-%H%M'`
mv error_log /home/user/logs/error_log.`date '+%y%m%d-%H%M'`

/usr/local/bin/ja-webalizer -c /usr/local/etc/webalizer.conf -p /home/user/logs/access_log.`date '+%y%m%d-%H%M'` >/dev/null 2>&1

kill -USR1 `cat /usr/local/apache2/logs/httpd.pid`
-------------------------------------------------------
/usr/local/apache2/logs/httpd.pidは1でメモをしたhttpd.pidファイルを絶対パスで記述します。

  • -cオプションは無いと正常に設定ファイルを読み込まなかったので付けました。
  • %y%m等は文字化けでは有りません(^^;

パーミッションを変更します。
# chmod 0755 access_log.sh

 

5.crontabへ追加

4で作成したスクリプトを毎日決まった時間に動作させます。

# crontab -e

0 0 * * * sh /var/logs/access_log.sh

以上で、毎日0時になるとcronが動き、apacheログの分割・Webalizerの集計が行われます。

 

Copyright © 2003 sio All Rights Reserved.