ログローテーション設定(logrotate)
20130105

動作環境
 CentOS7.x
 CentOS6.x
 CentOS5.x
 logrotate
◆まずはコンフィグファイルについて
 [root@Server ~]# vi /etc/logrotate.conf

 ※ここでの設定よりも個別設定の値が優先されます。
  個別設定にて明示しなかった場合、本設定ファイルの値が使用されます。

weekly
→ログローテーションの周期指定
→毎日=daily 毎週=weekly 毎月=monthly

rotate 4
→ログファイルの世代管理
→指定した数のログファイルを保持します。
→デフォルト「4」は、「weekly」=4週間分。「daily」=4日分。「monthly」=4月分を保持

create
→ログローテーションを行った後に新しいログファイルを生成する。
→ここでは特に設定を変更する必要はありません。

#compress
→ログファイルを圧縮して保持するか否か。
→ディスクに空きが無い場合を除いて無効でいいです。

include /etc/logrotate.d
→各種ログのログローテーションを設定を書いたファイルを置いておくディレクトリの指定。
→本設定ファイル「/etc/logrotate.conf」に直接記載するのではなく、別途用意したほうが管理がしやすいです。
→詳細については下部にて。
→変更不要

まとめると設定は以下になります。
 毎週ログローテーション実施し、直後にログファイルを新たに作成します。
 ログファイルは圧縮せず、4世代(4週間)分保持します。

◆直接このファイルに設定を記載した場合(デフォルトでwtmpログ設定が記述されている)

/var/log/wtmp {
→ログファイルのファイルパス指定

monthly
→ここで「monthly」設定となっている為、このファイルのログローテーション周期は「毎月」となります。

create 0664 root utmp
→新規にログファイルを作る際に「所有者root」:「グループutmp」、「パーミッション664」と指定しています。

rotate 1
→ログ保持数1と指定しています。

}

まとめると設定は以下になります。
 毎月ログローテーションを実施し、直後に所有者root:グループutmp、パーミッション664のログファイルを新たに作成します。
 ログファイルは1世代(1ヶ月)分を保持。
 尚、指定の無いオプション設定についてはデフォルト値が適用されます。
◆毎日ログローテーションを実施し、31日分のログを圧縮せずに保持する設定例。
 [root@Server ~]# vi /etc/logrotate.conf

daily
rotate 31
create
#compress
include /etc/logrotate.d

◆wtmp用設定を消去した対処
 先ほどの通り、通常であればwtmpの設定がconfファイルに直接記述されています。
 今回は設定を削除した上で個別設定していきましょう。

 [root@Server ~]# vi /etc/logrotate.d/wtmp

/var/log/wtmp {
minsize 1M
create 0664 root utmp
}

→「minsize」オプションについて
→指定したファイルサイズ以下の場合はローテーション対象としない。
→単位は 「K」 「M」等が使用出来ます。
→この場合は指定ファイルが1MB以下であればこのログをログローテーションしない。
→ちなみにwtmpとは、システムにログインした際の成功ログを格納しているバイナリファイル

◆btmp用設定を消去した対処(Centos6.x以降)
 Centos6.x以降ではbtmp設定も記述されております。
 今回はこちらもconfファイルから設定を削除した上で個別設定していきましょう。

 [root@Server ~]# vi /etc/logrotate.d/btmp

/var/log/btmp {
missingok
notifempty
create 0600 root utmp
}

→ちなみにbtmpとは、システムにログインを試みた際の失敗ログを格納しているバイナリファイル
◆個別設定の設定例(kaillerasrv)
 [root@Server ~]# /etc/logrotate.d/kaillerasrv

daily
→ログローテーションの周期指定(個別に周期を設定する場合)
→毎日=daily 毎週=weekly 毎月=monthly

/var/log/kaillerasrv.log {
→ログファイルを指定

missingok
→指定したログファイルが無い場合でもエラー出力をしないで処理を続行します。

notifempty
→指定したログファイルの中身が空であれば処理をしない。

olddir /var/log/old
→指定したディレクトリにログローテーション後のログファイルを格納していきます。
→全てのログをまとめると管理がしやすいです。(要設定)

sharedscripts
postrotate
killall kaillerasrv
/var/kaillerasrv/kaillerasrv >> /var/log/kaillerasrv.log &
endscript
→ログローテーション時にコマンドを実行したりする場合に用います。
→設定例のkaillerasrvでは、ログローテーションを実施してしまうとログファイルを見失い、以降のログを出力しなくなります。
→正常にログ出力する為に、ログファイルが新しくなったら起動しなおしてやりましょう。ってコマンドを実行させています。
→「killall kaillerasrv」プロセスの終了 「/var/kaillerasrv/kaillerasrv >> /var/log/kaillerasrv.log &」起動

}

終わり。