LinuxでLogrotateを使用してログローテーションを設定および管理する方法


Linuxシステムで最も興味深い(そしておそらく最も重要な)ディレクトリの1つは、/var/log です。 Filesystem Hierarchy Standardによると、システムで実行されているほとんどのサービスのアクティビティは、このディレクトリまたはそのサブディレクトリの1つにあるファイルに書き込まれます。

このようなファイルはログと呼ばれ、システムがどのように動作しているか(および過去にどのように動作したか)を調べるための鍵となります。ログは、管理者やエンジニアがトラブルシューティング中に調べる最初の情報源でもあります。

CentOS/RHEL/FedoraおよびDebian/Ubuntu(さまざまな場合)の/var/log の内容を見ると、次のログファイルとサブディレクトリが表示されます。

システムで実行されているサービスとそれらが実行されている時間によって、結果が多少異なる場合があることに注意してください。

# ls /var/log
# ls /var/log

どちらの場合も、一部のログ名は「log」で期待どおりに終了しますが、他のログ名は日付を使用して名前が変更されるか(たとえば、CentOSのmaillog-20160822)、圧縮されます(auth.log.2.gzを検討してください)。およびDebianのmysql.log.1.gz)。

これは、選択したディストリビューションに基づくデフォルトの動作ではありませんが、この記事で説明するように、構成ファイルのディレクティブを使用して自由に変更できます。

ログが永久に保持されると、最終的には/ var/logが存在するファイルシステムがいっぱいになります。これを防ぐために、システム管理者はlogrotateと呼ばれる優れたユーティリティを使用して、定期的にログをクリーンアップできます。

簡単に言うと、logrotateは、条件が満たされたときにメインログの名前を変更または圧縮して(詳細は1分以内)、次のイベントが空のファイルに記録されるようにします。

さらに、「古い」ログファイルを削除し、最新のログファイルを保持します。もちろん、「古い」とは何を意味し、logrotateでログをクリーンアップする頻度を決定することができます。

LinuxへのLogrotateのインストール

logrotateをインストールするには、パッケージマネージャーを使用するだけです。

---------- On Debian and Ubuntu ---------- 
# aptitude update && aptitude install logrotate 

---------- On CentOS, RHEL and Fedora ---------- 
# yum update && yum install logrotate

構成ファイル( /etc/logrotate.conf )は、他のより具体的な設定が内部の個々の .conf ファイルに配置される可能性があることを示している可能性があることに注意してください。 /etc/logrotate.d。

これは、次の行が存在し、コメントアウトされていない場合にのみ当てはまります。

include /etc/logrotate.d

物事を整理するのに役立つので、このアプローチに固執し、次の例ではDebianボックスを使用します。

LinuxでLogrotateを構成する

非常に用途の広いツールであるlogrotateは、ログをローテーションするタイミングと方法、およびその直後に何を実行するかを構成するのに役立つ多くのディレクティブを提供します。

次の内容を/etc/logrotate.d/apache2.confに挿入し(ほとんどの場合、そのファイルを作成する必要があることに注意してください)、各行を調べてその目的を示します。

/var/log/apache2/* {
    weekly
    rotate 3
    size 10M
    compress
    delaycompress
}

最初の行は、ブロック内のディレクティブが/ var/log/apache2内のすべてのログに適用されることを示しています。

  • weekly means that the tool will attempt to rotate the logs on a weekly basis. Other possible values are daily and monthly.
  • rotate 3 indicates that only 3 rotated logs should be kept. Thus, the oldest file will be removed on the fourth subsequent run.
  • size=10M sets the minimum size for the rotation to take place to 10M. In other words, each log will not be rotated until it reaches 10MB.
  • compress and delaycompress are used to tell that all rotated logs, with the exception of the most recent one, should be compressed.

ドライランを実行して、logrotateが実際に実行された場合にどうなるかを見てみましょう。 -d オプションの後に構成ファイルを使用します(このオプションを省略すると、実際にlogrotateを実行できます)。

# logrotate -d /etc/logrotate.d/apache2.conf

結果を以下に示します。

ログを圧縮する代わりに、ローテーションされた日付の後に名前を変更することができます。そのために、 dateext ディレクティブを使用します。日付形式がデフォルトのyyyymmdd以外の場合は、dateformatを使用して指定できます。

notifemptyでログが空の場合は、ローテーションが発生しないようにすることもできます。さらに、ログローテーションされたログをシステム管理者(この場合は[メールで保護])にメールで送信して参照できるようにlogrotateに指示しましょう(これにはメールサーバーを設定する必要がありますが、これはこの記事の範囲外です。 )。

logrotateに関するメールを受け取りたい場合は、次のようにPostfixメールサーバーを設定できます。Postfixメールサーバーをインストールする

今回は/etc/logrotate.d/squid.confを使用して/var/log/squid/access.logのみをローテーションします。

/var/log/squid/access.log {
    monthly
    create 0644 root root
    rotate 5
    size=1M
    dateext
    dateformat -%d%m%Y
    notifempty
    mail [email protected]
}

下の画像でわかるように、このログはローテーションする必要はありませんでした。ただし、サイズ条件が満たされると(size u003d 1M)、ローテーションされたログはaccess.log-25082020に名前が変更され(ログが2020年8月25日にローテーションされた場合)、メインログ(access.log)が再作成されます。アクセス許可を0644に設定し、rootを所有者およびグループ所有者として作成します。

最後に、ログの数が最終的に6に達すると、最も古いログが[メールで保護された]にメールで送信されます。

ここで、回転が行われたときにカスタムコマンドを実行するとします。これを行うには、そのようなコマンドを含む行をpostrotateディレクティブとendscriptディレクティブの間に配置します。

たとえば、/ var/log/myservice内のログのいずれかがローテーションされたときにrootにメールを送信するとします。 /etc/logrotate.d/squid.confに赤の行を追加しましょう:

/var/log/myservice/* {
	monthly
	create 0644 root root
	rotate 5
	size=1M
    	postrotate
   		echo "A rotation just took place." | mail root
    	endscript
}

最後に、重要なことですが、競合が発生した場合、 /etc/logrotate.d/*。conf にあるオプションがメイン構成ファイルのオプションを上書きすることに注意してください。

ログローテーションとクロン

デフォルトでは、logrotateをインストールすると、logrotateという名前の/etc/cron.daily内にcrontabファイルが作成されます。このディレクトリ内の他のcrontabファイルの場合と同様に、anacronがインストールされていない場合は、毎日午前6時25分から実行されます。

それ以外の場合、実行は午前7時35分頃に開始されます。確認するには、/ etc/crontabまたは/ etc/anacrontabのいずれかにcron.dailyを含む行を監視します。

概要

複数のログを生成するシステムでは、logrotateを使用してそのようなファイルの管理を大幅に簡素化できます。この記事で説明したように、定期的に、またはファイルが指定されたサイズに達すると、ログが自動的にローテーション、圧縮、削除、およびメール送信されます。

cronジョブとして実行するように設定されていることを確認してください。logrotateを使用すると、作業がはるかに簡単になります。詳細については、manページを参照してください。

この記事について質問や提案がありますか?下記のコメントフォームからお気軽にご連絡ください。