Linuxオペレーティングシステムと実行中のアプリケーションは、多くの場合、ファイルへのログを生成します。これらのファイルは、多くの場合、/var/logに保存されます。 ディレクトリまたはアプリで指定されたその他のファイル。これらのログファイルがローテーション、圧縮、および定期的に整理されていない場合、最終的には使用可能なすべてのディスクスペースを消費し、サーバーがフリーズします。
このガイドでは、logrotateがどのように機能するかを見てから、カスタムアプリのlogrotationを構成する方法の例を見ていきます。
前提条件
このガイドに従うには、次のものが必要です。
- Ubuntu、Debian、Centos、Rhel、RockyLinuxなどの最新のLinuxディストリビューション
- サーバーまたはsudo権限を持つユーザーへのrootアクセス
次のコマンドでログローテーションのバージョンを確認してください:
logrotate --version 私のシステムからの出力:
# logrotate --version
logrotate 3.8.6 Logrotateがインストールされていない場合、エラーが発生します。 Linuxディストリビューションのパッケージマネージャーを使用してソフトウェアをインストールしてください。
ログローテーション構成
logrotate構成は、このファイル/etc/logrotate.confにあります。 。これは、デフォルト設定が配置されている場所です。また、どのシステムパッケージも所有していないログのローテーション構成もいくつかあります。
この構成ファイルの最も重要な行は、include /etc/logrotate.dです。 。これにより、logrotateは、そのディレクトリに追加された構成もチェックするように指示されます。つまり、アプリケーションの場合、メインファイルにすべてを追加する必要はなく、個別の構成ファイルを作成して/etc/logrotate.dに追加できます。 ディレクトリ。ログローテーションの支援が必要なインストールするほとんどのパッケージは、ログローテーション構成ファイルもそのディレクトリに配置します。
これは、メインの/etc/logrotate.confのコンテンツです。 ファイル:
weekly
rotate 4
create
dateext
compress weeklyrootが所有するログファイルを使用して毎週のログローテーションを構成します ユーザーとsyslog グループrotate 44つのログファイルが保持されます(4週間分のバックログを保持します)create現在のログファイルがローテーションされた後に作成される新しい空のログファイル-
dateexローテーションされたファイルのサフィックスとして日付を使用する compressローテーションされたファイルを圧縮する
/etc/logrotate.d内の個々のファイルの場合 ディレクトリ、例として1つを見てみましょう:
cat /etc/logrotate.d/yum 出力:
/var/log/yum.log {
missingok
notifempty
maxsize 30k
yearly
create 0600 root root
}
これらの各構成は、/etc/logrotate.confのデフォルト構成を継承します。 ディレクトリ。
説明:
-
/var/log/yum.logこの最初の行は、構成ターゲットをどのファイルに保存するかを示しています -
missingokファイルが存在しない場合でも問題はなく、logrotateでエラーが発生したり、エラーがログに記録されたりすることはありません。 -
notifemptyログファイルが空の場合はローテーションしないでください -
maxsizeサイズが30kを超える場合は、回転させます yearly年に1回実行create 0600 root root新しいローテーションされたファイルをrootとして作成します :root権限あり0600
上記にリストされていない他のいくつかのオプション:
rotate 3030個のファイルを保持し、それらが超過したときに最も古いファイルを整理しますmonthly月に1回ローテーションcompressローテーションされたファイルを圧縮します。これはgzipを使用します デフォルトでは、ファイルは.gzで終わります。 。圧縮コマンドは、compresscmdを使用して変更できます オプション。
カスタムアプリログファイルのログローテーション
カスタムアプリケーションでログを生成してファイルに書き込む場合、そのファイルのローテーションの実行方法を構成するのがタスクです。
- rootアクセスがある場合は、設定ファイルを
/etc/logrotate.d/に配置するのが理想的です。 ディレクトリとそれは上記のように動作します - rootアクセスがない場合は、
logrotateを実行するようにcronを構成する必要があります。 定義した構成を渡すコマンド - ログを毎日より頻繁にローテーションする場合(システムのLogrotateセットアップは1日1回しか実行されないため、1時間ごとなど)
/etc/logrotate.d/の構成
/var/log/our-app/app.logへのアプリ生成ログがあるとします。 centosとして実行されます 。 logrotateconfogファイル/etc/logrotate/ourapp.confを作成しましょう いくつかの設定例:
sudo vim /etc/logrotate.d/ourapp.conf 構成:
/var/log/our-app/*.log {
daily
missingok
rotate 30
compress
notifempty
create 0640 centos centos
sharedscripts
postrotate
systemctl reload our-app
endscript
} いくつかの新しい指令:
create 0640 centos centos指定された権限でローテーション後に空のログファイルを作成します0640指定されたユーザーとグループのcentossharedscriptsつまり、構成に追加されたスクリプトは、ローテーションされたファイルごとではなく、実行ごとに1回だけ実行されます。ディレクティブ/var/log/our-app/*.logの場合postrotateで指定されたスクリプトである複数のログファイルに一致します このオプションがないと2回実行されます-
postrotateendscriptへ ブロックには、ログファイルがローテーションされた後に実行するスクリプトが含まれています。この場合、アプリをリロードします。これは、アプリケーションを新しく作成されたログファイルに切り替えるために必要になる場合があります。postrotateに注意してください ログが圧縮される前に実行されます。圧縮には長い時間がかかる可能性があり、ソフトウェアはすぐに新しいログファイルに切り替える必要があります。 後に実行する必要があるタスクの場合 ログは圧縮されています。lastactionを使用してください 代わりにブロックします。
上記の設定をテストするには、次のコマンドを使用します:
sudo logrotate /etc/logrotate.conf --debug 出力は、Logrotateが処理しているログファイルと、それらに対して何をしたかについてです。標準のLogrotateジョブは1日1回実行され、新しい構成が含まれます。
出力のサンプルデータ
...
rotating pattern: /var/log/our-app/*.log after 1 days (30 rotations)
empty log files are not rotated, old logs are removed
No logs found. Rotation not needed.
... logrotateの使用 カスタム構成のコマンド
システムへのrootアクセス権がなく、独自のカスタムファイルをログローテーションする場合は、このセクションでその方法を説明します。
アプリをour-appとしましょう ログファイルを生成し、ホームディレクトリ内のカスタムパスに保存しています。 ~/apps/our-app/logs/ 。ログが頻繁に生成される場合は、ログをhourlyローテーションする必要があります。 。しかし、logrotateは1時間ごとに機能しませんか?
まず、logrotate構成ファイルを作成しましょう。このパス~/apps/our-app/conf/lorotate.confのappconfディレクトリ内にファイルを配置します 次の構成で:
ファイルを編集します:
vim ~/apps/our-app/conf/lorotate.conf 次の構成の場合:
/home/centos/apps/our-app/logs/*.log {
rotate 30
hourly
compress
sharedscripts
delaycompress
missingok
notifempty
dateext
dateformat -%Y-%m-%d-%s
copytruncate
}
上記の設定は、ディレクトリ/home/centos/apps/our-app/logs/*.log内のファイルをローテーションします 1時間ごとに、30個の古いログのみを圧縮して保持します。
-
copytruncateログファイルの内容を新しいファイルにコピーしてから、ログファイルを切り捨てます。 -
dateformatローテーションされたファイルの形式を指定します -
dateextローテーションされたファイルの日付拡張子を含めるようにlogrotateに指示します。
テストするには:
mkdir -p ~/apps/our-app/{logs,conf}
touch ~/apps/our-app/logs/app.log
ファイルが配置されたので、logrotateを使用できます。 それを回転させます。 stateを指定するだけです。 ファイル。 state ファイルには、logrotateの内容が記録されます それが最後に実行されたときに見たので、それは何をすべきかを知っています。システムインストールの設定では、すでに/var/lib/logrotate/statusで処理されています。 ただし、この場合は指定する必要があります。
これにはホームディレクトリを使用できます:
logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose --verboseLogrotateが行っていることに関する詳細情報を印刷します。
次のような出力が表示されます:
$ logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose
reading config file /home/centos/apps/our-app/config/logrotate.conf
Allocating hash table for state file, size 15360 B
Handling 1 logs
rotating pattern: /home/centos/apps/our-app/logs/*.log hourly (30 rotations)
empty log files are not rotated, old logs are removed
considering log /home/centos/apps/our-app/logs/app.log
log does not need rotating (log has been already rotated)set default create context ログローテーションステータスファイルにいくつかの情報が記録されました:
$ cat ~/logrotate-status
logrotate state -- version 2
"/home/centos/apps/our-app/logs/app.log" 2021-9-4-6:0:0 Logrotateは、見たログと、最後にローテーションを検討した日時を記録しました。この同じコマンドを1時間後に実行すると、ログは期待どおりにローテーションされます。
Logrotateにログファイルを強制的にローテーションさせたい場合は、--forceを使用します。 フラグ:
logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose --force
これは、postrotateをテストするときに役立ちます およびその他のスクリプト。
次に、上記のコマンドを自動的に実行します。これは、cronを使用して実現できます。 crontab コマンドが便利です。
次のコマンドを使用できるようにcronを編集するには:
crontab -e これにより、テキストファイルが開きます。予想される基本的な構文を説明するコメントがファイルにすでに含まれている場合があります。ファイルの最後にある新しい空白行にカーソルを移動し、以下を追加します。
3 * * * * /usr/sbin/logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status
上記は、毎時3分ごとにlogrotateコマンドを実行します。フルパス/usr/sbin/logrotateを使用します そのため、Commandnotfoundエラーは発生しません。
ファイルを保存して終了します。これによりcrontabがインストールされ、タスクは指定されたスケジュールで実行されます。
結論
このガイドではlogrotateについて説明しました。バージョンを確認し、デフォルトの構成を確認して、独自のカスタムセットアップをセットアップすることができました。 Logrotateで使用できるコマンドラインと構成オプションの詳細については、man logrotateを実行してマニュアルページを読むことができます。 ターミナルで:
man logrotate