【Apache】 ログ ローテート


apacheのログの切り回しを設定したのでメモ。

httpd.confに設定します。

# vi /usr/local/apache/conf/httpd.conf

  ErrorLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/error_log.%Y%m%d 86400 540"
  CustomLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/access_log.%Y%m%d 86400 540" combined

上記の設定をすると「access_log」と「error_log」が24時間ごとに別名で保存されていきます。
設定内容は↓こんな感じです。

/usr/local/apache/bin/rotatelogs
apacheが標準で備えているログローテートを使用します。

/usr/local/apache/logs/error_log.%Y%m%d
access_log.年月日 という別名で切り回します。

86400
ローテートする周期を”秒”で指定します。
86400秒=24時間。

540
日本時間用のオフセット値。
設定しない場合はUTCで0時に実行されます。
日本は9時間ずれなので毎朝9時に実行されることになります。

apacheの機能だとログを切り回すだけなので
ログを圧縮して移動させるシェルを作りました。

# mkdir /usr/local/apache/logs/backup
# vi /usr/local/apache/logs/backup/backup.sh

#!/bin/sh

# 各種設定
LOGDIR=/usr/local/apache/logs
BACKUPDIR=/usr/local/apache/backup
GZIP=/bin/gzip
LOG_FILES="access.log error.log ssl_access_log ssl_error_log"
GZIP_TARGET_DATE=`date --date '1 days ago' '+%Y%m%d'`

# ログの圧縮
for LOG_FILE in $LOG_FILES
do
  FILENAME=${LOGDIR}/${LOG_FILE}.${GZIP_TARGET_DATE}
  if [ -f ${FILENAME} ]; then
    $GZIP $FILENAME
  fi
done

# ログの移動
FILES=`find ${LOGDIR} -maxdepth 1 -name '*.gz' -print`
for FILE in $FILES
do
  mv $FILE $BACKUPDIR
done

# 7日過ぎた過去ログを削除
find $BACKUPDIR -mtime +7 -name '*.gz' | xargs rm -f

ログの削除も含まれていますので参考にする際はご注意頂き自己責任でお願い致します。
今回はバックアップディレクトリをlogディレクトリ配下に作成したので
ログの移動のfindの際に「-maxdepth 1」を指定して
子ディレクトリを検索しないようにしています。

これをcronに仕込んで設定完了です。

# compress and backup log files
5 0 * * * root /usr/local/apache/logs/backup/backup.sh 2>&1

ログの切り回しは他にも色々と手段があるようなので
今後使用する事があれば、また記事にしようと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です