logrotateでログファイルの肥大化を防止する。

logrotateでログファイルの肥大化を防止する。

自前のAPPログ等を放置するとディスクがいっぱいになった、なんてことがある。そんなことにならないように「logrotate」を活用する。logrotateはログを世代管理し、容量の肥大化を防ぐツール。/var/log/messages , secureがよしなにローテーションされているのはこいつのおかげです。

1.logrotateインストール確認

logrotateがインストールされているか確認。なければyumでインストール可能。

logrotateの実行されるタイミングはcronで管理されていて、一日おきにcron.dailyディレクトリ配下にlogrotateファイルが実行されている。

実行結果がerrorになるとsyslogに”ALERT exited abnormally with”を出力してくれるので、ログ監視しておくと良いかも。

何時に実行されるのかは/etc/crontabもしくは/etc/anacrontabに記述されている。

 

2.logrotateの設定ファイル

設定ファイルではどの間隔でローテートする・しない、このサイズを超えていたらローテートするなどの条件を指定することができる。logrotate.confと/etc/logrotate.d/配下のファイルの記述内容は基本的には同じ。logrotate.confで全体のパラメータを指定するファイルだが、サービスごとにローテートの条件や圧縮方式を変えたいというケースに対応するために、logrotate.d/配下のファイルを利用する。logrotate.d/配下ファイルのサービス毎の設定が優先され、指定がなかったパラメータはlogrotate.confのパラメータが適用されます。

■基本ファイル /etc/logrotate.conf

■サービス別設定ファイル一覧

■サービス別設定ファイル内容

3.設定パラメータの意味

以下、設定パラメータまとめ。

daily 毎日rotate。
weekly 一週間ごとにrotate。
monthly 月ごとにrotate。
yearly 一年ごとにrotate。
size ログファイルがsizeで指定した以上の容量であればローテート。
例:size 100k, size 100M  and  size 100G
rotate 4 rotateの世代数を指定する。
create ローテート後に空のファイルを作成します。
例:create 0664 root utmpp(maskは0664、所有者root、所有グループwtmp)
dateext ローテートファイルにYYYYMMDD形式の拡張子をつける。デフォルトではローテートファイルには1,2,3,4といったシンプルな数字がファイル名末尾につく。
compress 古いログファイルを圧縮する。デフォルトで利用されるコマンドはgzipコマンド。
include 設定ファイルを追加する。デフォルトではlogrotate.d/配下ファイルが読み込まれるよう
logrote.confに記述されている。
missingok ログファイルが存在しない場合、エラーメッセージを発行しない。
nomissingok ログファイルが存在しない場合、エラーメッセージを発行する。デフォルト。
notifempty ログファイルが空だった場合にローテーションしない。
postrotate/endscript postrotateとendscriptの間に記述されたスクリプトをローテート後に実施。httpdのrotate設定ファイルを確認するとローテート後にhttpdのサービスを再読み込みするように記述されています。
postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript

4.ローテート対象を追加する

4-1.設定ファイルを作成

新しくstate_loggerという自作プログラム用のログローテーション設定ファイルを作成しました。デーモン名やプログラム名にしておくのが無難そう。

logrotate設定サンプル。一日おきに1MB以上のログをローテートし、圧縮を行った後に指定のメールアドレスにメールする設定。

ちなみにlogrotateで定義したログのPATHが存在しない場合、logrotate全体のcron実行が失敗するので、動作確認は必ずやっておいたほうが良さそうです。

4-2.動作確認

うまく動作しない場合は以下コマンドで強制実行が可能。

 

Bookmark this on Google Bookmarks
LINEで送る
Pocket