ウェブサイト検索

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


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

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

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

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

RHEL/CentOS および Fedora の場合

ls /var/log

Debian と Ubuntu の場合

ls /var/log

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

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

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

簡単に言うと、logrotate は、条件が満たされたときにメイン ログの名前を変更または圧縮し (これについては後ほど詳しく説明します)、次のイベントが空のファイルに記録されるようにします。

さらに、「古い」 ログ ファイルが削除され、最新のログ ファイルが保持されます。もちろん、「古い」 が何を意味するのか、そして 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 内のすべてのログに適用されることを示しています。

  • 毎週 は、ツールが毎週ログをローテーションしようとすることを意味します。他の可能な値は日次と月次です。
  • rotate 3 は、回転されたログを 3 つだけ保持する必要があることを示します。したがって、最も古いファイルは 4 回目の実行時に削除されます。
  • size=10M は、回転が行われる最小サイズを 10M に設定します。つまり、各ログは 10MB に達するまでローテーションされません。
  • 圧縮遅延圧縮は、最新のものを除く、ローテーションされたすべてのログを圧縮する必要があることを指示するために使用されます。

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

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

結果を以下に示します。

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

ログが空の場合はnotifempty を使用してローテーションが行われないようにすることもできることに注意してください。さらに、参照用にローテーションされたログをシステム管理者 ([email ) にメールで送信するように 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 
}

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

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

ここで、回転が行われるときにカスタム コマンドを実行するとします。これを行うには、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 と Cron

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

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

まとめ

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

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

この記事に関してご質問やご提案はありますか?以下のコメントフォームを使用してお気軽にお知らせください。