こんにちは、cloudpack三浦剛慈 です。

はじめに

CentOS6でApacheログをlogrotateに一週間周期でローテーションするように追加設定した時の手順を記載します。
CentOSではlogrotateは標準インストールされていて、デフォルトではsyslog等が1日周期でローテーションされています。

実装方法

■anacloneの無効化

実行される時間がランダムになると、Amazon S3バックアップをローテーション時に削除されるものをAmazon S3にアップロード等の処理と併用する際等に、何かと不便なのでanacronをまず無効化する。

yum install cronie-noanacron
yum remove cronie-anacron

■logrotateコンフィグファイル

◇/etc/logrotate.d/hatted

  • apacheをインストールすると、/etc/logrotate.d/httpd が自動で作成されます。
    # yum install httpd
    
  • 今回apacheのログ(access.log, error.log)は1週間周期でローテーションするのでそこだけ追記します。
    # cat /etc/logrotate.d/httpd
    /var/log/httpd/*log {
    weekly
    rotate 53
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
    /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
    }
    

動作確認

■動作確認の方法

  • 前回のログローテート日を調整する
    # cat /var/lib/logrotate.status
    logrotate state -- version 2
    "/var/log/yum.log" 2014-12-8
    "/var/log/boot.log" 2014-12-8
    "/var/log/dracut.log" 2014-12-8
    "/var/log/httpd/error.log" 2014-12-8
    "/var/log/all.log" 2014-12-8
    "/var/log/wtmp" 2014-12-8
    "/var/log/spooler" 2014-12-8
    "/var/log/btmp" 2014-12-8
    "/var/log/maillog" 2014-12-8
    "/var/log/secure" 2014-12-8
    "/var/log/httpd/access.log" 2014-12-8
    "/var/log/messages" 2014-12-8
    "/var/account/pacct" 2014-12-8
    "/var/log/cron" 2014-12-8
    "/var/log/td-agent/td-agent.log" 2014-12-8
    ~
    

    日付を1日前や1週間前や1ヶ月前などに変更する

  • cronからのlogrotate実行時間を調整する
    # cat /etc/cron.d/dailyjobs
    # run-parts
    02 4 * * * root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.daily
    22 4 * * 0 root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.weekly
    42 4 1 * * root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.monthly
    

    /etc/cron.dailyの実行年月日時分秒を実行したいタイミングに変更する

■デバッグの方法

  • デバッグモードで確認する(実行はされない)
    # logrotate -d /etc/logrotate.d/httpd
    reading config file /etc/logrotate.d/httpd
    reading config info for /var/log/httpd/*log
    
    Handling 1 logs
    
    rotating pattern: /var/log/httpd/*log weekly (90 rotations)
    empty log files are not rotated, old logs are removed
    considering log /var/log/httpd/access.log
    log does not need rotating
    considering log /var/log/httpd/error.log
    log does not need rotating
    

    ※上記log does not need rotatingの原因は、ローテーション期間の一週間が過ぎてない為にでたメッセージ。

元記事はこちらです。
[CentOS]logrotateでapacheログを一週間周期でローテーションする