6 EDQをモニターするためのJMX拡張の使用

この章では、EDQの運用にかかわる多数の詳細情報を監視および管理するために使用できる、EDQのJava Management Extensions (JMX)インタフェースについて説明します。JMXはJavaコンポーネントのリモート管理および監視用に設計されたJavaテクノロジです。

この章の内容は次のとおりです。

6.1 JMXバインドの理解

EDQは内部JMXサーバー、またはWebLogicかTomcatアプリケーション・サーバーで提供されたもののいずれかを使用できます。このトピックでは、どのJMXサーバーが使用されるかを制御する方法について説明します。

  • Apache TomcatでのEDQのデフォルトのインストールは、内部JMXサーバーを使用します。

  • Oracle WebLogic ServerでのEDQのデフォルトのインストールは、WebLogic Serverアプリケーション・サーバーのJMXツリーを使用します。

デフォルトの構成には、リモート・メソッド呼出し(RMI)レジストリが含まれ、これはJMXクライアントだけでなく、EDQコマンドライン・インタフェースにより使用されます。RMIリスニング・ポート番号は、director.propertiesファイルに定義される、management.portプロパティで指定されます。デフォルトは8090です。このプロパティは内部JMXサーバーと、EDQコマンドライン・ツールで使用されるRMI APIの両方へのアクセスを制御します。

JMXの構成を次のように変更できます。

  • コマンドライン・インタフェースを使用せず、(内部JMXサーバーではなく)Tomcatアプリケーション・サーバーJMXツリーにEDQ JMX Beanを表示する場合、management.portプロパティを0に変更します。

    management.port=0

    management.portをゼロに設定した場合、RMIレジストリはどのポートもリスンしません。これは、内部JMXが使用されず、かつ、RMI APIも使用できないことを意味します。そのため、コマンドライン・ツールはmanagement.portが0に設定されていると動作しません。

  • Oracle WebLogic Serverを使用していて、コマンドライン・インタフェースを使用し、WebLogic ServerのJMXツリーにEDQ JMX Beanを表示する場合、構成ディレクトリのdirector.propertiesファイルに次のプロパティを追加します。コマンドライン・ツールでRMI APIを使用できるように、management.portの設定を8090のままにします。

    management.jndiname=java:comp/env/jmx/runtime

6.2 JMX Beanネーミングについて

EDQ JMX Beanで使用されるネーミング・スキーマは、Jconsoleで十分に機能するように設計されています。しかし、他のJMXクライアントが変更されたネーミング・スキームを必要とする場合があります。

EDQ JMX Beanで使用される名前は、適切なJavaScriptまたはGroovyファイルを作成して構成ディレクトリに配置し、director.propertiesmanagement.namemaker.scriptfileプロパティでそのファイルの存在を指定することにより、カスタマイズできます

6.2.1 例の確認

この例では、type属性を名前の最後に追加することで、デフォルトのEDQ JMX Beanネーミング・スキームを変更する方法を示します。type属性はJava Beanクラスに基づきます。

  1. 構成ディレクトリにjmxnames.jsという名前のファイルを作成し、次のJavaScriptを追加します。
    /**	
    * Adds a type attribute to the name of a JMX Beans.	
    * 
    * @param beanclass The bean class name	
    * @param domain The domain name	
    * @param names The name strings 
    * 
    * @return The name string	
    */	
    function objectNameFor(beanclass, domain, names) 
    {	
    var type = beanclass == null ? "*" : beanclass.substring(beanclass.lastIndexOf('.') + 1); 
    var out;	
    /*	
    * The names array always has 2 elements.	
    */	
    out = domain + ":" + "component=" + escape(names[0]) + ",name=" + escape(names[1]);	
    for (var i = 2; i < names.length; i++)	
    {	
    var index = i-1	
    out += "," + "name" + index + "=" + escape(names[i]);	
    }	
    return out + ",type=" + type;	
    }	
    
  2. director.propertiesファイルに次の行を追加します。

    management.namemaker.scriptfile = jmxnames.js

  3. EDQアプリケーション・サーバーを再起動します。

    JMX Beansでは名前の最後に型修飾子が含まれるようになります。

6.3 リアルタイム・プロセスの監視

EDQには、その運用にかかわる様々な状態を監視するために使用できる組込みJMXサーバーが付属しています。EDQアプリケーションを構成する多くのオブジェクトとリソースは、リアルタイムWebサービスを含む、MBeansをJMXサーバーに提供します。

6.3.1 リアルタイムWebサービスMBeansの監視

各リアルタイムWebサービスは、MBeanをそのリーダーと、JMXツリーのライターに登録します。

リーダーを次の場所に登録します。

Runtime/Data/Buckets/Realtime/Projects/Project Name/readers/Web service name

ライターを次の場所に登録します。

Runtime/Data/Buckets/Realtime/Projects/Project Name/writers/Web service name

いずれの場合も、MBeanへのパスには、それを所有するWebサービス、およびWebサービスを含むプロジェクトの名前が含まれます。

Global Webサービス(oedq_local_home/webservicesディレクトリの.jarファイルにデプロイ済)には別のパス名があります。上のパスのProjects/Project Nameを、単純にGlobalに置き換えてください。

内部JMXサーバーのポートは、management.portプロパティによって制御され、director.propertiesファイルで定義されます。

6.3.2 リアルタイムMBeansの監視

JConsoleなどの一般的なJMXコンソールを使用して、MBeansと対話できます。個々のMBeanは次を公開します。

  • その値を読み取ることができる属性。

  • 起動してMBeanでいくつかのアクションを実行できる操作。

  • クライアントがMBeanで発生するイベントの通知をサブスクライブできるインタフェース。

EDQリアルタイムWebサービスMBeansは次の属性を使用します。

属性 説明

closetime

バケットが最後に閉じられた時間。

concurrent

同期リクエストの現在の数。

maxConcurrent

バケットが開かれてからの同時同期リクエストの最大数。

maxConcurrentMax

起動時以降の同時同期リクエストの最大数。

messages

バケットが開かれてから処理されたメッセージ数。

open

バケットが開いているかまたは閉じているかを示します。

openCount

起動時以降のバケットが開かれた回数。

opentime

バケットが最後に開かれた時間。

processtime

最後のメッセージが処理された時間。

records

バケットが開かれてから処理されたレコード数。

threads

最後に開かれたときにバケットを使用したスレッドの数。

totalMessages

起動時以降に処理されたメッセージの数。

totalRecords

起動時以降に処理されたレコードの数。

EDQリアルタイムWebサービスMBeansは次の操作を公開します。

属性 説明

closedown

このバケットを使用してリーダーまたはライターを停止します。

6.4 REST APIを使用したMBeanへのアクセスおよび管理

EDQは、多数のJMX MBeanを定義しています。これらのサブセットは、通常、キー設定のモニターまたは変更に使用されます。これには次が含まれます:

  • Webサービス・ステータスのモニターに使用されるバケットMBean。
  • ロギング・レベルの制御に使用されるロギングMBean。
  • Git統合で一般的に使用される、ソース・コード制御ワークスペースの再スキャンをトリガーする操作を含むSCCS MBean。
  • ランタイム・スレッドを設定できるランタイムMBean。

JConsoleまたはスクリプトを使用してこれらのMBeanにアクセスできますが、これは効率的でなく、ファイアウォールで問題が発生する可能性があります。EDQ 14.1.2.0.0では、MBean属性の読取りと書込み、およびMBean操作の呼出しを可能にするREST APIが導入されています。

6.4.1 Web対応MBean

RESTインタフェースを持つMBeanには、MBean記述子に追加の属性が含まれます。これらはJConsoleで表示できます。次に、リアルタイム・リーダーMBeanの例を示します:
リアルタイム・リーダーMBean

web.path属性は、MBeanにアクセスするためにhttp://server/edqの後に使用されるパスです。web.permission属性は、MBeanへのアクセスに必要な権限を示しています。

次のMBeanは、14.1.2.0.0でWeb対応です:

MBean 説明 必要な権限 Webパス

ロガー制御

ロガー制御MBeanは、EDQに登録されている個々のロガーのロギング・レベルを問合せおよび設定する操作を提供します。

システム管理

Webパスは次のとおりです:

/management/mbeans/Logging/loggerpath

たとえば、

/management/mbeans/Logging/OCI%20support

ランタイム・データ・ネクサス

データ・ネクサスMBeanは、ランタイム・データの環境変数を設定および問合せする操作を提供します。主な使用例は、"randomator"バケットにレコード数を設定することです。たとえば、

<randomsource count="$randcount:10000" seed="$randseed">

システム管理

MBeanへのパスは次のとおりです

/management/mbeans/Runtime/Data/Nexus

バケット・プロバイダおよびコンシューマ

これらのMBeanは、リアルタイム・プロバイダおよびコンシューマのステータス情報を提供します。属性には、オープン状態とアクティブ状態、およびレコード数が含まれます。

「メッセージング・システムへの接続」および該当するプロジェクトへのアクセス権

Webパスは次のとおりです:

  • グローバル・プロバイダ - /management/mbeans/Runtime/Data/Buckets/realtime/Global/readers/providers/NAME
  • グローバル・コンシューマ - /management/mbeans/Runtime/Data/Buckets/realtime/Global/writers/consumers/NAME
  • プロジェクトWebサービス・リーダー - /management/mbeans/Runtime/Data/Buckets/realtime/Projects/PROJECTNAME/readers/WEBSERVICE
  • プロジェクトWebサービス・ライター - /management/mbeans/Runtime/Data/Buckets/realtime/Projects/PROJECTNAME/writers/WEBSERVICE

ランタイム・エンジン

ランタイム・エンジンMBeanは、通常モードおよび間隔モードで使用されるスレッド数を制御する属性を提供します。更新後の値は、次回ジョブが開始されたときに有効になりますが、サーバーの再起動後は保持されません。

システム管理

MBeanへのパスは次のとおりです

/management/mbeans/Runtime/Engine

ソース・コード制御

ソース・コード制御MBeanは、変更のためにワークスペースの場所を再スキャンする操作を提供します。主な使用例は、プル操作後のGit統合です。Webインタフェースは、EDQに付属するscan.groovyスクリプトの代替手段を提供します。

システム管理

MBeanへのパスは次のとおりです

/management/mbeans/SCCS/Controller

ファイル・サーバー制御

このMBeanは、構成およびログ・ファイルへのWebアクセスを構成するために使用できます。

システム管理

「HTTPおよびHTPSサーバーを使用したEDQファイルへのアクセス」を参照してください。

6.4.2 MBean用のREST API

MBean用のREST APIを使用すると、次を実行できます:

  • MBean属性の読取り
  • MBean属性の設定
  • MBean操作の呼出し

MBean属性の読取り

GET http://server:port/edq/mbeanpath[?attributes=attr1,attr2]

mbeanpathコンポーネントは、「Web対応MBean」に記載されているMBean Webパスです。オプションのattributesパラメータには、返される属性をリストします。省略すると、すべての属性が返されます。

結果は、属性値を含むJSONオブジェクトです。

たとえば、プロジェクトrt内のsummerというWebサービスのactiveおよびopen属性を取得する場合、URLはhttp://server:port/edq/management/mbeans/Runtime/Data/Buckets/realtime/Projects/rt/readers/summer?attributes=active,openになります

結果は次のようになります:

{ "active": 0,
  "open": 0
}

MBean属性の設定

POST http://server:port/edq/mbeanpath/setattribute

ペイロードは、次の属性を含むJSONオブジェクトです:

属性 タイプ 説明

attribute

文字列

MBean属性名。

value

属性のタイプと一致することが必要

属性の新しい値。

結果は、MBean属性の前の値に設定された属性previousvalueを含むJSONオブジェクトです。

たとえば、ランタイム・スレッド数を4に設定する場合、URLは次のようになります:

http://server:port/edq/management/mbeans/Runtime/Engine

ペイロードは次のようになります:

{ "attribute": "processThreads",
  "value": 4
}

MBean操作の呼出し

POST http://server:port/edq/mbeanpath/invoke

ペイロードは、次の属性を含むJSONオブジェクトです:

属性 タイプ 説明

operation

文字列

MBean操作名。

arguments

配列

呼出し引数。

結果は、コールの結果に設定された属性resultを含むJSONオブジェクトです。

たとえば、ケース管理検索のログ・レベルをFINESTに設定する場合、URLは次のようになります:

http://server:port/edq/management/mbeans/Logging/Case%20Management%20Filter%20Execution

ペイロードは次のようになります:

{ "operation": "setLevel",
  "arguments": ["FINEST"]
}

これは、logging.propertiesに次を追加することに対応します。

com.datanomic.director.casemanagement.search.level = finest

ロギングMBeanはパス内のロガーの表示名を使用しますが、logging.propertiesは内部パッケージ名を使用します。MBean module属性でMBeanパッケージを参照するには、実行中のEDQサーバーでMBean JConsoleにアクセスします(edq | ロギング | ケース管理フィルタの実行)。