Oracle® Fusion Middleware Oracle WebLogic Server JMXによる管理の容易なアプリケーションの開発 11g リリース1 (10.3.5) B55538-04 |
|
前 |
次 |
Java Management Extensions (JMX)は、Javaアプリケーションをモニターおよび管理するための仕様です。これにより、汎用管理システムでアプリケーションをモニターし、注意が必要なときに通知を生成し、アプリケーションの状態を変更して問題を解決できます。JMXはSNMPおよび他の管理規格と同様に公開された仕様であり、一般的に用いられるモニター用製品を扱うベンダーの多くでサポートされています。
WebLogic Serverは、JDK 6に含まれているJava Management Extensions (JMX) 1.2実装を使用します。以下の節では、JavaアプリケーションでJMXを使用して実行時メトリックと制御ポイントを管理システムに通知する方法について説明します。
WebLogic ServerでJava EEアプリケーションを管理するために使用できるその他のAPIおよびユーティリティについては、『Oracle WebLogic Serverの紹介』のWebLogic Serverシステム管理の概要に関する項を参照してください。
アプリケーションのモニターと管理に使用する場合、JMXは通常、管理アプリケーションが管理データを収集するJavaクラスのプロパティにアクセスできるようにします(図2-1を参照)。多くの場合、これらのクラス・プロパティは、アプリケーションが消費するリソースを追跡する単純なカウンタです。また、JMXは、アプリケーションのプロセスの開始または停止、またはクラス・プロパティ値のリセットを行うJavaクラスのメソッドへのアクセスも提供します。JMXを介して管理データを公開するクラスを、管理対象Bean (MBean)と呼びます。また、MBeanを介して公開されるクラス・プロパティを属性、メソッドを操作と呼びます。
JMX対応管理ユーティリティへのこのようなアクセスを実現したら、システム管理者または運用スタッフは管理データをシステムの全体図に統合できます。JMX管理ユーティリティを使用することで、MBean属性の現在の値を参照したり、JMXモニターを設定してMBean属性値を定期的にポーリングしたり、属性値が特定のしきい値を超えた場合にのみ管理ユーティリティに通知が送信されるようにしたりできます。
システム管理者または運用スタッフにすべての管理責任を負わせるかわりに、MBeanをモニターする管理対応アプリケーションを作成して、一部のタスクを自動的に実行することができます。例:
接続プールをモニターし、必要に応じてプールを拡張または縮小するアプリケーション。
デプロイされているアプリケーションすべてをモニターするポータル・アプリケーション。新しいアプリケーションがデプロイされた場合、ポータル・アプリケーションはそのアプリケーションを新しいポートレットとして自動的に表示します。
コネクタ・モジュールのデプロイメントをリスニングし、新しくデプロイされたモジュールを使用するアプリケーション。
データベース、JMS接続、JMSキャッシュなど、リソースを大量に消費する重要なJava EEアプリケーションは、そのリソース消費をモニターする機能を備えている必要があります。このようなアプリケーションでは、データベースに対する読み書きが常に行われるため、ロギング機能を使用して読み書き処理のたびにメッセージを出力することは不可能です。この種のモニター機能のためにJMXを使用することにより、容易に管理でき、ネットワーク・リソースの利用を最適化する管理(インストゥルメンテーション)コードを記述できます。
アプリケーションの基本的な実行時メトリックをモニターする場合は、WebLogic Serverに用意されている様々な独自のMBeanを使用できます(『Oracle WebLogic Server JMXによるカスタム管理ユーティリティの開発』のWebLogic Serverイベントのリスニングのベスト・プラクティスに関する項を参照)。たとえば、既存のWebLogic Server MBeanを使用してアプリケーションのサーブレットのヒット率や、サーブレット・リクエストの処理時間を追跡できます。
WebLogic Server MBeanはオペレーション・センターに対してリソースの全般的な状態を通知できますが、特定のアプリケーションがどのようにリソースを使用しているかについての詳細な情報は提供できません。たとえば、WebLogic Server MBeanは接続プール内の使用中の接続数を通知することはできますが、接続プールを使用しているアプリケーションは通知できません。ドメインに複数のアクティブなアプリケーションが存在し、一部の接続が常に使用されていることに気づいた場合、各アプリケーションがいつ接続を取得し、解放するかをモニターするMBeanを作成します。また、停止していると見なされたセッションを終了する管理操作を組み込むこともできます。
さらに、アプリケーションが独自のキャッシュを作成および保持し、アプリケーション・コンテナの制御下にないデータ・リポジトリに書き込む場合、そのキャッシュのサイズまたはリポジトリに書き込まれるデータの量をモニターするMBeanを作成します。
Java EEと同じように、JMXはコンポーネント・ベースの技術であり、様々な種類のベンダーが多様なコンポーネントを提供しています。こうした分業化によって、各ベンダーはそれぞれの専門分野のソフトウェアだけの開発に専念できます。JMXでは、これらのコンポーネントは以下のレイヤーにまとめられます。
インストゥルメンテーション
開発するアプリケーション、リソース、およびその他の管理が容易なオブジェクトで構成されます。このレイヤーでは、アプリケーション開発者が管理対象Bean (MBean)を作成します。MBeanは、外部の管理システムに公開するプロパティ(属性)とメソッド(操作)を備えています。
エージェント
JVMとアプリケーション・サーバー(WebLogic Serverなど)で構成されます。このレイヤーには、MBeanのレジストリと、MBeanの作成、破棄、およびアクセスを行うための標準インタフェースが含まれます。
また、エージェント・レイヤーには、モニターおよびタイマー・サービスに加えてリモート・クライアント用のサービスが含まれます。『Oracle WebLogic Server JMXによるカスタム管理ユーティリティの開発』の第5章「WebLogic Server JMXタイマー・サービスの使用」および通知とモニターMBeanの使用方法に関する項を参照してください。
分散サービス
管理コンソールまたはその他のJava EEアプリケーションで構成されます。管理アプリケーションがエージェント・レイヤーのリクエストを送受信します。多くの場合、このレイヤーは管理コンソールが様々な管理プロトコル(JMXやSNMPなど)をサポートできるようにするためのプラグインまたはアダプタとして使用できます。
JMXを理解するための2つの主要な概念は、間接性と内部参照です。これらの概念を採用することで、JMXアプリケーションは独自のクラス定義にアクセスすることなく独自のリソースを管理できるようになります。
JMXの一般的なモデルでは、分散サービス・レイヤーに属するアプリケーションは、インストゥルメント・レイヤーに属するクラスと直接対話することがありません。かわりに、この間接性のモデルでは、JMXエージェント・レイヤーは以下のことを行う標準インタフェース(javax.management.MBeanServerConnection
など)を提供します。
クラス管理インタフェースを分散サービス・レイヤーの管理クライアントに公開する
管理クライアントからリクエスト(クラスがJMXを介して公開するプロパティの値を取得するためのリクエストなど)を受け取る
クラスと対話してリクエストを実行し、その結果を管理クライアントに返す
各クラスは、JMXを介して公開するプロパティとメソッドのセットをMBeanサーバーに通知します。クラスがJMXを介して公開するプロパティをMBean 属性と呼び、公開するメソッドを操作と呼びます。JMXは、クラスがその属性と操作を通知するために使用できる複数の方法(設計パターン)を指定します。これらの設計パターンは、標準、動的、モデル、オープンというタイプのMBeanとして形式化されています。
標準MBeanタイプを実装するクラスは、その管理インタフェースをJavaプログラミングとほぼ同じ方法で記述します。開発者は、JMXを介して公開される各クラス・プロパティのゲッターおよびセッター・メソッドを備えたJMXインタフェース・ファイルを作成します。インタフェース・ファイルには、公開される各クラス・メソッドのラッパー・メソッドも含まれます。クラスは、そのJMXインタフェースの名前を宣言します。標準MBeanをMBeanサーバーに登録すると、MBeanサーバーはクラスとそのJMXインタフェースを内部参照して、分散サービス・レイヤーに公開するJMX属性および操作を決定します。また、MBeanサーバーは、インタフェースを記述するMBeanInfo
オブジェクトを作成します。管理クライアントは、このMBeanInfo
オブジェクトを調べてクラスの管理インタフェースについて学びます。
モデルMBeanタイプを実装するクラスは、その独自のMBeanInfo
オブジェクトを作成することによってその管理インタフェースを記述します。MBeanInfoオブジェクトは、JMXを介して公開するプロパティとメソッドを記述するメタデータ・オブジェクト・セットです。モデルMBeanをMBeanサーバーに登録すると、MBeanサーバーはクラスを内部参照するかわりに既存のMBeanInfo
オブジェクトを使用します。
JMXでは、2通りの方法でMBeanの変更をモニターできます。MBeanは、特定のイベント(属性値の変更など)の発生時に通知を送信できます。また、モニターMBeanは、MBeanを定期的にポーリングして属性値を取得できます。
以下の節では、JMX通知とモニターMBeanについて説明します。
MBean作成の一部として、javax.management.NotificationEmitter
インタフェースを実装できます。これにより、MBeanは様々な種類のイベントが発生したときに通知を送信できます。たとえば、アプリケーションによる接続プールの使用状態を管理するMBeanを作成するとします。この場合、アプリケーションが接続を作成したときに通知を送信し、接続を破棄したときに別の通知を送信するようにMBeanを構成できます。
通知をリスニングするには、javax.management.NotificationListener.handleNotification()
メソッドを実装するリスナー・クラスを作成します。このメソッドの実装には、リスナーが通知の受信時にアクションを実行するためのロジックを組み込みます。リスナー・クラスを作成したら、リスナーをMBeanに登録する別のクラスを作成します。
デフォルトによって、MBeanは登録されているすべてのリスナーにすべての通知を送信します。しかし、リスナーのフィルタを作成して登録することもできます。フィルタは、javax.management.NotificationFilter.isNotificationEnabled()
メソッドを実装するクラスです。このメソッドの実装では、1つまたは複数の通知タイプを指定します。この場合、タイプは、イベントを識別する通知オブジェクト内のユニークな文字列です(vendorA.appB.eventC
など)。イベントの発生によってMBeanが通知を生成する場合、MBeanは通知をリスナーに送信する前にフィルタのisNotificationEnabled()
メソッドを呼び出します。通知タイプがisNotificationEnabled()
で指定した値の1つと一致した場合、フィルタはtrue
を返し、MBeanは関連付けられているリスナーにメッセージを送信します。
リスナーおよびフィルタの作成および登録については、『Oracle WebLogic Server JMXによるカスタム管理ユーティリティの開発』のWebLogic Server MBeanからの通知のリスニング手順に関する項を参照してください。JMX通知の詳細は、JMX 1.2仕様を参照してください。「関連ドキュメント」を参照してください。
図2-2に、MBeanが送信した通知の一部だけを通知リスナーが受信する基本システムを示します。
JMXには、モニターMBeanというMBeanの仕様が含まれています。モニターMBeanをインスタンス化して構成することにより、他のMBeanを定期的に検査できます。モニターMBeanは、特定のMBean属性が指定されたしきい値を超えた場合にJMX通知を送信します。モニターMBeanでは、MBeanの属性の値そのもの、または数値属性の2つの連続する値の差異(オプション)を観察できます。モニターMBeanが観察する値は、派生ゲージと呼びます。
派生ゲージが一連の条件を満たす場合、モニターMBeanは特定の通知タイプを送信します。また、属性値のモニター中に一定のエラー状態が発生した場合にも通知を送信できます。
モニターMBeanを使用するには、モニターを構成して、観察対象のMBeanに登録します。次に、リスナー・クラスを作成して、そのクラスをモニターMBeanに登録します。モニターMBeanは非常に特殊な種類の通知のみを送信するので、通常、モニターMBeanからの通知をリスニングする際にはフィルタは使用しません。
図2-3に、モニターMBeanをMBeanに登録する基本システムを示します。NotificationListener
がモニターMBeanに登録され、モニターMBean内の条件が満たされたときに通知を受信します。