前回の記事「logrotateユーティリティについて」では、logrotateの機能とその構成方法について説明しました。この記事では、この知識を1つ以上のカスタム仮想ホストのログローテーションソリューションの作成に適用します。また、ログローテーションのテストとトラブルシューティングのオプションについても説明します。
すべてを結び付ける:仮想ホストログ
アプリケーションでlogrotateを使用する方法を示すために、多くの人に役立つ例を次に示します。カスタム仮想ホストのログをローテーションします。この例では、 Apacheを使用しています ®、ただし、nNinx®などの他のWebサーバー用に微調整できます またはLighttpd® 、通常は回転後のスクリプトを変更するだけです。
まず、仮想ホストのログファイルをどう処理するかをlogrotateに指示する構成を保持するファイルを作成します。将来のパッケージアップグレードで構成が上書きされる可能性があるため、mainconfigファイルまたはWebサーバーの構成ファイルを編集しないでください。代わりに、次のコマンドを使用して独自のファイルを作成します。
/etc/logrotate.d/virtualhosts
この例では、すべての仮想ホストを1つのファイルにまとめていますが、他のホストよりもビジーなホストが1つある場合は、異なるドメインのニーズを処理するために個別の構成ファイルを作成することをお勧めします。この例では、すべてのベースをカバーするために、メイン構成ですでに設定されている可能性のあるいくつかの項目を指定しています。
domain1.comという2つの仮想ドメインがあるとします。 およびdomain2.com 、およびそれぞれのログファイルが / home / demo / public_html /(ドメイン名)/ logにあること 。構成ファイルは、logrotateにログファイルの場所を指示してから、それらの構成ブロックを開始する必要があります。
/home/demo/public_html/domain1.com/log/*log /home/demo/public_html/domain2.com/log/*log {
追加するログディレクトリまたはファイルが他にもある場合は、それらをそのリストに挿入します。
次に、logrotateが必要な数の古いログのみを保持するようにします。
rotate 14
この例では、14個のファイルを使用して2週間のログを保持していますが、ニーズに合わせてその数を調整できます。
次に、これらのログを毎日ローテーションするようにWebサーバーに指示します(これも、間隔を長くしたい場合は変更します):
daily
サイズ(オプション)
サイズ設定は、ログの最大サイズを指定します。ログがそのサイズに達すると、ログローテーションがトリガーされます。
size 50M
サイズ設定は、時間ベースの回転条件をオーバーライドするため、ここではオプションです。時間間隔と最大サイズの両方を指定できますが、指定した場合、logrotateは時間間隔の設定を無視します。
再アーカイブ時にこれらのログを圧縮するかどうかを指定します。この例では、delaycompress
を使用しています Apacheの正常な再起動を説明するコマンド。つまり、圧縮をオンにする必要もあります。
compress
delaycompress
複数の仮想ホストがある可能性があり、それは複数のログがローテーションすることを意味します。すべてのローテーションが完了した後にのみWebサーバーが再起動されるようにするには、次の行を追加します。
sharedscripts
ポストローテーションスクリプトを指定して、Webサーバーを再起動します。
postrotate
/usr/sbin/apachectl graceful > /dev/null
endscript
最後に、中括弧で構成ブロックを閉じます。
}
完全な構成ファイルは次のとおりです。
/home/demo/public_html/domain1.com/log/*log /home/demo/public_html/domain2.com/log/*log {
rotate 14
daily
compress
delaycompress
sharedscripts
postrotate
/usr/sbin/apachectl graceful > /dev/null
endscript
}
夜間のcronジョブの実行を監視するか、次のコマンドを使用してlogrotateを手動で実行することにより、スクリプトをテストします。
/usr/sbin/logrotate /etc/logrotate.conf
エラーが返ってこない場合は、問題ないはずです。ただし、確認したい場合は、次のテストのいくつかを実行できます。
logrotateに問題があると思われる場合、または配置した新しい構成が機能することを確認したい場合は、コマンドラインから実行するときにlogrotateに役立つフラグを渡すことができます。
詳細フラグ、-v
、logrotateに実行する各操作を指示します。これは、logrotateがログを期待どおりにローテーションしない理由を知りたい場合に役立ちます。
デバッグフラグ-d
、logrotateに、回転するログの動作を実行するように指示しますが、実際には それらを回転させます。本番サーバーで作業していて、新しい構成ファイルをテストしたいが、テストの実行時に実際のログローテーションを実行したくない場合に便利です。
デバッグは、構成ファイルが適切にフォーマットされていること、およびlogrotateがローテーションするログファイルを検出できることも確認します。ただし、ローテーションを実行しないため、ローテーション後のスクリプトなど、プロセスの一部をテストしません。
強制フラグ、-f
、logrotateが実行されると、通常はその時点でローテーションする必要があるかどうかに関係なく、すべてのログを強制的にローテーションします。 logrotateの構成を徹底的にテストする場合は、これが使用するフラグです。 logrotateは、構成に従ってログをローテーションし、古いログを削除することを忘れないでください。したがって、保持する必要のある最近のログを誤ってローテーションしないでください。
logrotateがログをローテーションする必要があると思われる場合にも役立ちますが、そうではありません。問題を強制すると、次のことを特定するのに役立ちます。
- 問題がlogrotateがログをローテーションする必要がないと考えている場合(フォースフラグを実行してログをローテーションした場合)
- 問題がlogrotateがログファイルに影響を与えないことである場合(実行してもログに何も起こらない場合)。
注: アーカイブされたログの名前に日付を追加するようにlogrotateを構成した場合、forceフラグを使用しても、logrotateは同じ日に新しいアーカイブを作成します。その場合、2番目のアーカイブに使用する必要のある名前はすでに使用されているため、ログローテーションを強制する前に、最新のアーカイブの名前を変更する必要がある場合があります。
テストフラグを非常に効果的に一緒に使用できます。 logrotateに、すべてを回転させた場合にどうなるかを教えてもらいますが、実際には 何でも回転します。3つすべてを組み合わせることができます:
/usr/sbin/logrotate -vdf /etc/logrotate.conf
このコマンドは、logrotateが実行することの長いリストを提供します。これには、どのログファイルをローテーションするか、そのプロセス中に何を実行するかなどが含まれます。
次に、ローテーション後に実行されるスクリプトを含め、すべてのローテーション構成全体をテストする場合は、デバッグフラグなしでlogrotateを実行できます。
/usr/sbin/logrotate -vf /etc/logrotate.conf
Logrotateは、すべてのログをローテーションします。出力をスキミングすると、明らかな問題を見つけるのに役立ちます。また、すべてのサービスが引き続き正常に実行されていること、回転後のスクリプトに問題がないこと、およびすべてのログが回転されていることを確認する必要があります。
ログが十分に古いのにローテーションしていないことがわかった場合は、-f
を使用してlogrotateを手動で実行します。 国旗。ただし、問題が発生した理由を知りたい場合は、ローテーションを強制する前に確認できるファイルがもう1つあります。
/var/lib/logrotate.status
Logrotateは、各ログファイルを最後にローテーションした日時に関する情報をステータスファイルに保存します。中を見ると、次のようなものが表示されます:
logrotate state -- version 2
"/var/log/acpid.log" 2010-6-18
"/var/log/iptables.log" 2010-6-18
"/var/log/uucp.log" 2010-6-29
...
これは単純な形式で、ログファイルの場所は左側にあり、最後にローテーションされた日付は右側にあります。サーバー上の日付が混乱することがあり(NTPサービスなどをいじくり回している場合)、ログが最後にローテーションされた日付が将来の日付になることがあります。その場合は、このステータスファイルに表示されます。
特定のログファイルでlogrotateをチェックアウトしたいが、すべてを強制的にローテーションさせたくない場合は、logrotatestatusファイルからログのエントリを削除できます。次に、logrotateを通常どおり実行すると、今日の日付でログの新しいエントリが作成されます(実際にはログがローテーションされない場合でも、間隔ベースの場合は、最初の実行がベースラインとして使用されます)。
バックグラウンドで静かに実行され、実際には1つのタイプのタスクしか実行しないものの場合、logrotateはかなりの量を実行します。 newlogrotate構成ファイルは、最初から作成するか、既存の構成をコピーして適切に変更することで、独自の目的で設定できるはずです。そして最も重要なことは、ログが制御不能になるのを防ぐことができることです。