logrotate.d を使ってLinuxサーバー (CentOS) のログをローテーションする方法をまとめました。
目次
ログのローテーション
ApacheやnginxなどのWEBサーバーを設定して、何らかのサービスを稼働して運用の段階に入った時に、稼働状況を調べるのは、ログファイルになると思います。
ログを調べることにより、サーバーにエラーが発生していないか、負荷はどの程度か、どこからアクセスがあるか、など様々な情報を取得することが出来ます。
ログにおいて注意すべきことの一つに、ログに情報を書きっぱなしになっていないか、ちゃんとログが一定周期で自動にローテートされているかどうかという点があります。
ログがローテートされていないと、サーバーが稼働する限り、永遠に1つのログファイルに書き出し続けることになります。
ファイルシステムのタイプや32bit/64bitなどの制限により、システムによっては1個のファイルサイズの上限が2GBということもあり、システムの運用規模によってはすぐにログファイルが最大値に到達して、それ以上のログが書き出されなくなります。
よってログのローテーションは安定した運用において必ず設定する必要があります。
ログローテーションの設定ファイル /etc/logrotate.conf
Linuxサーバー(CentOS)のログローテーションの設定ファイルは、/etc/logrotate.conf に記述されています。
このファイルは、24時間ごとに稼働する /etc/cron.daily/logrotate から読み込まれます。
/etc/logrotate.conf は以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# see "man logrotate" for details # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # use date as a suffix of the rotated file dateext # uncomment this if you want your log files compressed #compress # RPM packages drop log rotation information into this directory include /etc/logrotate.d # no packages own wtmp and btmp -- we'll rotate them here /var/log/wtmp { monthly create 0664 root utmp minsize 1M rotate 1 } /var/log/btmp { missingok monthly create 0600 root utmp rotate 1 } # system-specific logs may be also be configured here. |
このファイルはわかりやすいので、そのまま理解できると思います。
各項目の意味は次の通りです。
weekly
毎週ログを置き換えます。dailyとすれば毎日、monthlyとすれば毎月になります。
rotate 4
ログを4世代分残すという意味です。
create
新規ログファイルをローテーションした直後に作成するという意味です。
compress
圧縮するという意味です。コメントされていると圧縮は行われません。
include /etc/logrotate.d
各ログファイルの設定がおかれているパスを表します。
/var/log/wtmp
wtmp のログファイルは毎月1世代のみログを残し、所有者権限がroot でグループ権限がutmp、パーミッション値が664 のログファイルを作成します。
各ログの設定 /etc/logrotate.d とApacheのログのローテート
Apacheやnginxをyumでソフトウェアをインストールする場合、ほとんどの場合は、ログのローテーション用の設定ファイルは正しく配備されます。
例えば、Apacheの場合、/etc/logrotate.d/httpd というファイルがインストール時に配備されます。
1 2 3 4 5 6 7 8 9 |
/var/log/httpd/*log { missingok notifempty sharedscripts delaycompress postrotate /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true endscript } |
各項目の意味は次の通りです。
missingok
ログファイルが存在しなくてもエラーを出さずに処理を続行する。
notifempty
ログファイルが空ならローテーションしない。
sharedscripts
複数指定したログファイルに対し、postrotateまたはprerotateで記述したコマンドを実行する。
delaycompress
ログの圧縮を次回のローテーション時まで遅らせる。compressと共に指定する。
postrotate~endscript
postrotateとendscriptの間に記述されたコマンドをログローテーション後に実行する。
logrotate設定上の注意点
/etc/logrotate.d の設定ファイルでdailyと指定しても、/etc/logrotate.conf でweeklyと指定されているとdaily実行されません。
各アプリでローテート間隔を変えたい場合、logrotate.conf ではdailyにして、/etc/logrotate.d の設定ファイルそれぞれで定義しておく必要があります。
運用後の注意点としては、アプリケーションのログは、/var/log 以下に書き出されるのがルールなので、何らかのサービスを稼働後に、/var/log 以下のファイルが正しくローテートされていることを確認するようにしましょう。
さくらのVPSサーバー
↓月額685円からの低価格&高パフォーマンスのVPS、さくらのVPSはコチラ
SSDプランが月々685円から使える!さくらのVPS
コメント