終了時ではなく、着信時にApacheログリクエストを送信する


9

サーバーの再起動ですべてが正常に戻る、奇妙なサーバークラッシュの問題を診断しようとしています(サーバーはpingに応答しますが、再起動するまでSSH接続を受け入れません。0%CPU)。Apacheアクセスログ(または他のログ)に、クラッシュが発生したときに行われたすべてのリクエストを含めたいのですが、残念ながらApacheはリクエストが完了するまでログを記録しません。つまり、リクエストがサーバーをクラッシュさせている場合、そのリクエストは終了せず、ログに表示されません。

リクエストの到着時に書き込まれるログファイルを作成するようにApacheを設定する方法はありますか?


DNS設定も確認してください。DNSサーバーが壊れているかハングしていると、SSHであらゆる種類の問題が発生し、ログインできなくなります。[Apacheの機能を知っている人-ホスト名の検索がオフになっていることを確認してください。]
ショーンキンボール、

回答:


15

フォレンジックロギングが必要なものだと思います。次のリンクを参照してください。http//httpd.apache.org/docs/current/mod/mod_log_forensic.html

スニペット:

フォレンジックログ形式:

各リクエストは2回記録されます。最初は、それがさらに処理される前です(つまり、ヘッダーを受け取った後)。2番目のログエントリは、通常のロギングが発生すると同時にリクエスト処理の後に書き込まれます。

各リクエストを識別するために、一意のリクエストIDが割り当てられます。このフォレンジックIDは、%{forensic-id} n形式の文字列を使用して通常の転送ログにクロスログできます。mod_unique_idを使用している場合は、生成されたIDが使用されます。

最初の行は、フォレンジックID、要求行、および受信したすべてのヘッダーをパイプ文字(|)で区切って記録します。サンプル行は次のようになります(すべて1行で)。

+ yQtJf8CoAB4AAFNXBIEAAAAA | GET /manual/de/images/down.gif HTTP / 1.1 | Host:localhost%3a8080 | User-Agent:Mozilla / 5.0(X11; U; Linux i686; en-US; rv%3a1.6)Gecko / 20040216 Firefox / 0.8 | Accept:image / pngなど...

先頭のプラス文字は、これがこの要求の最初のログ行であることを示しています。2行目にはマイナス文字とIDが含まれています。

-yQtJf8CoAB4AAFNXBIEAAAAA

check_forensicスクリプトは、引数としてログファイルの名前を受け取ります。それはそれらの+/- IDペアを探し、リクエストが完了していない場合は文句を言います。


これは私が探していたものですが、このログを定期的に消去する(rm /var/log/apache2/forensic.log毎時間)か、apacheを再起動するまでフォレンジックログが壊れるようには見えません。アイデア?
Ben Dilts、2011

もちろん、Apacheログをrmすると、それが起こります。logrotateまたは環境に存在する同等のものを使用して、ログを定期的(時間またはサイズ)にロールしてみてください。そうでない場合は、削除するのではなく、ファイルを移動してから、
var / log / apache2 / forensic.logに

2

Sandroidの答えはあなたの質問に正しいですが、ネットワークパケットキャプチャの実行も検討する必要があります。リソースがある場合は、スイッチ内のポートをミラーリングし、WireSharkを実行している2番目のマシンを使用してすべてのIPトラフィックを記録すると、本当に役立つ場合があります。非HTTPサービスが応答しない状態までサーバーを取り出している場合、不正なデータがApacheに到達する前にIPスタックが取り出されている可能性があります。

キャプチャを実行しているマシンに、他とは異なるネットワークハードウェアやドライバがあることを確認できる場合。1つの価格で2つをクラッシュさせるのは大変です。;-)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.