1. 背景
アプリケーション サービスの監視は、インテリジェントな運用および保守システムの重要な部分です。 UAV システムでは、ミドルウェア拡張フレームワーク (MOF) プローブがアプリケーション ポートレートおよびパフォーマンス データ収集機能を提供し、データ収集機能は主にリアルタイム データ、ポートレート データ、コール リンク データ生成、スレッド データ分析データの 4 種類のデータを収集します。 . .リアルタイムのデータ収集を実現するために、UAVStack は統合されたデータ キャプチャ動作とキャプチャ結果を生成する機能を提供する CaptureFramework フレームワークを設計しました。
2. CaptureFramework の動作原理
![CaptureFramework フレームワーク分析を実行する方法](https://img.php.cn/upload/article/000/465/014/168571448095034.png)
2.1 主要な技術的説明
#JavaAssist
モニター キャプチャ システム
precap/docap
##2.2 アーキテクチャの説明
- キャプチャポイント: Tomcat、MSCP、Springboot、および Jetty キャプチャ ポイントをサポートします。
- UAVServer シングルトン: 統合キャプチャ エントリ ポイントとして、同期メソッドと非同期メソッドを提供します。
- StandardMonitor: Monitor インターフェイスを実装し、リアルタイム データ キャプチャ実装クラスであり、キャプチャ動作とキャプチャ結果の生成を担当する doCapture メソッドを提供します。
- MonitorElemCapHandler: さまざまなクローリング ロジックとクローリング ポイントの共通インターフェイスは、さまざまな埋め込みロジックを実装し、クローリング動作のメソッド、preCap と doCap、およびクローリング結果を生成するメソッドを提供します。
- StandardMonitorRepository: リアルタイム データ キャプチャのデータ構造を保存します。
- DataObserver: JMX/HTTP インターフェイス データを公開します。
2.3 主要なクラスの説明
- Monitor リアルタイム監視は主に DefaultMonitorSupporter クラスから開始され、StandardMonitor オブジェクトを初期化し、監視オブジェクトをインストールします。 CaptureFramework 中間を介して DataStore オブジェクトに送信されます。
- DataObserver は、後続の MA クローリング用の JMX/HTTP サービスを提供します。HTTP サービスには、HttpJEEJVMObserver、HttpJEEMonitorObserver、および HttpJEEProfileObserver という 3 つのハンドラーが登録されています。異なるハンドラーは異なるインターフェイスを公開します。
- MonitorHandler パッケージの Handler クラスは、特にモニターのインジケーター データの計算と統計を処理します。
2.4 キャプチャ ポイントの分析
CaptureFrameWork フレームワークは、統合されたキャプチャ エントリ ポイントを提供し、UAVServer で同期メソッドと非同期メソッドを提供します。
- 同期キャプチャ エントリ ポイント: runMonitorCaptureOnServerCapPoint
- 非同期キャプチャ エントリ ポイント: runMonitorAsyncCaptureOnServerCapPoint
2.4.1 同期呼び出しと非同期呼び出しの差異分析
非同期では、同期よりもパラメータが 1 つ多く追加されます (CaptureContextMapFromAnotherThread)。このパラメータが空でない場合は、コンテキスト情報をマージする必要があります。通常の状況では、非同期メソッドを使用してポイントを埋め込む場合、メソッドの実行前に非同期キャプチャ メソッドを呼び出すことによって渡される CaptureContextMapFromAnotherThread は空であり、カプセル化されたコンテキスト情報が返されます。メソッドの実行が完了すると、非同期キャプチャはメソッドが呼び出されてコンテキスト情報が渡され、コンテキスト情報がマージされてから、特定のキャプチャ操作が実行されます。詳細については、次のコード スニペットを参照してください:
![CaptureFramework フレームワーク分析を実行する方法](https://img.php.cn/upload/article/000/465/014/168571448099956.png)
##メソッド実行後の非同期呼び出しは次のとおりです。ここで、ccMap は、非同期呼び出し
2.5 グラブ動作の分析
#モニター インターフェイス: 最も重要な複数のインターフェイスを提供します。そのうちの 2 つは、doCapture メソッドと doPreStore メソッドです。doCapture は、特定のキャプチャ ポイントでの実行を実装するために使用されます。データをキャプチャする動作については、doPreStore メソッドは、データ構造にデータを保存する前にいくつかのキャプチャ アクションを実装するために使用されます。特殊なデータ処理。 StandardMonitor クラス: Monitor インターフェイスの特定の実装クラス。 StandardMonitorRepository クラス: リアルタイム データ キャプチャ データ構造を格納します。 MonitorElementInstance インターフェイス: リアルタイム データ キャプチャ データ構造を格納するインスタンス インターフェイス。 StandardMonitorElementInstance クラス: MonitorElementInstance インターフェイスの特定の実装クラス。 同期キャプチャ エントリ ポイントであっても、非同期キャプチャ エントリ ポイントであっても、doCapture メソッドが実行されます。コード スニペットは次のとおりです:
monitor.doCapture Monitor インターフェースで doCapture を呼び出します。その実装クラスは StandardMonitor です。
StandardMonitor の doCapture メソッドは、主に次の操作を実行します:
ServerEndRespTimeCapHandler (サーバー側のクロール動作) を例に挙げます。
preCap メソッド: サービスの開始要求時刻のみを記録します。
doCap メソッド: 異なる MonitorElemId に従って異なる論理処理を実行し、最後に MonitorElementInstance インスタンスをカプセル化し、最大値のピーク除去、最大値、最小値を含むキャプチャ動作の結果を処理します。 、ステータスコードを返す、タイムスタンプの更新、カウントおよびその他の対応するデータ処理。
3. リアルタイム データの収集
3.1 リアルタイム データとは
つまり、実行時データであり、生成される情報を指します。プログラムの実行時、プログラムが占有している CPU、ヒープ メモリ、JVM 情報、およびサービス アクセスとクライアント呼び出しに関連する統計 (平均応答時間、アクセス数など)。
3.2 サーバー側のデータ収集
DefaultMonitorSupporter の実装
![CaptureFramework フレームワーク分析を実行する方法](https://img.php.cn/upload/article/000/465/014/168571448188235.png)
サーバー側のデータ収集は、DefaultMonitorSupporter.start をエントリ ポイントとして使用します。モニター インスタンスの構築 :
![CaptureFramework フレームワーク分析を実行する方法](https://img.php.cn/upload/article/000/465/014/168571448119231.png)
## デフォルトでは、サービス タイプの StandardMonitor インスタンスが構築され、これには StandardMonitorRepository インスタンスが含まれます。StandardMonitorRepository インスタンスはモニターを登録します。このインスタンスには複数の MonitorElement が含まれますインスタンスを作成し、すべての MonitorElement インスタンスを elemsMap 属性に保存します。
elemsMap 属性は、さまざまなコレクション オブジェクトに応じてさまざまなコレクション クラス ハンドラーを保存します。
- ServerEndRespTimeCapHandler: サーバー、アプリ、URL などの応答時間と読み込み数を収集します。
- JVMStateCapHandler: ヒープ使用量、GC 数、スレッド数、CPU、クラス数などを含む jvm ステータスを収集します。
#コード スニペットは次のとおりです。
![CaptureFramework フレームワーク分析を実行する方法](https://img.php.cn/upload/article/000/465/014/168571448182784.png)
##3.3 クライアント データの収集![CaptureFramework フレームワーク分析を実行する方法](https://img.php.cn/upload/article/000/465/014/168571448153335.png)
DefaultClientMonitorSupporter の実装
クライアント データ収集は、モニター インスタンスを構築するためのエントリ ポイントとして DefaultClientMonitorSupporter.start を使用します: ![CaptureFramework フレームワーク分析を実行する方法](https://img.php.cn/upload/article/000/465/014/168571448213564.png)
クライアント タイプを構築します。 StandardMonitor のデフォルトのインスタンスには、StandardMonitorRepository インスタンスが含まれます。StandardMonitorRepository インスタンスはモニターを登録し、1 つのインスタンスに複数の MonitorElement インスタンスが含まれ、すべての MonitorElement インスタンスを elemsMap 属性に保存します。 ![CaptureFramework フレームワーク分析を実行する方法](https://img.php.cn/upload/article/000/465/014/168571448274836.png)
elemsMap: このプロパティは、ClientRespTimeCapHandler コレクション クラスを 1 つだけ保存します。
-
ClientRespTimeCapHandler: クライアントの応答時間や読み込み数などを収集します。
クライアント側のデータ収集であっても、サーバー側のデータ収集であっても、モニターは DataObserver にインストールされ、最終的には正常に構築されます。モニターは、指定されたキャプチャ方法 (つまり、precap と docap) に設定されます。 ![CaptureFramework フレームワーク分析を実行する方法](https://img.php.cn/upload/article/000/465/014/168571448275105.png)
3.4 DataObServer の実装
DataObServer は、インターフェイス データを公開するための 2 つのモード、つまり JMX と HTTP を提供します。
HTTP モード: HttpDataObserverWorker .start によるをエントリポイントとして使用し、JVMデータ、モニタデータ、プロファイルデータを取得するためのハンドラがそれぞれ3つ登録されています。各ハンドラーは固有のインターフェイスを公開しますが、それらはすべて JSON 形式でデータを返します。
-
JMX メソッド: JMX エージェントは、getMBeanInfo メソッドを通じて公開されたインターフェイスを取得してデータを取得します。
-
DataObServer は、モニターのインストールとアンインストール、リスナーの追加と削除、プロファイルとモニターの取得を行うメソッドも提供します。
以上がCaptureFramework フレームワーク分析を実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。