Linuxシステムで最も興味深い(そしておそらく最も重要な)ディレクトリの1つは、/var/log
です。 。 Filesystem Hierarchy Standardによると、システムで実行されているほとんどのサービスのアクティビティは、このディレクトリまたはそのサブディレクトリの1つにあるファイルに書き込まれます。
このようなファイルは、ログと呼ばれます そして、システムがどのように動作しているか(そして過去にどのように動作したか)を調べるための鍵となります。 ログ また、管理者やエンジニアがトラブルシューティング中に調べる最初の情報源でもあります。
/var/log
の内容を見ると CentOS / RHEL / Fedora およびDebian/ Ubuntu (さまざまな場合)次のログファイルとサブディレクトリが表示されます。
システムで実行されているサービスとそれらが実行されている時間によって、結果が多少異なる場合があることに注意してください。
RHEL/CentOSおよびFedoraの場合
# ls /var/log
DebianおよびUbuntuの場合
# ls /var/log
どちらの場合も、一部のログ名が「ログ」で期待どおりに終了していることがわかります。 、他の人は日付を使用して名前が変更されます(たとえば、 maillog-20160822 CentOS )または圧縮( auth.log.2.gz を検討してください) およびmysql.log.1.gz Debian 。
これは、選択したディストリビューションに基づくデフォルトの動作ではありませんが、この記事で説明するように、構成ファイルのディレクティブを使用して自由に変更できます。
ログが永久に保持されると、最終的には / var / logのファイルシステムがいっぱいになります。 常駐します。これを防ぐために、システム管理者は 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
このアプローチは、物事を整理し、 Debia を使用するのに役立つため、これに固執します。 次の例のnボックス。
LinuxでLogrotateを構成する
logrotateは非常に用途の広いツールであるため、ログをローテーションするタイミングと方法、およびその直後に何を実行するかを構成するのに役立つ多くのディレクティブを提供します。
次のコンテンツを/etc/logrotate.d/apache2.confに挿入しましょう (ほとんどの場合、そのファイルを作成する必要があることに注意してください)、各行を調べてその目的を示します:
apache2.conf/var/log/apache2/* { weekly rotate 3 size 10M compress delaycompress }
最初の行は、ブロック内のディレクティブが / var / log / apache2内のすべてのログに適用されることを示しています :
- 毎週 これは、ツールが毎週ログをローテーションしようとすることを意味します。その他の可能な値は、日次および月次です。
- 回転3 3つのローテーションされたログのみを保持する必要があることを示します。したがって、最も古いファイルは4回目の実行時に削除されます。
- size =10M 回転の最小サイズを10Mに設定します。つまり、各ログは10MBに達するまでローテーションされません。
- 圧縮 およびdelaycompress 最新のログを除いて、ローテーションされたすべてのログを圧縮する必要があることを通知するために使用されます。
ドライランを実行して、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のみを回転させる :
squid.conf/var/log/squid/access.log { monthly create 0644 root root rotate 5 size=1M dateext dateformat -%d%m%Y notifempty mail [email protected] }
下の画像でわかるように、このログはローテーションする必要はありませんでした。ただし、サイズ条件が満たされた場合(size =1M )、ローテーションされたログの名前は access.log-25082020に変更されます (ログが2020年8月25日にローテーションされた場合 )およびメインログ( access.log )アクセス許可を 0644に設定して再作成されます そしてルートで 所有者およびグループ所有者として。
最後に、ログの数が最終的に 6に達したとき 、最も古いログが[メール保護]にメールで送信されます 。
ここで、回転が行われるときにカスタムコマンドを実行するとします。これを行うには、postrotateディレクティブとendscriptディレクティブの間にそのようなコマンドを含む行を配置します。
たとえば、 / var / log / myservice 内のログのいずれかが発生したときに、rootにメールを送信するとします。 回転します。 /etc/logrotate.d/squid.confに赤い線を追加しましょう :
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
にオプションが存在することに注意することが重要です。 競合が発生した場合は、メインの構成ファイルにあるものをオーバーライドします。
ログローテーションとcron
デフォルトでは、logrotateをインストールすると、 /etc/cron.daily内にcrontabファイルが作成されます。 ログローテーションという名前 。このディレクトリ内の他のcrontabファイルの場合と同様に、毎日午前6時25分から実行されます。 anacronがインストールされていない場合。
おすすめの記事 :Linuxでの11のcronスケジューリングタスクの例それ以外の場合、実行は午前7時35分頃に開始されます。 。確認するには、 cron.dailyを含む行に注意してください / etc / crontabのいずれかで または/etc / anacrontab 。
概要
複数のログを生成するシステムでは、logrotateを使用してそのようなファイルの管理を大幅に簡素化できます。この記事で説明したように、定期的に、またはファイルが特定のサイズに達すると、ログが自動的にローテーション、圧縮、削除、メール送信されます。
cronジョブとして実行するように設定されていることを確認してください。logrotateを使用すると、作業がはるかに簡単になります。詳細については、manページを参照してください。
この記事について質問や提案がありますか?以下のコメントフォームを使用して、お気軽にお知らせください。