VineLinuxパフォーマンスアッププロジェクト:0117

■アクセスログを指定時間ごとにローテーションさせる方法■

 apacheを起動させておくとアクセスログ(access_log)とエラーログ(error_log)が残ります。デフォルトでは1週間でログがローテーションされるようになっていますが、これをほかっておくといつの間にか巨大なファイルとなり、いざ障害が起きた時にログを見ようとすると見づらくて困ってしまいます。そこで指定時間(1日など)ごとにログを切り分けて保存する方法をご紹介します。

 指定時間ごとにログをローテーションさせる方法は2つあります。1つはapacheの設定ファイル内に記述する方法で、もう1つは自分でログをローテーションさせるプログラム(シェルスクリプト)をつくり、これをcronなどで指定時間に自動的に実行させるものです。ここでは両方の方法を紹介します。まず事前にアクセスログ等が格納される場所を知っておいてくださいね。

★apacheの設定ファイル内に記述する方法

 ここではapache2系のバージョンを前提として説明します(1系でも設定ファイルの置き場所が異なるだけで同じ方法でできると思います)。設定ファイルである/etc/apache2/conf/httpd.confをrootユーザで開き、お使いの環境に合わせて以下の記述を設定ファイル内のログ設定などが記述されている部分近くに追加します。

  TransferLog "|/usr/sbin/rotatelogs ログが格納されるディレクトリまでの絶対パス/access_log 86400"
  ErrorLog "|/usr/sbin/rotatelogs ログが格納されるディレクトリまでの絶対パス/error_log 86400"


 上の記述内でrotatelogsコマンドのパス名がお使いの環境によって異なる場合があるので念のためwhichコマンドなどで調べてください。また数字86400は秒数です。1時間=3600秒ですから、上の記述では24時間間隔でログをローテーションするようになります。この秒数を変更することによって自由自在にログをローテーションする間隔を設定することができます。

 設定が完了したらapache2を再起動させます。

  /etc/rc.d/init.d/apache2 restart

 これで完了です。ログがローテーションされるとaccess_log.1156464000のように数字がつきます。この数字はUTC秒というもので、UNIX(Linux)の内部ではこの瞬間からの秒数で時刻を表しているためにつきます。これでは後になっていつの日のログなのか分かりにくいのですが、それについては次に説明する自分でログをローテーションさせるプログラム(シェルスクリプト)をつくり、これをcronなどで指定時間に自動的に実行させる方法を使えば解決できます。

★シェルスクリプト+cronの方法

 シェルスクリプトでログをローテーションさせることもできます。そのスクリプトを作成しましたのでこちらからダウンロードしてください(テキストファイルになっていますので拡張子を.shに名前変更してダウンロードしてください。またお使いの環境に合わせてスクリプト内部のディレクトリパスなどを適宜変更してください。)。

 ダウンロードが終わったら実行権限をつけます。ファイル名をaccess_log.shにした場合はrootユーザで

  chmod 755 acces_log.sh

 としてください。

 ここまで終わったら次はcronの設定です。rootユーザでテキストエディタを使い/etc/crontabを開きます。24時間ごとにログをローテーションしたい場合には

  00 0 * * * root /root/access_log.sh

  01 * * * * root run-parts /etc/cron.hourly

の上に記述してください。数字を調整することによって細かな実行時間設定ができる(上の設定では毎日午前0時)のですが、cronの時間設定方法についてはここでは省略します。

 これで上書き保存をして、

  /etc/rc.d/init.d/crond restart

 をすれば完了です。




プロジェクト ホームへ戻る