Ubuntu16.04でLogrotateを使用してログファイルを管理する方法
序章
Logrotateは、ログファイルの自動ローテーションと圧縮を管理するシステムユーティリティです。 ログファイルがローテーション、圧縮、および定期的に整理されていない場合、最終的にはシステムで使用可能なすべてのディスク領域を消費する可能性があります。
LogrotateはデフォルトでUbuntu16.04にインストールされ、インストールされているすべてのパッケージのログローテーションのニーズを処理するように設定されています。 rsyslog
、デフォルトのシステムログプロセッサ。
この記事では、デフォルトのLogrotate構成について説明し、架空のカスタムアプリケーションのログローテーションを構成します。
前提条件
このチュートリアルでは、 Ubuntu 16.04 を使用したサーバーの初期設定で説明されているように、root以外のsudoが有効なユーザーがいるUbuntu16.04サーバーがあることを前提としています。
Logrotateは他の多くのLinuxディストリビューションでも利用できますが、デフォルトの構成はまったく異なる場合があります。 LogrotateのバージョンがUbuntu16.04と類似している限り、このチュートリアルの他のセクションは引き続き適用されます。 手順1に従って、Logrotateのバージョンを確認します。
sudo対応ユーザーとしてサーバーにログインして開始します。
Logrotateバージョンの確認
Ubuntu以外のサーバーを使用している場合は、最初にバージョン情報を要求してLogrotateがインストールされていることを確認してください。
- logrotate --version
Outputlogrotate 3.8.7
Logrotateがインストールされていない場合、エラーが発生します。 Linuxディストリビューションのパッケージマネージャーを使用してソフトウェアをインストールしてください。
Logrotateがインストールされているが、バージョン番号が大幅に異なる場合は、このチュートリアルで説明されている構成の一部に問題がある可能性があります。 Logrotateの特定のバージョンについては、ドキュメントを参照してください。 man
ページ:
- man logrotate
次に、UbuntuでのLogrotateのデフォルトの構成構造を見ていきます。
Logrotate構成の調査
Logrotateの構成情報は、通常、Ubuntuの2つの場所にあります。
/etc/logrotate.conf
:このファイルにはいくつかのデフォルト設定が含まれており、システムパッケージが所有していないいくつかのログのローテーションを設定します。 また、include
内の任意のファイルから構成をプルするステートメント/etc/logrotate.d
ディレクトリ。/etc/logrotate.d/
:これは、ログローテーションの支援が必要なインストール済みパッケージがLogrotate構成を配置する場所です。 標準インストールでは、次のような基本的なシステムツール用のファイルがすでにここにあるはずです。apt
,dpkg
,rsyslog
等々。
デフォルトでは、 logrotate.conf
毎週のログローテーションを構成します(weekly
)、rootユーザーとsyslogグループが所有するログファイル(su root syslog
)、4つのログファイルが保持されます(rotate 4
)、および現在のログファイルがローテーションされた後に作成される新しい空のログファイル(create
).
パッケージのLogrotate構成ファイルを見てみましょう。 /etc/logrotate.d
. cat
のファイル apt
パッケージユーティリティ:
- cat /etc/logrotate.d/apt
Output/var/log/apt/term.log {
rotate 12
monthly
compress
missingok
notifempty
}
/var/log/apt/history.log {
rotate 12
monthly
compress
missingok
notifempty
}
このファイルには、2つの異なるログファイルの構成ブロックが含まれています。 /var/log/apt/
ディレクトリ: term.log
と history.log
. どちらも同じオプションがあります。 これらの構成ブロックで設定されていないオプションは、デフォルト値またはで設定されているオプションを継承します /etc/logrotate.conf
. に設定されたオプション apt
ログは次のとおりです。
rotate 12
:12個の古いログファイルを保持します。monthly
:月に1回ローテーションします。compress
:回転したファイルを圧縮します。 これは使用しますgzip
デフォルトでは、ファイルの末尾は.gz
. 圧縮コマンドは、compresscmd
オプション。missingok
:ログファイルが欠落している場合は、エラーメッセージを書き込まないでください。notifempty
:ログファイルが空の場合はローテーションしないでください。
利用可能な構成オプションは他にもたくさんあります。 あなたはタイプすることによってそれらのすべてについて読むことができます man logrotate
コマンドラインでLogrotateのマニュアルページを表示します。
次に、架空のサービスのログを処理するための構成ファイルを設定します。
構成例の設定
事前にパッケージ化および事前構成されたシステムサービス以外のアプリケーションのログファイルを管理するには、次の2つのオプションがあります。
- 新しいLogrotate構成ファイルを作成し、
/etc/logrotate.d/
. これは、他のすべての標準Logrotateジョブとともに、rootユーザーとして毎日実行されます。 - 新しい構成ファイルを作成し、UbuntuのデフォルトのLogrotateセットアップの外で実行します。 これは、Logrotateを root 以外のユーザーとして実行する必要がある場合、またはログを毎日より頻繁にローテーションする場合にのみ本当に必要です(
hourly
の構成/etc/logrotate.d/
システムのLogrotateセットアップは1日1回しか実行されないため、効果がありません)。
いくつかのセットアップ例を使用して、これら2つのオプションを見ていきましょう。
に構成を追加する /etc/logrotate.d/
を置く架空のWebサーバーのログローテーションを構成したい access.log
と error.log
の中へ /var/log/example-app/
. それはとして実行されます www-data
ユーザーとグループ。
にいくつかの構成を追加するには /etc/logrotate.d/
、最初にそこで新しいファイルを開きます。
- sudo nano /etc/logrotate.d/example-app
これらのログを処理できる設定ファイルの例を次に示します。
/var/log/example-app/*.log {
daily
missingok
rotate 14
compress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload example-app
endscript
}
このファイルの新しい構成ディレクティブの一部は次のとおりです。
create 0640 www-data www-data
:これにより、ローテーション後に、指定された権限で新しい空のログファイルが作成されます(0640
)、 オーナー (www-data
)、およびグループ(またwww-data
).sharedscripts
:このフラグは、構成に追加されたスクリプトが、ローテーションされたファイルごとではなく、実行ごとに1回だけ実行されることを意味します。 この構成は、の2つのログファイルと一致するため、example-app
ディレクトリ、で指定されたスクリプトpostrotate
このオプションがないと2回実行されます。postrotate
にendscript
:このブロックには、ログファイルがローテーションされた後に実行するスクリプトが含まれています。 この場合、サンプルアプリをリロードしています。 これは、アプリケーションを新しく作成されたログファイルに切り替えるために必要になる場合があります。 ご了承くださいpostrotate
ログが圧縮される前に実行されます。 圧縮には長い時間がかかる可能性があり、ソフトウェアはすぐに新しいログファイルに切り替える必要があります。 ログが圧縮された後にを実行する必要があるタスクの場合は、lastaction
代わりにブロックします。
ニーズに合わせて構成をカスタマイズした後に保存します /etc/logrotate.d
、ドライランを実行してテストできます。
- sudo logrotate /etc/logrotate.conf --debug
これは logrotate
、それを標準構成ファイルにポイントし、デバッグモードをオンにします。
Logrotateが処理しているログファイルと、それらに対して何が行われたかについての情報が出力されます。 すべてがうまくいけば、完了です。 標準のLogrotateジョブは1日1回実行され、新しい構成が含まれます。
次に、Ubuntuのデフォルト構成をまったく使用しないセットアップを試してみます。
独立したログローテーション構成の作成
この例では、ユーザー sammy として実行されているアプリがあり、ログが生成されます。 /home/sammy/logs/
. これらのログを1時間ごとにローテーションしたいので、これを外部に設定する必要があります。 /etc/logrotate.d
Ubuntuが提供する構造。
まず、ホームディレクトリに構成ファイルを作成します。 テキストエディタで開きます。
- nano /home/sammy/logrotate.conf
次に、次の構成で貼り付けます。
/home/sammy/logs/*.log {
hourly
missingok
rotate 24
compress
create
}
ファイルを保存して閉じます。 これらのオプションはすべて前の手順で確認しましたが、要約すると、この構成ではファイルが1時間ごとにローテーションされ、24個の古いログが圧縮および保持され、ローテーションされたログを置き換える新しいログファイルが作成されます。
アプリケーションに合わせて構成をカスタマイズする必要がありますが、これは良いスタートです。
それが機能することをテストするために、ログファイルを作成しましょう:
- cd ~
- mkdir logs
- touch logs/access.log
正しい場所に空のログファイルがあるので、実行してみましょう logrotate
指図。
ログはsammyが所有しているため、使用する必要はありません。 sudo
. ただし、doはstateファイルを指定する必要があります。 このファイルは何を記録します logrotate
前回実行したときに見たので、次に実行したときに何をすべきかがわかります。 これは、Ubuntu Logrotateセットアップを使用するときに処理されます(次の場所にあります)。 /var/lib/logrotate/status
)が、今は手動で行う必要があります。
この例では、Logrotateに状態ファイルをホームディレクトリに配置させます。 アクセス可能で便利な場所ならどこにでも行くことができます。
logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose
Outputreading config file /home/sammy/logrotate.conf
Handling 1 logs
rotating pattern: /home/sammy/logs/*.log hourly (24 rotations)
empty log files are rotated, old logs are removed
considering log /home/sammy/logs/access.log
log does not need rotating
--verbose
Logrotateが行っていることに関する詳細情報を出力します。 この場合、何も回転していないように見えます。 Logrotateがこのログファイルを見るのはこれが初めてです。これまでのところ、ファイルは0時間経過しているため、ローテーションしないでください。
状態ファイルを見ると、Logrotateが実行に関するいくつかの情報を記録していることがわかります。
- cat /home/sammy/logrotate-state
Outputlogrotate state -- version 2
"/home/sammy/logs/access.log" 2017-11-7-19:0:0
Logrotateは、見たログと、最後にローテーションを検討した日時を記録しました。 この同じコマンドを1時間後に実行すると、ログは期待どおりにローテーションされます。
Logrotateでログファイルをローテーションさせたい場合は、ログファイルをローテーションする必要があります。 --force
国旗:
- logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose --force
これはテスト時に役立ちます postrotate
およびその他のスクリプト。
最後に、Logrotateを1時間ごとに実行するためのcronジョブを設定する必要があります。 ユーザーのcrontabを開きます。
- crontab -e
これにより、テキストファイルが開きます。 予想される基本的な構文を説明するコメントがファイルにすでに含まれている場合があります。 ファイルの最後にある新しい空白行にカーソルを移動し、以下を追加します。
crontab14 * * * * /usr/sbin/logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state
このタスクは、毎日、毎時14分に実行されます。 基本的に同じように動作します logrotate
以前に実行したコマンドですが、拡張しました logrotate
そのフルパスに /usr/sbin/logrotate
安全のために。 cronジョブを作成するときは、できるだけ明示的にすることをお勧めします。
ファイルを保存して終了します。 これによりcrontabがインストールされ、タスクは指定されたスケジュールで実行されます。
約1時間後にログディレクトリに再度アクセスすると、ローテーションおよび圧縮されたログファイルが見つかります。 access.log.1.gz
(また .2.gz
Logrotateを実行した場合 --force
国旗)。
結論
このチュートリアルでは、Logrotateのバージョンを確認し、デフォルトのUbuntu Logrotate構成を調べ、2つの異なるタイプのカスタム構成をセットアップしました。 Logrotateで使用できるコマンドラインと構成オプションの詳細については、次のコマンドを実行してマニュアルページを読むことができます。 man logrotate
あなたのターミナルで。