2010年3月25日木曜日

ログローテーションはrotatelogsで、圧縮はpbzip2で

このエントリーをはてなブックマークに追加
Apache HTTP Serverで日ごとに別のファイルにログを出力するのは、標準添付されているrotatelogsでできるのですが、意外と知られていないようです。アクセスログならこんな感じです。
CustomLog "|/インストール先/bin/rotatelogs /出力先/access_log.%Y%m%d 86400 540" combined

マニュアル通りなら、この設定ではrotatelogsが起動してから24時間で出力先のログファイルが切り替わりそうに見えます。しかし、実際にはrotatelogsはtime(2)の返す値を86400秒で丸めてから開始時刻にするので、開始時刻はその日の0時になります。したがって、ログファイルが切り替わるのは翌日の0時以降です。

このことに気づくまではcronologをインストールしていたのですが、rotatelogsでいけるんですよ。ちなみに、3つ目のオプションに540を指定しないと、ログが切り替わるのがUTCの0時になるので注意してください。

ローテートしたログファイルは圧縮しないと、あっという間にディスクがあふれてしまいます。ftp.jaist.ac.jpのaccess_logは多い日で10GBを超えます。クソ遅いUltraSPARC T1で、こんなファイルをbzip2で圧縮したら1日掛かっても終わりません。

そこでマルチコアを使うpbzip2の出番です。T1の32論理CPUのうち10個も使ってやれば、圧縮時間はさくっと1/10になります。bzip2のアルゴリズムそのものを並列化しているわけではなく、ファイルをぶちぶちとちぎって並列でbzip2で回すだけなので、微妙に圧縮率は下がりますが実用上問題はありません。

0 件のコメント:

コメントを投稿