linux環境におけるのログファイルの保管設定(logrotate)
アプリで出力されるログやDBのバックアップを一定期間(1ヵ月分など)保管して、それ以上は自動的に削除させたい。
その保存期間の設定と管理をするのに使用するのが「logrotate」。
これは、/var/log ディレクトリ以下にあるapacheやsendmailなどのログファイルの管理にも使用されています。
$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日分ローテーションしている。
ローテーション数もディスク容量などと折り合いが付くようにすれば簡単にふやせるので簡単。