このサイトではアクセスランキングを表示させてますが、これはCoreserverのログファイルを利用して過去のアクセス数を見てます。
そしてこのCoreserver(XREA)のログファイルは5日分を残して、それ以前の生ログは消去されていってしまいます。
なので、例えば5日分より多く解析して過去1週間分とか1か月分の解析を行うにはファイルが無くて無理で、ランキングも作成する事が出来ません。
そこで、1日にひとつずつログファイルを手動で保存すると良いのは良いんですが、それを忘れちゃったりしても困るので何か良い方法はないかな?と探ってみました。
すると、便利なスクリプトを公開されてる情報がありましたので利用してみる事にしました。
ひとつのファイルとクローン利用
こちらはログファイルをそのまま別のディレクトリにコピー・保存する事で5日間分以上自動で貯めて行く方法。
以下の内容を「storelog.sh」として保存。改行コードはLFです。
ユーザ名の箇所にはIDが入ります。
log/stored/のディレクトリは作成しておきましょう。他のディレクトリ指定もOKです。
#!/bin/sh
# ログファイルのあるディレクトリ
log_dir=/virtual/ユーザ名/log/
# ログファイルを蓄積するディレクトリ
stored_dir=/virtual/ユーザ名/log/stored/
cd ${log_dir}
# 末尾に数字がつかないログファイルを取得(最新のログファイルのみを取得)
log_files=`find *.log -iregex ".*[^0-9]\.log$" -type f`
# ログファイルの日付を生成
log_date=`date -d '1 days ago' +%Y%m%d`
for file in $log_files; do
# ログファイル名を抽出
stored_file=`echo ${file} | sed -e 's/^\(.*\)\.log$/\1/'`
# ログファイルをコピー: ログファイル -> 蓄積ディレクトリ/ログファイル名.年月日.log
cp -p ${file} ${stored_dir}${stored_file}.${log_date}.log;
done
exit
サーバの virtual/ユーザー名/ (public_htmlの上の階層)にファイルを置きます。
そしてCRONの設定。
図の例では、毎日6時15分に log/storelog ディレクトリ内に、過去のログファイルが年月日付きで保管されます。
/dev/null 2>&1と書くと、メールは破棄されますが、/dev/nullと書くとエラーがあった場合にはメールを送ってくれるようになります。
■XREAでApacheのログを蓄積するシェルスクリプト - (DxD)∞
過去の生ログを保存と同時にスリム化
こちらは生ログを別ディレクトリに保存すると同時に、拡張子毎・ホスト名毎の除外を行う事も出来る方法。
ログファイルから、画像ファイルへのアクセスやCSSなど、記録不要なものを弾いて、スリム化を施したものを保存してくれます。
■PHPとCRONで、XREAの生ログをすっきり! - サンレ・ラボ
- 日毎と1週間分のログを自動保存
- 解析に除外内容を指定してスリム化
- 必要に応じてメール送信
- log.shにIDを設定
- logSlim.phpで除外拡張子を指定
- メール送信機能を使うかどうかの設定⇒利用するならメールアドレス設定
- 2つのファイルをpublic_htmlの上の階層にアップ
CRONジョブで「log.sh >/dev/null 2>&1」と指定。
毎朝5時・6時辺りに回るようにしておくと良いと思います。
正常に稼動していれば、/log/backup/ ディレクトリが生成されて、その中にスッキリスリム化されたアクセスログが保存されてます。
あとがき
5日間以上のログを利用する際には、上記2つのスクリプトが保存するディレクトリを指定すれば良いですね。
両方ともとても素晴らしいので、あとは目的に応じて利用を決めると良いです。