mod_proctitle-プログラム名のリクエストと簡単な統計を表示するためのApacheモジュール(topおよびps出力)

Webサーバーが何をしているかを迅速に評価する必要がある場合がよくあります。 時には、「彼はそうではないようだ」と安心させるために。 サーバーに1つのApache、1つのサイトがある場合、負荷は小さく、問題はありません。 彼は入って、トップが見えた。 / server-statusが見え、tail -fがログを行い、瞑想しました-通常、すべてが明確です。 ただし、Apacheサイト自体が非常に多く存在する状況があります(ほとんどすべてのオペレーティングシステムがいくつかのapache Webサーバーをすぐに持ち上げることができますが、これは何らかの理由でめったに使用されません)。 Apacheが答えることさえできない状況があります。 少なくともおおよそ、Apacheワーカーが行うこと(または既に行ったこと)を推定することは素晴らしいことです。 想像してみてください-あなたはps -auxをやっていて、そこにいます-誰がどんなURLを、どのくらいのチャンネルがビジーで、どんなスピードで動くのかを尋ねます-nya



私は長い間、Apacheのパッチを使用してきました。これは、要求行を解析した後、IPプログラム名、要求の発信元、Hostヘッダーにあるもの、要求行自体に書き込みます。 しかし、この2行のパッチは12年前にApacheバージョン1.3用に作成されました。 そして、手は届きませんでした。 さらに、その時点から、Apacheの新しいバージョン用に、これらの目的のために多くの(5分で少なくとも2つ見つけた)モジュールがありました。 しかし、時間が経つにつれて、単純に文字列を照会するだけでは不十分になりました。 そして...私は自分のモジュールを書きました。



ドクター、そのような写真はどこで手に入れたの?



最初は、Apacheの開発者用ドキュメントの不足に苦しみました。 ソースコード全体を読み直して、必要なフックを探す必要がありました。 すでに10番目のモジュールを書いているときは問題ありませんが、最初のモジュールと最後のモジュールが問題になる場合があります。



20リクエストごとまたは1秒ごとにapacheルートプロセスから呼び出されるap_hook_monitor()フックを見つけることができたとき、文字列にできるだけ多くのクールな統計情報をプッシュすることを切望しました。 あらゆる種類のステータス、数量、10秒、1分、5分、稼働時間での読み込みを試しました...しかし、結果を見ると、この見掛け倒しが干渉するだけで、1秒あたりのビットレートとリクエストのみが残っていることがわかりました。



モジュールの最も重要な新機能は、完全および不完全な待機キューの長さです。 これは、BackLogをいくつかの場所でhttpd.confに書き込むときです。サーバーが受け入れる時間がないというリクエストは、このキューに蓄積されます。 そして、キューがいっぱいになると、それらは破棄され始めます。 通常、これはたとえばhabraeffectで、またはサイトがサードパーティのリソースにアクセスし、サイトが「嘘をついている」またはブロックされている場合(たとえば、最近のgithub)に発生します。 そして、ここではリッスンキューの数字とqps数字が目にとても役立ちます。



これらのLinuxのすべてがいかに悪いか



突然、小さな犠牲者のいるモジュールはFreeBSDでしか書けないことが判明しました。 プログラムの名前を変更するにはsetproctitle()関数があり、SO_LISTENQLENおよびSO_LISTENINCQLENパラメーターを指定したgetsockopt()呼び出しを使用して、完全および未完了の待機キューの長さを確認できます。



Linuxの場合、すべてがより複雑です。 実行可能ファイルの名前を取得し、常に個別に追加する必要があります(FreeBSDはこれを自動的に行います)。 これは、rcスクリプトの大部分がpsで光る名前を使用して起動/再起動することを覚えておくために必要です。



Linuxの場合、難しいことがわかり、Listen Queueの値を見つけることができます。 これまでのところ、netlinkを使用するためのオプションがあります(7)。 しかし、詳細はずれています。



注ぎ込む



FreeBSD + Apache 2.4の場合、モジュールは完全に機能します。 他のバージョンのApacheで試すことができます。 Linuxへの移植を支援することは可能であり、必要です。



モジュールはソースコードで配布されており、あなたはそれを使って何でもできます:

github.com/schors/mod_proctitle



PS Nekstati、私はどこかでUDPの統計の定期的なリセットの機能でそれを補完したいと思います。 もう少し完成。



All Articles