Apacheのログはデフォルトでは、/etc/logrotate.conf と /etc/logrotate.d/httpd の 設定により週次でローテートされ4世代のバックアップを保持します。およそ1か月以上前のログは 参照できなくなります。大規模サイト等では長期間のログを保持する必要があるためこの設定は 不都合になることがあります。 一般的にApacheのログ出力先とWebサイトコンテンツは別ボリュームに分けたほうがよいと 考えられます。Apacheのログ出力先を変更(/log/ 以下)して日次で出力する設定をまとめます。 また、ログは削除せず、任意のタイミングでアーカイブするシェルスクリプトも準備します。 OS: RedHat EL 6.4(64-bit) Apache: 2.2.15 仮ドメイン名: domain1.com、domain2.com
■Apacheのログを日次で出力
httpd.confの下記個所を変更します。
ログファイル名に日付を付与し、1日(=86400秒)ごとに出力します。
VirtualHost別のログ出力先を考慮して /log/httpd/[ドメイン名]/ 以下に変更します。
[root@dcf-web ~]# grep -B 1 rotatelogs /etc/httpd/conf/httpd.conf #ErrorLog logs/error_log ErrorLog "| /usr/sbin/rotatelogs -l /log/httpd/domain1.com/error_log-%Y%m%d 86400" -- #CustomLog logs/access_log combined CustomLog "| /usr/sbin/rotatelogs -l /log/httpd/domain1.com/access_log-%Y%m%d 86400" combined [root@dcf-web ~]#※domain2.comの設定は省略。
※/log/httpd/domain1.com-access_log-%Y%m%d と /log/httpd/domain2.com-access_log-%Y%m%d
のようにして、ファイル名でドメインを区別する方法もアリです。
⇒ログ出力状況(以下のhttpdlog_archive.shを実行済み)
[root@dcf-web ~]# ll /log/httpd/domain1.com/ | head 合計 1045260 -rw-r--r-- 1 root root 40813 1月 1 23:59 2014 access_log-20140101 -rw-r--r-- 1 root root 40698 1月 2 23:59 2014 access_log-20140102 -rw-r--r-- 1 root root 43786 1月 3 23:59 2014 access_log-20140103 -rw-r--r-- 1 root root 40418 1月 4 23:59 2014 access_log-20140104 -rw-r--r-- 1 root root 52147 1月 5 23:59 2014 access_log-20140105 -rw-r--r-- 1 root root 40623 1月 6 23:59 2014 access_log-20140106 -rw-r--r-- 1 root root 40426 1月 7 23:59 2014 access_log-20140107 -rw-r--r-- 1 root root 42826 1月 8 23:59 2014 access_log-20140108 -rw-r--r-- 1 root root 40254 1月 9 23:59 2014 access_log-20140109 [root@dcf-web ~]#
■3ヵ月前のhttpdログをアーカイブするシェルスクリプト
シェルスクリプトファイル名: httpdlog_archive.sh
#!/bin/sh ####################################################################### # << 機能概要 >> # 3ヵ月前のApacheのログファイル1か月分をアーカイブ後、生ログ削除 # ログ出力先: /log/httpd/domain1.com/ # /log/httpd/domain2.com/ # # << 変更履歴 >> # Version 変更日 変更者 変更内容 # --------+------------+-----------+---------------------------------- # 1.0 2014/03/06 tanyao New # ####################################################################### # 対象月を取得(yyyymm) TARGET_MONTH=`date -d '3 months ago' '+%Y%m'` # ログ保存先ディレクトリパス LOG_DIR=/log/httpd # 対象ディレクトリへ移動 cd ${LOG_DIR} # 出力対象ファイルが既に存在する場合は終了 if [ -f domain1.com_${TARGET_MONTH}.tar.gz ] || [ -f domain2.com_${TARGET_MONTH}.tar.gz ]; then echo "tar file already exit." exit 1 fi # 対象ログファイルアーカイブ tar -zcf domain1.com_${TARGET_MONTH}.tar.gz domain1.com/*_log-${TARGET_MONTH}* tar -zcf domain2.com_${TARGET_MONTH}.tar.gz domain2.com/*_log-${TARGET_MONTH}* # 生ログは削除 rm -rf domain1.com/*_log-${TARGET_MONTH}* rm -rf domain2.com/*_log-${TARGET_MONTH}* cd - exit 0
■crontabに登録
[root@dcf-web ~]# crontab -l | tail -2 # httpd log archive 22 2 2 * * (/opt/private/batch/httpdlog_archive.sh > /dev/null 2>&1) [root@dcf-web ~]#⇒ログアーカイブ状況
[root@dcf-web ~]# ll /log/httpd/ 合計 272 drwxr-xr-x 2 root root 20480 3月 12 15:01 2014 domain1.com -rw-r--r-- 1 root root 45 2月 2 22:00 2014 domain1.com_201311.tar.gz -rw-r--r-- 1 root root 189336 3月 2 22:01 2014 domain1.com_201312.tar.gz drwxr-xr-x 2 root root 20480 3月 12 14:59 2014 domain2.com -rw-r--r-- 1 root root 8780 2月 2 22:01 2014 domain2.com_201311.tar.gz -rw-r--r-- 1 root root 23253 3月 2 22:01 2014 domain2.com_201312.tar.gz [root@dcf-web ~]#
こちらの情報が何かのお役に立てましたら幸いです。サイト継続のご協力ありがとうございます。m(_ _)m
0 件のコメント:
コメントを投稿