ログ ファイルを効果的に管理することは、Linux システム管理者にとって不可欠なタスクです。
この記事では、UNIX logrotate を使用して次のログ ファイル操作を実行する方法について説明します。
- ファイル サイズが特定のサイズに達したときにログ ファイルをローテーションする
- 古いログ ファイルをローテーションした後、新しく作成されたファイルにログ情報を書き込み続ける
- ローテーションされたログ ファイルを圧縮する
- ローテーションされたログ ファイルの圧縮オプションを指定する
- ファイル名に日付を付けて古いログ ファイルをローテーションする
- ログ ローテーションの直後にカスタム シェル スクリプトを実行する
- ローテーションされた古いログ ファイルを削除する
1. Logrotate 構成ファイル
以下は、logrotate が適切に機能するために知っておくべき重要なファイルです。
/usr/sbin/logrotate – logrotate コマンド自体。
/etc/cron.daily/logrotat e – このシェル スクリプトは、logrotate コマンドを毎日実行します。
$ cat /etc/cron.daily/logrotate #!/bin/sh /usr/sbin/logrotate /etc/logrotate.conf EXITVALUE=$? if [ $EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" fi exit 0
/etc/logrotate.conf – すべてのログ ファイルのログ ローテーション構成は、このファイルで指定されます。
$ cat /etc/logrotate.conf weekly rotate 4 create include /etc/logrotate.d /var/log/wtmp { monthly minsize 1M create 0664 root utmp rotate 1 }
/etc/logrotate.d – 個々のパッケージがシステムにインストールされると、ログ ローテーション構成情報がこのディレクトリにドロップされます。たとえば、yum ログ ローテーションの構成情報を以下に示します。
$ cat /etc/logrotate.d/yum /var/log/yum.log { missingok notifempty size 30k yearly create 0600 root root }
2. Logrotate size オプション:ファイル サイズが特定の制限に達したときにログ ファイルをローテーションします
1KB ごとにログ ファイル (たとえば、/tmp/output.log) をローテーションする場合は、次のように logrotate.conf を作成します。
$ cat logrotate.conf /tmp/output.log { size 1k create 700 bala bala rotate 4 }
この logrotate 構成には、次の 3 つのオプションがあります:
- サイズ 1k – ファイルサイズがこのサイズと等しい (または大きい) 場合にのみ logrotate が実行されます。
- 作成 – 元のファイルをローテーションし、指定された権限、ユーザー、およびグループで新しいファイルを作成します。
- rotate – ログ ファイルのローテーション数を制限します。したがって、これにより、最近の 4 つのローテーションされたログ ファイルのみが保持されます。
ログローテーション前の output.log のサイズは次のとおりです:
$ ls -l /tmp/output.log -rw-r--r-- 1 bala bala 25868 2010-06-09 21:19 /tmp/output.log
ここで、以下に示すように logrotate コマンドを実行します。オプション -s は、logrotate ステータスを書き込むファイル名を指定します。
$ logrotate -s /var/log/logstatus logrotate.conf
注 :一部のファイルのログ ローテーションが必要な場合は常に、logrotate 構成を準備し、logroate コマンドを手動で実行します。
logrotation 後の output.log のサイズは次のとおりです。
$ ls -l /tmp/output* -rw-r--r-- 1 bala bala 25868 2010-06-09 21:20 output.log.1 -rwx------ 1 bala bala 0 2010-06-09 21:20 output.log
最終的には、ローテーションされたログ ファイルの設定に従います。
- output.log.4.
- output.log.3
- output.log.2
- output.log.1
- output.log
ログのローテーション後、サービスに対応するログ ファイルは引き続きローテーションされたファイル (output.log.1) を指し、書き込みを続けることに注意してください。 apache を回転させたい場合は、上記の方法を使用できます。 access_log または error_log 5 MB ごと。
理想的には、/etc/logrotate.conf を変更して、特定のログ ファイルの logrotate 情報を指定する必要があります。
また、巨大なログ ファイルがある場合は、以下を使用できます:Unix で巨大なログ ファイルを表示するための 10 のすばらしい例
3. Logrotate copytruncate オプション:古いログ ファイルをローテーションした後、新しく作成されたファイルにログ情報を書き込み続けます。
$ cat logrotate.conf /tmp/output.log { size 1k copytruncate rotate 4 }
copytruncate は、logrotate に元のファイルのコピーを作成し (つまり、元のログ ファイルをローテーションする)、元のファイルを 0 バイト サイズに切り捨てるように指示します。これにより、そのログ ファイルに属するそれぞれのサービスが適切なファイルに書き込むことができます。
ログ ファイルを操作しているときに、sed 代替、sed 削除のヒントが役立つ場合があります。
4. Logrotate 圧縮オプション:ローテーションされたログ ファイルを圧縮します
以下に示すように圧縮オプションを使用すると、ローテーションされたファイルは gzip ユーティリティで圧縮されます。
$ cat logrotate.conf /tmp/output.log { size 1k copytruncate create 700 bala bala rotate 4 compress }
圧縮ログファイルの出力:
$ ls /tmp/output* output.log.1.gz output.log
5. Logrotate dateext オプション:ログ ファイル名の日付を使用して古いログ ファイルをローテーションします
$ cat logrotate.conf /tmp/output.log { size 1k copytruncate create 700 bala bala dateext rotate 4 compress }
上記の構成の後、以下に示すように、ローテーションされたログ ファイルに日付が表示されます。
$ ls -lrt /tmp/output* -rw-r--r-- 1 bala bala 8980 2010-06-09 22:10 output.log-20100609.gz -rwxrwxrwx 1 bala bala 0 2010-06-09 22:11 output.log
これは 1 日に 1 回だけ機能します。同じ日に次にローテーションしようとすると、以前にローテーションされたファイルが同じファイル名になるためです。したがって、logrotate は、同じ日に最初に実行された後は成功しません。
通常、ログ ファイルの出力をリアルタイムで表示するには、tail -f を使用します。複数の tail -f 出力を組み合わせて、単一の端末に表示することもできます。
6.毎月、毎日、毎週のログローテーション オプション:ログ ファイルを毎週/毎日/毎月ローテーション
ローテーションを毎月 1 回行うため、
$ cat logrotate.conf /tmp/output.log { monthly copytruncate rotate 4 compress }
毎週のログ ローテーションのために、以下に示すように Weekly キーワードを追加します。
$ cat logrotate.conf /tmp/output.log { weekly copytruncate rotate 4 compress }
毎日のログ ローテーションには、以下に示すように、daily キーワードを追加します。ログを 1 時間ごとにローテーションすることもできます。
$ cat logrotate.conf /tmp/output.log { daily copytruncate rotate 4 compress }
7. logrotate postrotate endscript オプション:ログのローテーション直後にカスタム シェル スクリプトを実行
Logrotate を使用すると、ログ ファイルのローテーションが完了した後で、独自のカスタム シェル スクリプトを実行できます。次の構成は、logrotation の後に myscript.sh を実行することを示しています。
$ cat logrotate.conf /tmp/output.log { size 1k copytruncate rotate 4 compress postrotate /home/bala/myscript.sh endscript }
8. Logrotate maxage オプション:ローテーションされた古いログ ファイルを削除
Logrotate は、特定の日数が経過すると、ローテーションされたファイルを自動的に削除します。次の例は、ローテーションされたログ ファイルが 100 日後に削除されることを示しています。
$ cat logrotate.conf /tmp/output.log { size 1k copytruncate rotate 4 compress maxage 100 }
9. Logrotate missingok オプション:ログ ファイルが見つからない場合にエラーを返さない
以下に示すように、このオプションを使用して、実際のファイルが利用できない場合、エラー メッセージを無視できます。
$ cat logrotate.conf /tmp/output.log { size 1k copytruncate rotate 4 compress missingok }
10. Logrotate compresscmd および compressext オプション:ログ ファイル ローテーション用の圧縮コマンドを指定
$ cat logrotate.conf /tmp/output.log { size 1k copytruncate create compress compresscmd /bin/bzip2 compressext .bz2 rotate 4 }
以下の圧縮オプションは上で指定されています:
- compress – 圧縮を行う必要があることを示します。
- compresscmd – 使用する圧縮コマンドのタイプを指定します。例:/bin/bzip2
- compressext – ローテーションされたログ ファイルの拡張子を指定します。このオプションがないと、回転したファイルのデフォルトの拡張子は .gz になります。したがって、bzip2 圧縮コマンドを使用する場合は、上記の例に示すように拡張子を .bz2 として指定してください。