Linuxシステムおよびほとんどすべてのシステムでは、エラーの調査とトラブルシューティングに関しては、ログファイルが非常に重要です。これらは、障害が発生する前にさまざまなシステムサービスで何がうまくいかなかったかについての重要な手がかりを提供します。
Apache WebサーバーやMySQLデータベースサーバーなどのLinuxシステムにインストールされているサービスはすべて、ログファイルを生成します。ログファイルは通常、 / var / logに保存されます。 ディレクトリ。このディレクトリの内容を確認すると、以下のような内容が表示されます。
時間の経過とともに、追加情報がログに記録されると、ログファイルのサイズが大きくなり、ハードドライブの容量が増えます。気付かないうちに、ログファイルのサイズが膨らみ、ハードドライブの空き容量が増えてしまいます。注意しないと、ディスク容量が不足する可能性があります。
そのことを念頭に置いて、ログファイルを管理可能なサイズに保ち、貴重なディスク領域を占有する古いログエントリを削除することが賢明になります。そして、これがログローテーションの出番です。
ログローテーションとは何ですか?
ログローテーション は、新しいログファイルを作成し、古いログファイルをアーカイブおよび削除してディスク領域を節約するプロセスです。プロセスは現在のログファイルの名前を変更します。たとえば、 apport.log apport.log.1になります そして新しいapport.log ログファイルは、新しいログエントリをログに記録するために作成されます。古いログファイルは通常圧縮されており、 apport.log.2.gzとして表示されます。 、 apport.log.3.gz 、 apport.log.4.gz 、など。
ログローテーションプロセスは、 logrotateと呼ばれるユーティリティを使用して容易になります 。これは、ログファイルのローテーションと古いファイルのアーカイブと削除を容易にしてディスクスペースを解放するためのツールです。要約すると、logrotateは次のことを実現します。
- 古いログファイルをローテーションした後の新しいログファイルの作成。
- 古いログファイルのアーカイブ。
- スペースを節約するためにローテーションされた古いログファイルの削除。
ログローテーションは通常、ログファイルのサイズが大きくなり、特定の制限を超えるとアクティブになります。
logrotateユーティリティの仕組み
logrotateユーティリティの動作を調べる前に、logrotateがシステムにインストールされていることを確認してください。これを行うには、次のコマンドを発行します:
Debian / Ubuntuシステムの場合:
$ sudo apt-get install logrotate -y
CentOS / RHEL / Fedoraシステムの場合:
$ sudo yum install logrotate -y or $ sudo dnf install logrotate -y
以下のコマンドを実行して、ログローテーションのバージョンを確認します。
linuxtech[email protected]:~$ logrotate --version logrotate 3.14.0 Default mail command: /usr/bin/mail Default compress command: /bin/gzip Default uncompress command: /bin/gunzip Default compress extension: .gz Default state file path: /var/lib/logrotate/status ACL support: yes SELinux support: yes [email protected]:~$
出力から、logrotateバージョン3.14.0があることがはっきりとわかります。デフォルトでは、logrotateは最新のLinuxディストリビューションにプリインストールされているため、インストールする必要はありません。
構成ファイルのログローテーション
Logrotateは、cronジョブとして毎日実行され、さまざまなログファイルを調べ、それらをローテーションし、構成ファイルで定義されているように古いログファイルを削除します。細心の注意を払う必要がある2つの主要な構成ソースがあります:
/etc/logrotate.conf –これはlogrotateツールのメイン構成ファイルです。デフォルト設定が含まれており、システム以外のパッケージログのログローテーションが容易になります。特に、「インクルード」を使用します ‘ /etc/logrotate.dにある構成をプルするためのディレクティブ ‘ディレクトリ。構成ファイルを見てみましょう。
$ cat /etc/logrotate.conf
示されている構成から、/ etc/logrotate.confファイルはログファイルを毎週ローテーションします 3行目に示されている基準 。
- 7行目 rootユーザーとadmグループがログファイルを所有していることを示します。
- 10行目 は、4週間分のログファイルのみがバックアップされ、その後、古いファイルがパージまたは削除されて、ディスク容量が増えることを示しています。
- 13行目 現在のログファイルのローテーション後に新しいログファイルを作成するように指示します。
- 22行目のincludeステートメント /etc/logrotate.dディレクトリにリストされているアプリケーションファイルの構成をプルします。
/etc/logrotate.d –これは、ログファイルにログローテーションが必要なインストール済みパッケージのlogrotate構成を含むディレクトリです。通常、apt&dpkg(Debianシステムの場合)、rsyslog、ufw、cups-daemonなどのシステムツールの構成ファイルも見つかる可能性があります。見つけたものは次のとおりです:
[email protected]:~$ ls -l /etc/logrotate.d/ total 60 -rw-r--r-- 1 root root 120 Sep 5 2019 alternatives -rw-r--r-- 1 root root 126 Dec 4 20:25 apport -rw-r--r-- 1 root root 173 Apr 9 11:21 apt -rw-r--r-- 1 root root 91 Apr 1 10:49 bootlog -rw-r--r-- 1 root root 130 Jan 21 2019 btmp -rw-r--r-- 1 root root 181 Feb 17 08:19 cups-daemon -rw-r--r-- 1 root root 112 Sep 5 2019 dpkg -rw-r--r-- 1 root root 329 Feb 4 2019 nginx -rw-r--r-- 1 root root 94 Feb 8 2019 ppp -rw-r--r-- 1 root root 501 Mar 7 2019 rsyslog -rw-r--r-- 1 root root 677 Nov 29 02:08 speech-dispatcher -rw-r--r-- 1 root root 119 Mar 30 21:49 ubuntu-advantage-tools -rw-r--r-- 1 root root 178 Jan 21 22:16 ufw -rw-r--r-- 1 root root 235 Apr 13 23:37 unattended-upgrades -rw-r--r-- 1 root root 145 Feb 19 2018 wtmp [email protected]:~$
dpkgパッケージマネージャーツールの構成ファイルを見てみましょう。
$ cat -n /etc/logrotate.d/dpkg
- 毎月 :これは、月に1回ログファイルのローテーションを指示します
- 12回転 :12個の古いログファイルがバックアップされます。
- 圧縮 :これは、ローテーションされたファイルが、.gzファイル拡張子を持つログファイルでデフォルトのgzip圧縮を使用して圧縮されることを意味します。
- 644ルートルートを作成 :ログローテーションが完了するとすぐに、rootのユーザーとグループの所有権を持つ644の8進ファイル権限で新しいログファイルを作成します。
- missingok :このディレクティブは、ログファイルが見つからない場合のエラーメッセージを抑制します。
- 通知なし :ログファイルが空の場合、これはファイルローテーションを無視します。
サンプルのlogrotate構成ファイルを作成します
linuxtechiユーザーとして実行されているアプリケーションがあり、 / home / linuxtechi / logsに保存されているログファイルを生成していると仮定します。 ディレクトリ。毎週ローテーションするようにログファイルを設定する必要があります。
ただし、最初に、次のようにホームディレクトリにlogrotate構成ファイルを作成します。
$ vim /home/linuxtechi/logrotate.conf
次に、表示されている構成を貼り付けます:
/home/linuxtechi/logs/*.log { weekly missingok rotate 14 compress create }
これをコンテキストに入れましょう:
ログファイルは毎週ローテーションされ、ログファイルのいずれかが欠落している場合はエラーメッセージが抑制されます。 14個のログファイルが1か月以内にバックアップされ、現在のログファイルのローテーション後に新しいログファイルが作成されます。
次に、アプリケーションのログファイルを含むログディレクトリを作成してから、app.logというログファイルを作成します。
[email protected]:~$ mkdir logs && cd logs [email protected]:~/logs$ touch app.log [email protected]:~/logs$ ls app.log [email protected]:~/logs$
次に、logrotateコマンドを実行して、ログエントリが作成されたかどうかを確認するために、ホームディレクトリにlogrotate状態ファイルを作成します。
$ logrotate /home/linuxtechi/logrotate.conf --state /home/linuxtechi/logrotate-state --verbose
次のような出力が得られます:
出力から、ローテーションが毎週発生し、ログファイルがわずか1時間経過しているという単純な理由で、ログファイルはローテーションされませんでした。
ログローテーションファイルを調べて、ログローテーションの実行に関して記録された情報があったかどうかを確認します。
[email protected]:~$ cat logrotate-state logrotate state -- version 2 "/home/linuxtechi/logs/app.log" 2020-5-24-17:0:0 [email protected]:~$
出力から、logrotateユーティリティが最後にログファイルをローテーション対象と見なしたときに確認応答し、タイムスタンプが出力されていることがわかります。
次に、 –force を使用して、logrotateにログファイルを強制的にローテーションさせます。これは、指定された時間間隔をまだ超えていないため、今のところそうではありません。 示されているようにフラグを立てます。
$ logrotate /home/linuxtechi/logrotate.conf --state /home/linuxtechi/logrotate-state --verbose --force
ログディレクトリに戻ると、図のようにローテーションおよび圧縮された追加のログファイルが表示されます。
[email protected]:~$ cd logs/ [email protected]:~/logs$ ls app.log app.log.1.gz [email protected]:~/logs$
サイズに基づいてログファイルを圧縮およびローテーションします
場合によっては、ログファイルが大きくなり、ローテーションの指定された時間間隔(日次、週次、月次)の前でもスペースが不足することがあります。
この問題を解決する1つの方法は、ファイルの最大サイズを指定することです。これを超えると、ログファイルのローテーションがトリガーされます。これを実現するには、 maxsizeを指定します ログローテーションファイルのオプション。
たとえば、ファイルサイズが40メガバイトを超えたときにローテーションをトリガーするには、次のオプションを含めます。
最大サイズ40M
/etc/logrotate.dフォルダーの下にアプリケーションのカスタムログローテーションファイルを作成するとします。
[email protected]:~$ cd /etc/logrotate.d/ [email protected]:/etc/logrotate.d$ sudo vi custom-app /home/linuxtechi/logs/app-access.log { daily missingok size 40M rotate 4 compress create }
ファイルを保存して閉じます
接尾辞M メガバイトを示します 、キロバイトの場合 kを使用する G サイズをギガバイトで示します 。
このステートメントは、40メガバイトを超えるログファイルは、ローテーションの時間間隔に関係なくローテーションされることを意味します。これは、1時間後にローテーションが予定されているログファイルの場合、しきい値の40MBを超えると、指定された間隔の前にローテーションされることを意味します。
いくつかのデータをカスタムアプリケーションのログファイルにダンプしてから、logrotateがログファイルをどのようにローテーションするかを見てみましょう。
[email protected]:~$ dd if=/dev/zero of=/home/linuxtechi/logs/app-access.log bs=1M count=25 25+0 records in 25+0 records out 26214400 bytes (26 MB, 25 MiB) copied, 0.0422015 s, 621 MB/s [email protected]:~$ du -sh /home/linuxtechi/logs/app-access.log 25M /home/linuxtechi/logs/app-access.log [email protected]:~$
「-d」を使用します logrotateコマンドの’オプションを使用して、ログファイルに対してlogrotateのドライランを実行するには、次のコマンドを実行します。
$ logrotate -d /etc/logrotate.d/custom-app
出力からわかるように、サイズが40MB以下であるため、logrotateはログファイルをローテーションしません。
それでは、ログファイルのサイズを40MB以上にしましょう。
[email protected]:~$ cd logs/ [email protected]:~/logs$ dd if=/dev/zero of=app-access.log bs=1M count=45 45+0 records in 45+0 records out 47185920 bytes (47 MB, 45 MiB) copied, 0.136979 s, 344 MB/s [email protected]:~/logs$ du -sh app-access.log 46M app-access.log [email protected]:~/logs$
ここで、「-d」オプションを指定してlogrotateコマンドをもう一度実行してみてください
上記の出力は、サイズが40MBを超えると、logroateがログファイルをローテーションすることを確認します。
サイズに基づいてログファイルのローテーションを強化することに加えて、cronジョブを使用してlogrotate構成ファイルが定期的に呼び出されるようにすることが賢明です。これは、サイズが急激に膨らみ、ディスク領域がいっぱいになるリスクがあるログファイルにとって特に重要です。
これを行うには2つの方法があります:
logrotateスクリプトを/etc/cron.dailyディレクトリから/etc/cron.hourlyの場所にコピーできます。これにより、ログローテーションが毎日ではなく1時間ごとに切り替わります。
もう1つの方法は、cronジョブを指定することです。 示されているように/etc/crontabファイル内
*/10 * * * * /etc/cron.daily/logrotate
これにより、10分ごとにローテーションがトリガーされます。
maxsizeディレクティブを使用して最大サイズを指定することに加えて、crontabを使用してlogrotateスクリプトを呼び出すと、ハードドライブがいっぱいになるのを防ぐために、ログファイルが適切なタイミングでローテーションされるようにするための完璧な組み合わせになります。
ログローテーションツールのその他のオプションについては、次のようにマニュアルページにアクセスしてください。
結論
このガイドでは、ログファイルの重要性、サイズが大きくなった場合に発生する可能性のある脅威、およびlogrotateツールがシステム上のログファイルのサイズの管理にどのように役立つかについて説明しました。また、logrotate構成で使用できるオプションのいくつかも確認しました。