web-dev-qa-db-ja.com

nginx:(アプリケーションではなく)nginxからランダムな500を追跡する方法潜在的に負荷と関係がありますか?

私たちは最近、なんとかログに記録されなかったnginx自体から約500を所有していました(スクリーンショットはありますが、ログには何もありません)。通常はエラーが表示されるため、それ自体は奇妙です。とにかく、接続プールのサイズのようなものがあり、最大化すると500になるのではないでしょうか。最近のトラフィックの急増と潜在的に相関していますが、決定的なものではありません。

誰もがそのような問題に取り組み始める方法について何か考えがありますか?

9

Nginxとlmonでログ形式の組み合わせを使用して、このようなことをキャッチします。次のようなNGINXログ形式:

log_format main '$ status:$ request_time:$ upstream_response_time:$ pipe:$ body_bytes_sent $ connection $ remote_addr $ Host $ remote_user [$ time_local] "$ http" referer "" $ http_user_agent "" $ http_x_forwarded_for "$ upstream_addr" upstream_cache_status in:$ http_cookie "'

リクエストを処理したアップストリームサーバーなどの多くの役立つ診断情報をキャプチャし、ステータスを前面に表示するので、ログがかなり高速にスクロールしている場合でも読みやすくなります。

LMONを使用してこれらのログを監視し、ログに500、503、400などのエラーが見つかった場合は、ページャー/電子メールで警告します。

http://www.bsdconsulting.no/tools/lmon-README

これは、問題が発生したときにそれをデバッグするのが最も簡単なときにアラートを受け取るのに役立ちます。

まだ検討していない場合に考慮すべきもう1つのことは、nginxはデフォルトで500を致命的な状態と見なし、別のアップストリームを試行しないことです。複数のアップストリームがある場合、500を取得した場合に別のアップストリームを使用するように構成できます。うまくいけば、ユーザーからの失敗はわかりません。

http://wiki.nginx.org/NginxHttpProxyModule#proxy_next_upstream

6
polynomial

error_log $filename debug;は、デバッグレベルのログをエラーログに記録します。これにより、エラー発生時のnginxの内部ステータスの多くの詳細が得られます。--with-debugでコンパイルした場合(いくつかのディストリビューションはデフォルトでこれを行います) )それはさらに与えるでしょう。

「デバッグ」レベルでは実際にlotsの出力が生成されるため、ディスク領域を監視したい場合があることに注意してください...

4
Shish

私の場合、confファイルの名前が正しくなく(example.com.confではなくexample.comでした)、含まれていませんでした。どういうわけか、これは「Welcome to nginx」にはならず、ログに記録されないHTTP 500エラーになりました。まあ、それは実際にログに記録されましたが、その特定のURLでは機能しなかった別の仮想ホストからのエラーファイルにありました。

1
Frank