cronolog

cronologはログのローテーションプログラムです。
Apacheなどのログは、設定しなければローテーションせずに、ひたすら情報を貯めこんでいきます。付属のローテーションソフトは有るものの、情報の取りこぼしなども発生するとかで、Apacheの本家サイトでさえ、ログローテーションにはcronologを薦めています。

http://httpd.apache.org/docs/2.2/ja/logs.html#piped

cronolog自体は別にApache専用のソフトなどではなく、他のソフトでも使えるらしいですが、私の環境ではログのローテーションで困ってるソフトは特に無いので、Apacheに設定することを前提で紹介することにします。

☆ 長所と短所

長所としては、
データ取りこぼしがない(らしい)
年・月・日を基準にした、ディレクトリ構造を比較的自由に設定できる。
使い続けてきたログも(別コマンドだが)分割できる(らしい)

短所としては
無制限・1年・1月・1日単位でしか分割設定できない。
(1時間や1分単位でも出来るんだろうけど・・・週間単位や任意の日数単位では分割できない)
分割したログを、特定数や特定日数で削除するような機能が無い。
(必要ならシェルスクリプトなどで対応するしか無い)

☆ インストール

cd /usr/ports/sysutils/cronolog
make config-recursive
make install clean && rehash

☆ 設定目標

/var/log/www/』の中にデータを置く設定。
基本となるファイル名

/var/log/www/%Y%m%d-httpd-access.log
/var/log/www/%Y%m%d-httpd-error.log

ファイル名の先頭に『%Y%m%d』を付けることで、この部分が『年月日』の数字に変換される。月単位や年単位でファイルを分割したいのであれば、ファイル名の先頭は『%Y%m(年月)や『%Y(年)とする。

年単位、月単位でディレクトリを分けたい場合は、『%Y/%m%d(年単位)や『%Y%m/%d(月単位)のように『/』で分ける。ディレクトリは自動で作ってくれるので、手動で作成する必要は全く無い。

私の場合は、ログファイルを定期的に削除するシェルスクリプトを動かそうと考えているため、年や月でディレクトリを分けたりしていない。

☆ Apacheの設定

vi /usr/local/etc/apache24/httpd.conf

まずは、該当箇所の下にでも設定を追加して、動作することを確認すると良いかもしれない。
動作を確認する事が出来たら、改めてログの切り替えをすれば良い。

CustomLog "|/usr/local/sbin/cronolog /var/log/www/%Y%m%d-httpd-access.log" combined
ErrorLog "|/usr/local/sbin/cronolog /var/log/www/%Y%m%d-httpd-error.log"

後はApacheを再起動。

/usr/local/etc/rc.d/apache24 restart

ログファイルの確認
環境にもよるが、適当に時間を開けてから確認する。
自分のアクセスを記録しない設定にしていないなら、自分のサイトにアクセスしてから確認すると言う手もある。

ls /var/log/www

ディレクトリ内に『年月日-httpd-access.log』と言うファイルが作成されていれば成功です。

☆ 元々有るログを分割?

私はやったことが有りません。
詳しくは、下記コマンドで確認して下さい。

cronosplit --help

☆ シェルスクリプト

特定の日数が経過したファイルを削除したり、WebalizerやAWStatsのようなログ解析ソフトで扱えるファイルに加工したりといった作業には、シェルスクリプトを作成してcrontabに登録しておくと便利です。

昔作ったものですが、特に不都合が無いので紹介します。
(『if』ではなく『case』な事は気にしない)

拡張子を『.sh』にしてファイルを作成し、パーミッションを700や755にして実行します。

#!/bin/sh

a=-httpd-access.log
u=/var/log/www/
x=0

# 60日前に作成されたログファイルを削除する。
# 60日前の日付を呼び出す
date -v-60d +'%Y%m%d' > $x
read x < $x

# ファイルが有るかの確認
test -e $u$x$a >$?
test $? -eq 0

# 状態によって動作を決定する
case $? in
        "0") rm $u$x-*;;
        # 結果が0なら、該当年月日のファイルを削除
        "1") ;;
        # 結果が1なら、何もしない
esac

# AWStatsの設定(仮)
# catコマンドでファイル連結
# cat /var/log/www/*-httpd-*.log > /var/log/www/httpd-access.log

# awstats へのデータ読み込み
# /usr/local/www/awstats/cgi-bin/awstats.pl -update -config=awstats.noichigo.conf

# catで作成したアクセスログを削除
# rm /var/log/www/httpd-access.log

# 終了宣言
exit 0

AWStatsの設定(仮)』から『終了宣言』までに書かれているコマンドは、ログ解析ソフトを利用する場合に調整・有効化して使います。
(分けて紹介するのは面倒だと思い、組み込んでしまいました)

awstats へのデータ読み込み』の部分はAWStatsのコマンドを例として紹介していますが、当然ながらWebalizerのコマンドに差し替えても問題有りません。

 

役に立ちましたか?
  • 役に立った (0)
  • 少しだけ (0)
  • これじゃない! (0)