Ustatsモジュール:バックエンド要求の統計

ご挨拶!

この記事では、nginxの新しいモジュールについて説明します。このモジュールの目的は、バックエンドへのサーバーアクセスに関する統計を収集してユーザーに提供することです。 カットの下-詳細、使用例、スクリーンショット、リンク、および作成の履歴。


物語


少し前に、当社のサーバーサポート部門は、何かを変更する時が来たという結論に達しました。 より正確には、増加した負荷の分散に関する問題を解決する必要がありました-私たちの前線は困難に彼らのタスクに対処し始めました。

JMeterの助けを借りて、スタンドでnginx、HAProxy、Brocade Server Iron ADX 1000、および他の多くのバランサーを運転しました。 主な選択基準は、ピーク時に約5万の同時SSLセッションを終了する能力でした。 長期間のテストの後、さまざまな理由で、nginxと鉄の競合他社であるBrocade Serverを除くすべてのオプションがなくなり、最終的には最初のオプションのみが残りました。 他の条件が同じで、おそらくnginxを支持する決定的な要因は、その構成の柔軟性と軽さでした。

問題


以前は、一部の面でHAProxyをバランサーとして使用していました。 nginxに切り替えた後、バックエンドでの作業に関する有益な統計情報がないことが明らかになりました。 実際、同じHAProxyにはそのような統計があり、その助けを借りて、バックエンドで発生する問題を追跡し、それらに迅速に対応しました。 新しいバランサーでは、これらの統計なしで、手なしで終わった。 stub_statusおよび同様のモジュールは、私たちに適していない、なぜなら それらの機能は、個別のアップストリームのコンテキストではなく、サーバー全体の統計を表示することです。 アップストリーム/バックエンドごとに、各バックエンドへの呼び出しやHTTPエラー499/500/503およびTCPなどのパラメーターに関するデータが必要であり、後でこのリストが拡張されました。

解決策


問題に対する既成の解決策が見つからなかったため、必要な情報を視覚的な形式で提供するモジュールを作成しようとしました。 この試みは成功したようで、作業の結果はustatsアップストリーム統計 )モジュールでした。

統計とは何ですか?

ustatsを使用すると、次のようなバックエンドメトリックに関する統計を保持できます。

追加機能

また、ustatsは、ブラックリストに現在含まれているバックエンドを表示できます。 バックエンドは、serverディレクティブによってnginx configで指定されたものとしてではなく、ディレクティブで指定された名前が解決されるアドレスとして直接理解されることに注意してください。 DNSで1つの名前の下に複数のアドレスがリストされている場合、モジュールはそれらのアドレスを別々のバックエンドとして表示します(それらがどの名前から来たかを忘れずに)。

ブラックリストからバックエンドを強調表示することに加えて、ustatsはサーバー、つまり nginx configで
 ...
サーバーsome.server.name down;
 ...

そして最後に、モジュールを使用して、Webインターフェースを介して、操作中にnginxトポロジーからサーバーを直接オンおよびオフにできます。 変更は構成に保存されず、それらの実装を容易にするように設計されています。 バックエンドの一時的な切断を伴う作業。 警告したい:ustatsはこのアクションの不正実行に対する保護を提供しないため、ランダムな人があなたのサイトのバックエンドの半分を仕事から除外しないようにする必要があります:)

ユースケース

それらの2つがあります。 最初に、モジュールはすべての統計情報を表付きのWebページの形式で提供します。表はstub_statusなどの任意の場所に表示できます。
場所/ ustats {
	 ustats on;
	 ...
 }

ページは自動的に更新され、更新間隔(ミリ秒単位)は構成で構成できます。
 ...
 ustats_refresh_interval 7000
 ...

2番目のシナリオでは、モジュールを他の監視ユーティリティのデータソースとして使用します。 この場合、それに対応する要求が行われ、それに応じて、必要な情報を含む通常のxmlが返されます。 1つのアップストリームまたは1つのバックエンドのデータを要求できます。 たとえば、リクエスト

 / ustats?u =オフライン

アップストリームのすべてのバックエンドのデータをオフラインで返し、リクエストに応じて

 / ustats?u =ブレーク&b = the_mold

アップストリームブレークの the_mold バックエンドのデータが返されます。 アップストリームまたはバックエンドが見つからない場合、応答xmlはこれを示します。

いくつかの写真


根拠にならないように、モジュールの結果ページのスクリーンショットをいくつか提供します。 最初のスナップショットからのnginxでは、2つのアップストリームが構成され、すべてのサーバーはローカルで、wwwサーバーを除き、同じnginxで発生します。Yandexアドレスに解決されます。

写真では、灰色の線を見ることができます-これらは、nginx構成で「ダウン」とマークされているか、モジュールページでオフになっているバックエンドです。 これまでのところ、数字はありません。

2番目のスクリーンショットでは、最初のアップストリームからの3つのバックエンドが赤い線で強調表示されており、ブラックリストに含まれていたため、リクエストが送信されませんでした。

さらに3つのバックエンドがオフになったという事実と併せて、残りの1つだけが負荷をかけました。

最後に、最後のショットは、私たちのサイトから作業中のフロントエンドで撮影されました。

写真は、私がまだ言及していない別の機能を示しています。 下部からの上流はわずかに明るくなっています-これは、設定で暗黙的に定義されていることを示しています。 そうではない
アップストリームgive_me_a_name {
   ...
 }

など
場所/ whereami {
 ...
 proxy_pass http://192.168.0.75:8080
 ...
 }


まとめ


Google Codeページにモジュールのソースコードを投稿しました 。 リポジトリには、ソース+構成ファイルを含むnginxのパッチファイルが含まれています。 モジュールのページにはインストール手順があり、追加の構成ディレクティブも記載されています。 モジュールの現在のバージョンは、Chrome、Firefox、Operaでnginxバージョン0.8.53でテストされています。 最後に、ustatsは、バックエンドでの作業に関するデータを表示するための最も基本的なメカニズムをnginxに追加するための試みにすぎないことを言わなければなりません。 将来的には、メインサーバーブランチで、たとえばヘルスチェックバックエンドの前など、このような役に立たないモジュールを期待しています。

Source: https://habr.com/ru/post/J110047/


All Articles