White Box技術部

WEB開発のあれこれ(と何か)

【logrotate】CentOSでログローテする

ログローテはたまにやろうとすると、あれどうだっけ?となるので logrotateを使ったログのローテーション方法をまとめました。

前提

  • 環境(OS):CentOS 6.6
  • 利用機能:logrotate、cron

今回は、ローテーションしたいログ、例えばアプリケーションログを /var/log/app配下に吐いているとして考えていきます。

※作業はsudoユーザで実施してください。

手順

/etc/logrotate.dディレクトリにappファイルを作成し、ログローテ設定をします。

なので、まずはこのディレクトリをlogrotateが読むようになっているかを確認しましょう。

logrotate.dの読み込み確認

logrotate.confに以下の記述があること確認してください。
もしなければ、適当な位置に追記をしてください。

  • /etc/logrotate.conf
include /etc/logrotate.d

これが設定されていれば、logrotate.dディレクトリの設定も読み込まれます。

ローテーション設定の記述

logrotate.dディレクトリ配下にファイルを作ってローテーションの設定を記述します。 ファイル名は何でもよいのですが、logが作成されるディレクトリ名など、 何のログのローテーション設定が書かれたものか分かるように様な名前が良いです。 (ここではlogディレクトリ名からappという名前にしています)

appファイルについて

  • /etc/logrotate.d/app
  • 権限:644、root:root
/var/log/app/*.log {
    copytruncate
    daily
    rotate 30
    compress
    missingok
    ifempty
}

以下の流れで実施すると、設定確認まできてGOODです

cd /etc/logrotate.d/
sudo vi app
logrotate -dv app

※エラーが出たら設定を見直してください。

cronの設定確認

ローテーションの設定自体は終わっているのですが、 一応cronでlogrotateが動かされているかを確認しておきましょう。

確認ポイントは、# service crond statusの結果がrunningになっていることと、 /etc/cron.daily/logrotateが存在していることです。

もしlogrotateファイルがなければ、権限:755で、root:rootの所有となるlogrotateファイルを、 以下の内容で作成してください。

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

まとめ

これで一旦ローテーション設定は有効になったと思います。 設定内容の詳細については、appの設定値とlogrotateの詳細を参照してください☆