Logcheckとlogrotateの両方を使用してシステムを継承しました。私が抱えている問題は、logrotateが次のようなことを言っている厄介な電子メールを送信していることです。
*** WARNING ***: Log file (X) is smaller than last time checked!
Logrotateは常に監視ファイルをローテーションします。これらのツールは一緒にうまく機能するように設計されているようですので、それを実現する方法に興味があります。
これは単純なようですが、ヘルプファイルのどこかにあるばかげた質問をしている場合は、謝罪します。
Ubuntu 18.04、logcheck 1.3.17、logrotate 3.11.0-Copyright(C)1995-2001 Red Hat、Inc.
「copytruncate」はファイルローテーションの管理に使用される方法であるため、追加の質問:
ログがローテーションされるサービスはDjango/Apacheアプリケーションです。サービス自体(およびファイル)は、稼働時間を必要とするWebサーバーであるため、ローテーションプロセスのために実際に停止することはできません。これらのファイルのクリーンな回転を開始するための正しい方向を教えてください?このプロセスでは、logrotateとlogcheckが非常にクリーンに実行されていましたが、最近Python 3.1にアップグレードしました。問題。
2番目の補遺:この問題は、競合するファイルサイズ制限(Djangoがログを4Mに制限し、logrotateが5Mでローテーションする)にイライラし、ログ自体を切り捨てたことが原因である可能性があります。 logrotate + logcheckが確かな実績を持つことを知ることは非常に役に立ちました。
Debianシステムでlogcheck
+ logrotate
を20年間使用しており、現在〜60のDebianバージョン8、9、および10サーバーで使用しており、neverlogcheck
からのメッセージを見た。だから私は少し掘りました。
メッセージは実際にはlogcheck
自体からではなく、_logtail2
(または最初はlogtail
)から送信されます。これは、logcheck
が依存関係として取り込む補助パッケージにあります。 logtail
パッケージの説明によると、2つのバージョンの主な違いは、ローテーションされたファイルの処理がlogtail2
のほうが優れていることです。これを前提として、まずlogtail
が使用しているlogcheck
を確認することから始めます。
$ grep logtail /usr/sbin/logcheck
LOGTAIL="/usr/sbin/logtail2"
|| error "Could not run logtail or save output"
最初の行で、LOGTAIL
ではなくlogtail
がlogtail2
に設定されていることを確認します。
(必要に応じて)logtail2
を使用していると想定すると、「ログファイルが小さい」という警告は、ファイルが圧縮された場合にのみ発行されますand iノード番号は同じままです。つまり、ファイルがその場で書き換えられた場合です。これは、必要に応じてログファイルを再作成するほどスマートではないサービスに対処するために行われることがあります。そのため、名前を変更して新しいファイルを作成するのではなく、コピーしてサイズを0にリセットすると、ログがローテーションします。これは珍しい(そして、危険なことは言うまでもなく、ハックであり、ログメッセージが失われる可能性のある競合状態を作成する)ログローテーションを処理する方法であるため、数が少ないと思いますこの警告が発生するログファイル。
この問題の最善の解決策は、関連するログのローテーション設定を修正して、古いログを上書きする代わりに「通常の」方法で処理されるようにすることです。これを行うには、grep
copytruncate
オプションを使用するすべてのログのログローテーションルールを作成し、copytruncate
を使用せずにローテーションを許可するためにこれらのサービスを取得するために必要なことを決定します。 prerotate
スクリプトを実行してpostrotate
で再起動しますが、通常は、特定のシグナルを送信してログファイルを再度開くように指示するなどのより良い方法があります。 (copytruncate
に関する記述が見つからない場合は、ローテーションスクリプトで手動で実装することもできます。grep
を使用する代わりに、手動で検索する必要があります。)
これがオプションではない場合、logcheck
ルールディレクトリに無視ルールを作成して、これらの警告行を無視するように指示できますが、それは、それらが標準の異常ログエントリとして処理されるか、無視システムをバイパスするかによって異なります。