FTPアクセス解析(webalizer)

1.はじめに

FTPのダウンロード、アップロード統計をグラフにする為、本来はWWW用ですがPROFTPのログにも対応しているwebalizerを使用して見ます。

2.インストール

最新では日本語対応もされてja-webalizerというのができました。
# cd /usr/ports/japanese/webalizer
# make install clean
これでインストール完了です。
また日本語版の場合、なぜかrequireになっていないのに、nkfが無いと実行時エラーするので入れておきます。
# cd /usr/ports/japanese/nkf
# make install clean

3.設定

/usr/local/etc/ja-webalizer.conf
LogFile /var/log/xferlog

# apacheの場合は「clf」にする、proftpdの場合は「ftp」
#LogType clf
LogType ftp

# 出力先ディレクトリー
OutputDir /usr/home/hogehoge/.public_html/webalizer
HistoryName webalizer.hist

# ログローテートして古いのがファイルに無く、webalizerに保存して加算していく場合は「yes」
#Incremental yes
Incremental no
#IncrementalName /var/log/webalizer.current

# タイトル
ReportTitle Usage Statistics for hogehoge

# hostnameを書いておく
HostName hogehoge.dyndns.org

PageType htm*
PageType cgi
PageType rbx
PageType php
#PageType phtml
#PageType php3
#PageType pl

# httpsも集計する場合はyes
#UseHTTPS no

# 集計は行うが、集計一覧に表示させない設定
HideURL *.gif
HideURL *.GIF
HideURL *.jpg
HideURL *.JPG
HideURL *.png
HideURL *.PNG
HideURL *.ra

# 集計に入れないユーザー
IgnoreUser hogehohe

# 集計に入れないディレクトリー
IgnoreURL /usr/home/hogehoge/.public_html/bbs*

# 集計に入れないアドレス
IgnoreSite localhost
IgnoreSite 127.0.0.1
IgnoreSite 192.168.*.*

# サーチエンジン?なんで入っているかわかりません
SearchEngine yahoo.com p=
SearchEngine altavista.com q=
SearchEngine google.com q=
SearchEngine eureka.com q=
SearchEngine lycos.com query=
SearchEngine hotbot.com MT=
SearchEngine msn.com MT=
SearchEngine infoseek.com qt=
SearchEngine webcrawler searchText=
SearchEngine excite search=
SearchEngine netscape.com search=
SearchEngine mamma.com query=
SearchEngine alltheweb.com query=
SearchEngine northernlight.com qr=

4.実行

あとはcronで実行すれば終了です。
cronに以下のコマンドを実行するようにしてあげればOKです。
/usr/local/bin/ja-webalizer

5.ローテート

xferlogが大きくなって来るとwebalizerの実行時間が長くなります。
webalizer.confの設定にIncrementalというのがあります。
これは前回までの解析した情報を独自のファイル(デフォルトではwebalizer.current)に
保持しておくというものです。

これを保持しておけばオリジナルのログをとりあえず消してしまっても大丈夫です。

ただし、webalizer独自の形式として記録されるだけなので、不安が残ります。
・webalizerが壊れたファイルをぶっこわしてしまった場合。
・webalizerよりもいい解析ツールを発見して、ログを再度読みこませたい場合。

これらが考えられるので、オリジナルの生ログは残しておいた方がよいでしょう。

ちょうどいいツールが見つからなかったので、自分で作ることにします。
まあ、UNIXの場合道具は用意されているので、自分で組み合わせるだけです。

方針としては、ある一定期間で(webalizerと同タイミング)で呼び出され、
xferlog を xferlog.YYYYMMDDにリネームすることにします。
一日最高一回目の実行でその処理をして、2度目以降実行してしまった場合(すでにファイルが存在する場合)は
何もせずに終了することにします。

/bin/shで作成します。これはシェルスクリプトと呼ばれ、UNIX管理者必須技術なので、
知らない人は勉強しましょう。

/usr/local/site-script/logbackup.sh
#! /bin/sh

LOG="$1"
PIDFILE="$2"
SUBDIR="$3"

DATE=`/bin/date '+%Y%m%d'`

if [ ! -n $LOG ]; then
        echo "Usage: "$0" logfile"
        exit
fi

LOGDIR="`/usr/bin/dirname $LOG`"
LOGFILE="`/usr/bin/basename $LOG`"

cd $LOGDIR

if [ ! -f $LOGFILE ]; then
        echo "File not Found:"${LOGFILE}
        exit
fi

if [ -f ./${SUBDIR}/${LOGFILE}.$DATE ]; then
        exit
fi

mv $LOGFILE ./${SUBDIR}/${LOGFILE}.$DATE

if [ ! -n "$PIDFILE" ]; then
        exit
fi

if [ -f "$PIDFILE" ]; then
        kill -HUP `/bin/cat $PIDFILE`
fi

これをwebalizerを走らせるスクリプトで設定すれば自分でログローテートみたいな事が出来ます。
/usr/local/etc/webalizer.sh
#!/bin/sh
su user -c '/usr/local/bin/webalizer' > /dev/null
/usr/local/site-script/logbackup.sh /var/log/xferlog

あとはこのファイルを定期的にcronで実行すればローテートできます。