web-dev-qa-db-ja.com

Logcheck Logrotateを無視する

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が確かな実績を持つことを知ることは非常に役に立ちました。

3
Dylan Brams

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ではなくlogtaillogtail2に設定されていることを確認します。

(必要に応じて)logtail2を使用していると想定すると、「ログファイルが小さい」という警告は、ファイルが圧縮された場合にのみ発行されますand iノード番号は同じままです。つまり、ファイルがその場で書き換えられた場合です。これは、必要に応じてログファイルを再作成するほどスマートではないサービスに対処するために行われることがあります。そのため、名前を変更して新しいファイルを作成するのではなく、コピーしてサイズを0にリセットすると、ログがローテーションします。これは珍しい(そして、危険なことは言うまでもなく、ハックであり、ログメッセージが失われる可能性のある競合状態を作成する)ログローテーションを処理する方法であるため、数が少ないと思いますこの警告が発生するログファイル。

この問題の最善の解決策は、関連するログのローテーション設定を修正して、古いログを上書きする代わりに「通常の」方法で処理されるようにすることです。これを行うには、grepcopytruncateオプションを使用するすべてのログのログローテーションルールを作成し、copytruncateを使用せずにローテーションを許可するためにこれらのサービスを取得するために必要なことを決定します。 prerotateスクリプトを実行してpostrotateで再起動しますが、通常は、特定のシグナルを送信してログファイルを再度開くように指示するなどのより良い方法があります。 (copytruncateに関する記述が見つからない場合は、ローテーションスクリプトで手動で実装することもできます。grepを使用する代わりに、手動で検索する必要があります。)

これがオプションではない場合、logcheckルールディレクトリに無視ルールを作成して、これらの警告行を無視するように指示できますが、それは、それらが標準の異常ログエントリとして処理されるか、無視システムをバイパスするかによって異なります。

2
Dave Sherohman