Linux 上のほとんどのサービスはログ ファイルを生成し、通常は
/var/log/
に保存されます。これらは単純なテキスト ファイルですが、サーバーの容量が不足してしまうほど、非常に大きくなる可能性があります。
Logrotate は何をしますか?
Logrotate はログ ファイルの管理に役立ち、ログ ファイルが蓄積するのを防ぎます。現在のログ ファイルを自動的にアーカイブし、新しい空のログ ファイルを作成し、数回ローテーションした後、本当に古いアーカイブを削除します。デフォルトの時間が非常に長く設定されている可能性があるため (nginx のデフォルトは 1 年間のログ)、構成ファイルを編集しないと問題が発生する可能性があります。
ファイルのサイズはサービスによって異なるため、それに応じて logrotate を構成する必要があります。各サービスがログで占有しているスペースの量を確認したい場合は、
du
コマンドを使用できます。
du -h /var/log/ |ソート -hr
ほぼすべてのログ ファイルは
/var/log/
にあるため、
du
すべてのログ ファイルを合計し、それらを適切なリストに表示します (「人間が読める」ように
sort -hr
を使用)。
これはディレクトリのみを表示するため、
ls -sh
を使用して個々のファイルのサイズを確認する必要があります。
通常、Web サーバー (apache2、nginx など) や大量のインタラクションを受けるその他のアプリなどでは、大量のログ ファイルが生成されます。正確なサイズは、実際にディスクに記録するデータの量によって決まると考えられます。
Logrotate のインストール (まだお持ちでない場合)
デフォルトでは、logrotate は多くのディストリビューションにデフォルトでインストールされており、大量のログ ファイルを生成するサービス (nginx、apache など) には通常、事前に構成された logrotate 構成があるため、おそらく logrotate をセットアップするために何もする必要はありません。
logrotate がインストールされているかどうかは、次のコマンドで確認できます。
どの対数回転
インストールされていない場合は、ディストリビューションのパッケージ マネージャーからインストールします。 Ubuntu などの Debian ベースのシステムの場合、次のようになります。
sudo apt-get install logrotate
Logrotate はデフォルトのグローバル構成を自動的にインストールしますが、Web サーバーをインストールした後にそれをインストールした場合、そのサービスのデフォルト構成が生成されない場合は Web サーバーを再インストールする必要がある場合があります。
Logrotate の仕組み
logrotate は nginx や apache2 などの一般的なサービス用に事前構成されていますが、構成を手動でセットアップするか、デフォルトの構成を編集することもできます。
logrotate のグローバル設定は
/etc/logrotate.conf
に保存されますが、その多くは
/etc/logrotate.d/
ディレクトリに保存されているアプリごとの設定ファイルで上書きします。
/etc/logrotate.d/nginx
にある nginx のデフォルト設定を見てみましょう。これは、logrotate に新しいアプリを追加するためのテンプレートとして使用できます。
/var/log/nginx/*.log {
毎週
行方不明
回転 52
圧縮する
遅延圧縮
通知が来ない
0640 www-data adm を作成します
共有スクリプト
事前回転
if [ -d /etc/logrotate.d/httpd-prerotate ];それから
実行パーツ /etc/logrotate.d/httpd-prerotate;
フィ
末尾のスクリプト
後回転
invoke-rc.d nginx 回転 >/dev/null 2>&1
末尾のスクリプト
}
最初の行はブロックを開始し、logrotate にどのファイルを探すかを指示します。ワイルドカード
*.log
、nginx ログ フォルダー内の
.log
拡張子で終わるすべてのファイルと一致します。ここで複数のディレクトリを指定して、それらを同じ構成に含めることもできます。
Weekly は
ログを週に 1 回ローテーションします。サイズに基づいてファイルを回転したい場合は、代わりに
size 25M
使用して、特定の制限 (この例では 25 メガバイト) に達したら回転できます。
missingok は 、logrotate 以外によってログ ファイルが削除された場合に、logrotate がエラーをスローするのを防ぎます。
ローテート 52 は
52 個の異なるログ ファイルを保持します。この場合、週に 1 回ローテーションされるため、logrotate は古いログ ファイルを削除する前に丸 1 年分のログ ファイルを保持します。これを
rotate 4
に変更して、1 か月分のログ ファイルのみを保持することができます。
compress は 、古いログ ファイルを圧縮してスペースを節約します。これにより、一部のアプリが logrotate の動作中にログ ファイルへの書き込みを続けるという問題が発生するため、 Delaycompress フラグを追加して、圧縮する前に 1 つの古いログ ファイルのバッファを残すことができます。
notifempty は
、新しいログ ファイルが書き込まれる場合にのみ logrotate が実行されていることを確認するためのもう 1 つのチェック フラグです。
作成
フラグは、特定のアクセス許可を持つこれらの新しいログ ファイルを作成します。構文は
create [mode] [owner] [group]
です。
これらが現在のログ ファイルの構成と一致していることを確認する必要があります。これは
ls -la
で実行できます。
モードを octal に変換する
必要があるので、
-rw-r-----
0640
になることに注意してください。ここでの nginx の所有者は
www-data
、グループは
adm
です。
sharedscripts は
、
prerotate
フックと
postrotate
フックが、ローテーションされるログ ファイルごとに 1 回ではなく、ローテーションごとに 1 回だけ実行されることを指定します。これらのフックは、回転の前後に呼び出すことができるスクリプトです。デフォルトでは、これらはログ ファイルを切り替えるために nginx を構成するいくつかのスクリプトを実行します。構成しているサービスが新しいログ ファイルをホットロードできない場合は、これらのフックでサービスを停止して再起動する必要があります。ただし、フックはサービスと対話する必要はありません。たとえば、ログ ファイルが削除される前に、prerotate フックを使用して、
s3cmd
を使用して
ログ ファイルを AWS S3 にバックアップ
できます。
Logrotate 自体が実行を管理するため、起動時のサービスの開始や
cron
ジョブの構成について心配する必要はありません。各アプリの構成ファイルを
/etc/logrotate.d/
に配置するだけで、ログについて心配する必要はなくなります。





