PythonおよびMuninを使用した詳細なApacheクエリモニタリング

TomTomでの最近のインターンシップ中のタスクの1つは、会社のWebサーバーの監視ツールを改善することでした。 具体的には、ApacheアクセスログからAPIへのリクエストの詳細な統計を表示する複数のMuninプラグインを作成する必要がありました。 このタスクは、最初は原始的なように見えるかもしれません-必要なのは、ログファイルを解析し、Muninが理解できる形式で結果を表示することだけです。 ただし、柔軟な構成オプションを備えた非常に信頼性が高く便利なユーティリティを作成するために、多くのことを工夫する必要がありました。 この作業が無駄にならないように、 gitstatにelfstatsというコードを投稿しました。 この記事では、興味のあるネットワークエンジニアが環境で使用できるように、このユーティリティで解決できるタスクについて説明します。



つまり、elfstatsの使用を開始する前に、正規表現を使用してWebサーバーによって処理された要求を記述する必要があります。 その後、プログラムはアクセスログを定期的に解析し、記述された各テンプレートのリクエスト数と応答時間の分布を含むレポートファイルを生成します。 さらに、このレポートはMuninを使用して処理され、対応するグラフの形式で表示されます。 したがって、elfstatsをインストールして構成することにより、Webサーバーレベルでアプリケーションの動作とユーザーの動作の変化を簡単に追跡できます。



現在、Webサーバーを監視するためのさまざまなツールが多数あります。 しかし、それらの最も人気のあるものを分析した後、リクエストに関する詳細データを(ほぼ)リアルタイムで追跡し、すべての情報を1か所に表示し、会社に既に存在する監視インフラストラクチャに簡単に統合できるユーティリティは見つかりませんでした。 ソリューションの作業を開始する前に、APIリクエストを分析するために、2つの部分(データアグリゲーターとMuninプラグイン)からの古くて本質的にサポートされていないスクリプトを使用しました。 それらにはいくつかの深刻な問題がありました:ソースコードを変更せずに多かれ少なかれ柔軟な構成が不可能である、機能が不十分であり、バグがあります。 ログからの情報を解析および表示するタスクが膝に書かれたスクリプトによって解決されたのは私たちだけではなかったと思います。





単一の式で記述されたAPIグループへのリクエストの数を表示する



また、新しいソリューションの基礎として2つのコンポーネントのアプローチを採用しました。 ログから統計を収集するために、定期的な間隔で実行され、前回の起動以降に生成されたデータを分析するデーモンが作成されました。 収集された情報はレポートファイルに書き込まれ、Muninプラグインまたはその他のリアルタイムの視覚的な監視ツールで使用できます。 すべてのデータ処理タスクはデーモンに割り当てられているため、プラグインは非常にシンプルで非常に迅速に機能します。これは、数十のノードから順番にゆっくりと悲しい統計を収集する中央サーバーMuninにとって非常に重要です。 さらに、プラグインには短いレポートファイルを解析して値をmunin-nodeに返すことを除いて、実際にはロジックが含まれていないため、他の監視ユーティリティ用に簡単に書き換えることができます。 悪魔に触れる必要はありません。



プログラムの現在のバージョンは、次の機能をサポートしています。







API呼び出しの1つの応答時間分布



elfstatsを使用すると、次のデータを監視できます。





このデータを表示するには、PyMuninフレームワークに基づいて記述されたMuninの6つの異なるプラグインが使用されます。 プラグインはデーモンとは別に配布され、互いに独立しており、必要に応じてオンとオフを切り替えることができます。





リターンコード監視



デーモンとプラグインのコードはPython 2.6で書かれており、将来バージョン3.xのサポートが可能になります。 バイナリアセンブリは、Linux RedHat 6でコンパイルされたrpmパッケージの形式で利用できます。他のオペレーティングシステムで作業するには、ソースコードからデーモンとプラグインを収集する必要があります。 RHEL6を搭載したマシンへのelfstatsのインストールを簡素化するために、RPMは、必要なすべての依存関係を含むPython用のプリインストール仮想環境でサポートされています。 デーモンのソースコードはMITライセンスの下で公開されており、プラグインはPyMuninフレームワークの必要に応じてGPLv3の下で配布されます。 Puppetマニフェストは、サーバーでのelfstatsの初期展開とアップグレードに使用されます。 すべてのサーバーで異なる必要なタスクの構成ファイルを変更します。 リポジトリにはまだマニフェストがありません。それらは少し後に追加されます。



私が書いたプログラムは非常に機能的で柔軟であることが判明したようです。 数か月間、かなり多数のサーバーを監視するために使用されており、問題なく動作しています。 elfstatsを使用してサーバーを制御したい場合は喜んで、コメントとトラッカーでこのユーティリティの操作に関する質問に喜んでお答えします。



All Articles