Help us understand the problem. What is going on with this article?

ログローテション(rotatelogs)とcronによるログファイルの削除

More than 5 years have passed since last update.

Apacheのログファイルをローテションさせるrotatelogs設定方法の備忘録です。

logrotate/rotatelogsの違いについて

logrotateのApacheの設定ファイル(/etc/logrotate.d/httpd)を見てみると・・・

/var/log/httpd/*log {
missingok
notifempty
sharedscripts
delaycompress
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}

[service httpd reload]とあり、ローテートのタイミングでapacheの設定ファイルの再読み込みがかかります(詳細は/etc/init.d/httpdを確認すること)。実行中のリクエストの処理を中止してしまいます。
rotatelogsはログの削除設定ができないので、apcheのログファイルは膨れ上がる恐れがあります。環境に応じて、rotatelogsかlogrotateを使い分ける必要があります。今回、設定変更のreloadをさせたくない環境を構築する機会がありましたので、rotatelogsについての設定を書きます。

環境

centOS 6.6
Apache 2.2.15

logrotate設定を削除

httpdをインストールすると自動的に/etc/logrotate.d/httpdができるので、このファイルを削除する。
$ rm /etc/logrotate.d/httpd

rotatelogsの設定

/etc/httpd/conf/httpd.confを下記のように書き換えます。

#以下をコメントアウト
#ErrorLog logs/error_log
#以下を追記
ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/error_log.%Y-%m-%d 86400 540"

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

# 以下をコメントアウト
#CustomLog logs/access_log combined
# 以下を追記
CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_log.%Y%m%d 86400 540" combined
#

ローテートされているかの確認

下記のようなファイル名でaccessログとerrorログが1日周期でローテートされます。

$ ls /var/log/httpd/
access_log.2015-04-04 
access_log
error_log.2015-04-04
error_log

cronによるログ削除設定

Apacheの毎日ローテートさせたログファイルを30日分まで残し、30日超えたファイルは削除する。
ファイルの更新時間が30日経過したファイルを削除する設定にします。

シェルスクリプトの作成

$ vi rm_rotatelogs_accesslog.sh
#シェルスクリプトがあるパスまで移動
cd /opt/backlog/httpd/logs
#更新時間が30日経過したaccess_log.を抽出して削除
find ./ -name 'access_log.*' -mtime +30 -exec rm -f {} \;
$ vi rm_rotatelogs_errorlog.sh
#シェルスクリプトがあるパスまで移動
cd /opt/backlog/httpd/logs
#更新時間が30日経過したerror_log.を抽出して削除
find ./ -name 'error_log.*' -mtime +30 -exec rm -f {} \;

スクリプトに実行権限をあたえます。

$ chmod +x rm_rotatelogs_errorlog.sh
$ chmod +x rm_rotatelogs_accesslog.sh

cronの設定

$ crontab -e

#毎日0時5分にシェルスクリプトを実行
5 0 * * * /var/log/httpd/rm_rotatelogs_accesslog.sh
5 0 * * * /var/log/httpd/logs/rm_rotatelogs_errorlog.sh

これで設定は終わり。

更新から30日経過されたファイルが削除されていることの確認

検証方法

1.一ヶ月間に更新されたファイルを作成

$ touch -t 201503041200 /var/log/httpd/access_log.2015-03-04

2.cronの時間を設定して、ファイルが削除されることを確認

$ crontab -e 
#例えば以下のように設定すれば、毎時5分にローテートされる。
5 * * * * /var/log/httpd/rm_rotatelogs_accesslog.sh
komazawa
2014年11月にcloudpackにジョイン!!好きなAWSサービスはCloudFrontです。もうすぐ30歳
cloudpack
Amazon Web Services (AWS) の導入設計、環境構築、運用・保守をサポートするマネジドホスティングサービス
https://cloudpack.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした