linux環境におけるのログファイルの保管設定(logrotate)

アプリで出力されるログやDBのバックアップを一定期間(1ヵ月分など)保管して、それ以上は自動的に削除させたい。
その保存期間の設定と管理をするのに使用するのが「logrotate」。

これは、/var/log ディレクトリ以下にあるapachesendmailなどのログファイルの管理にも使用されています。

$ll /var/log/maillog*
-rw------- 1 root root  8343  3月 31 04:02 /var/log/maillog <-現時点でのログファイル
-rw------- 1 root root  6330  3月 27 04:02 /var/log/maillog.1 <-ファイル名.数字 のファイルが
logrotateでローテーションされたファイル
-rw------- 1 root root 13737  3月 20 04:02 /var/log/maillog.2
-rw------- 1 root root  8998  3月 13 04:02 /var/log/maillog.3
-rw------- 1 root root  6334  3月  6 04:02 /var/log/maillog.4

詳しくはこちら->wikipedia:サーバログ->ログローテーション

OS=CentOS Ver5
user=hogeuser

ファイル作成

実行ファイルの配置場所は下記ディレクト

/etc/logrotate.d

その中にファイルを作成。

#vi/vim ファイル名

viコマンドで任意のファイル名を指定して作成。

実行ファイルの書式は

設定先ファイル/ディレクトリ {
  期日
  rotate ローテンション数
}

この他にも、圧縮や保存容量の指定などさまざまな項目があります。

各項目の指定内容は下記。
期日:daily(日単位)
:weekly(週単位)
:monthly(月単位)
ローテーション数:1〜

今回は
/home/hogeuser/work/backup/database/ ディレクトリ内の
db1_backup.sql
db2_backup.sql
db3_backup.sql
上記3ファイルを毎日ローテーションして、3日分残す指定。

logrotateファイル例)
/home/hogeuser/work/backup/database/*.sql {
    daily
    rotate 3
    missingok
}
/home/hogeuser/work/backup/database/*.sql {
/home/hogeuser/work/backup/database/ 以下に配置されている.sqlファイルに対するローテート宣言。
daily
1日を指定。
rotate 3
ローテート数を指定。
missingok
指定されたファイルが存在しない場合、エラーを出力せず次のファイル処理へ遷移する指定。

上記で、1日分(daily)を3ローテート(rotate 3)するので、3日分の.sqlファイルが常に保管される設定となる。

設定を反映

#/usr/sbin/logrotate /etc/logrotate.conf

上記コマンドにより実行ファイルが反映される。
以上でlogrotateの設定が終了、次は動作を確認。

logrotateの動作を確認

/var/lib/logrotate.status

上記ファイルを参照することで、現在ローテートが指定されているファイルの一覧が確認できる。
指定したファイルがあることを確認。

"/home/hogeuser/work/backup/database/db1_backup.sql" 2011-3-27
"/home/hogeuser/work/backup/database/db2_backup.sql" 2011-3-27
"/home/hogeuser/work/backup/database/db3_backup.sql" 2011-3-27

/home/hogeuser/work/backup/database/ 内のファイルが2011-3-27にローテーションを開始。

後日に/home/hogeuser/work/backup/database/を確認

$ ll /home/hogeuser/work/backup/database/
-rw-r--r--  1 root root 46124111  3月 31 09:30 db1_backup.sql
-rw-r--r--  1 root root 46124111  3月 30 09:30 db1_backup.sql.1
-rw-r--r--  1 root root 46124111  3月 29 09:30 db1_backup.sql.2
-rw-r--r--  1 root root 46122932  3月 28 09:30 db1_backup.sql.3
-rw-r--r--  1 root root 11442512  3月 31 09:30 db2_backup.sql
-rw-r--r--  1 root root 11441540  3月 30 09:30 db2_backup.sql.1
-rw-r--r--  1 root root 11441540  3月 29 09:30 db2_backup.sql.2
-rw-r--r--  1 root root 11441540  3月 28 09:30 db2_backup.sql.3
-rw-r--r--  1 root root  8226985  3月 31 09:30 db3_backup.sql
-rw-r--r--  1 root root  8226985  3月 30 09:30 db3_backup.sql.1
-rw-r--r--  1 root root  8226985  3月 29 09:30 db3_backup.sql.2
-rw-r--r--  1 root root  8226985  3月 28 09:30 db3_backup.sql.3

無事ローテーションされている。

Memo
logrotateは、前回の記事「liunx環境における定期処理の実行(crontab)」と組み合わせることで威力を発揮。
上記の例では、毎日09:30時に各DBのバックアップをcrontabで自動的に取得するように設定して、logrotateによってそのバックアップを3日分ローテーションしている。
ローテーション数もディスク容量などと折り合いが付くようにすれば簡単にふやせるので簡単。