170.3. Camel で JMX を有効にする
Camel 2.8 以前に必要な Spring JAR 依存関係
JMX インストルメンテーションを使用できるようにするには、Camel がクラスパスで spring-context.jar
、spring -aop.jar
、spring -beans.jar
、および spring-core.jar
を必要とします。これらの .jar がクラスパスにない場合、Camel は非 JMX モードにフォールバックします。この状況は、ロガー名 org.apache.camel.impl.DefaultCamelContext
を使用して WARN
レベルで記録されます。
Camel 2.9 以降、JMX モードで Camel を実行するために Spring JAR は 不要 になりました。
170.3.1. JMX を使用して Apache Camel を管理する
デフォルトでは、JMX 計測エージェントは Camel で有効になっています。これは、Camel ランタイムが MBean 管理オブジェクトを作成し、VM の MBeanServer
インスタンスに登録することを意味します。これにより、Camel ユーザーは、Camel ルートが個々のプロセッサーレベルでどのように実行されるかについての洞察を即座に得ることができます。
サポートされている管理オブジェクトのタイプは、endpoint、route、service、および processor です。これらの管理オブジェクトの一部は、パフォーマンスカウンター属性に加えて、ライフサイクル操作も公開します。
DefaultManagementNamingStrategy
は、MBean 登録に使用されるオブジェクト名を構築するデフォルトの命名ストラテジーです。デフォルトでは、org.apache.camel は
CamelNamingStrategy
によって作成されたすべてのオブジェクト名のドメイン名です。MBean オブジェクトのドメイン名は、Java VM システムプロパティーで設定できます。
-Dorg.apache.camel.jmx.mbeanObjectDomainName=your.domain.name
または、Spring 設定の camelContext 要素内に jmxAgent
要素を追加することによって:
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <jmxAgent id="agent" mbeanObjectDomainName="your.domain.name"/> ... </camelContext>
Spring 設定は、両方が存在する場合、システムプロパティーよりも常に優先されます。これは、すべての JMX 関連の設定に当てはまります。
170.3.2. Camel で JMX インストルメンテーションエージェントを無効にする
Java VM システムプロパティーを次のように設定することで、JMX インストルメンテーションエージェントを無効にできます。
-Dorg.apache.camel.jmx.disabled=true
プロパティー値は boolean
として扱われます。
または、Spring 設定の camelContext
要素内に jmxAgent
要素を追加することによって:
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <jmxAgent id="agent" disabled="true"/> ... </camelContext>
または、Camel 2.1 では、次のように無効にできるため、純粋な Java を使用している場合は少し簡単です (JVM システムプロパティーを使用する必要はありません)。
CamelContext camel = new DefaultCamelContext(); camel.disableJMX();
170.3.3. Java VM での MBeanServer の検索
各 CamelContext は、InstrumentationLifecycleStrategy
内にラップされた InstrumentationAgent
のインスタンスを持つことができます。InstrumentationAgent は、Camel MBean を登録/登録解除するために MBeanServer
とやり取りするオブジェクトです。複数の CamelContexts/InstrumentationAgent が MBeanServer
を共有できる/共有する必要があります。デフォルトでは、Camel ランタイムは、MBeanServerFactory.findMBeanServer メソッド によって返された最初の MBeanServer
を選択します。これは、org.apache.camel
のデフォルトドメイン名と一致します。
アプリケーションですでに使用している MBeanServer
インスタンスに一致するように、デフォルトのドメイン名を変更したい場合があります。特に、MBeanServer
が JMX コネクターサーバーに接続されている場合、Camel でコネクターサーバーを作成する必要はありません。
システムプロパティーを使用して、一致するデフォルトドメイン名を設定できます。
-Dorg.apache.camel.jmx.mbeanServerDefaultDomain=<your.domain.name>
または、Spring 設定の camelContext 要素内に jmxAgent
要素を追加することによって:
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <jmxAgent id="agent" mbeanServerDefaultDomain="your.domain.name"/> ... </camelContext>
一致する MBeanServer
が見つからない場合は、新しい MBeanServer が作成され、新しい `MBeanServer のデフォルトドメイン名が、上記のデフォルトおよび設定に従って設定されます。
システムプロパティーを設定して JVM MBean を管理することが望ましい場合は、PlatformMBeanServer
を使用することもできます。MBeanServer
のデフォルトのドメイン名設定は、適用できないため無視されます。
次のリリース (1.5) から、usePlatformMBeanServer
のデフォルト値は true
に変更されます。プロパティーを false
に設定して、プラットフォーム MBeanServer
の使用を無効にすることができます。
-Dorg.apache.camel.jmx.usePlatformMBeanServer=True
または、Spring 設定の camelContext
要素内に jmxAgent
要素を追加することによって:
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <jmxAgent id="agent" usePlatformMBeanServer="true"/> ... </camelContext>
170.3.4. JMX RMI コネクターサーバーの作成
JMX コネクターサーバーを使用すると、JConsole などの JMX クライアントによって MBean をリモートで管理できます。Camel JMX RMI コネクターサーバーは、システムプロパティーを設定することでオプションで有効にすることができ、Camel が使用する MBeanServer
はそのコネクターサーバーに接続されます。
-Dorg.apache.camel.jmx.createRmiConnector=True
または、Spring 設定の camelContext
要素内に jmxAgent
要素を追加することによって:
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <jmxAgent id="agent" createConnector="true"/> ... </camelContext>
170.3.5. JMX Service URL
デフォルトの JMX サービス URL の形式は次のとおりです。
service:jmx:rmi:///jndi/rmi://localhost:<registryPort>/<serviceUrlPath>
registryPort
は RMI レジストリーポートで、デフォルト値は 1099
です。
システムプロパティーで RMI レジストリーポートを設定できます。
-Dorg.apache.camel.jmx.rmiConnector.registryPort=<port number>
または、Spring 設定の camelContext
要素内に jmxAgent
要素を追加することによって:
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <jmxAgent id="agent" createConnector="true" registryPort="port number"/> ... </camelContext>
serviceUrlPath
は URL のパス名で、デフォルト値は /jmxrmi/camel
です。
システムプロパティーでサービス URL パスを設定できます。
-Dorg.apache.camel.jmx.serviceUrlPath=<path>
Java での ManagementAgent 設定の設定
Camel 2.4 以降では、ManagementAgent
でさまざまなオプションを設定することもできます。
context.getManagementStrategy().getManagementAgent().setServiceUrlPath("/foo/bar"); context.getManagementStrategy().getManagementAgent().setRegistryPort(2113); context.getManagementStrategy().getManagementAgent().setCreateConnector(true);
または、Spring 設定の camelContext 要素内に jmxAgent
要素を追加することによって:
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <jmxAgent id="agent" createConnector="true" serviceUrlPath="path"/> ... </camelContext>
デフォルトでは、RMI サーバーオブジェクトは動的に生成されたポートをリッスンします。これは、ファイアウォール経由で確立された接続で問題になる可能性があります。このような状況では、RMI 接続ポートをシステムプロパティーで明示的に設定できます。
-Dorg.apache.camel.jmx.rmiConnector.connectorPort=<port number>
または、Spring 設定の camelContext
要素内に jmxAgent
要素を追加することによって:
<camelContext id="camel" xmlns="http://activemq.apache.org/camel/schema/spring"> <jmxAgent id="agent" createConnector="true" connectorPort="port number"/> ... </camelContext>
コネクターポートオプションが設定されている場合、JMX サービス URL は次のようになります。
service:jmx:rmi://localhost:<connectorPort>/jndi/rmi://localhost:<registryPort>/<serviceUrlPath>
170.3.6. Camel JMX サポートのシステムプロパティー
Property Name | value | 説明 |
---|---|---|
|
|
|
以下のこのセクションで、システムプロパティーの詳細を参照してください: jmxAgent プロパティーリファレンス。
170.3.7. JMX で認証を使用する方法
JDK の JMX には、認証のための機能と、SSL を介した安全な接続を使用するための機能があります。これを使用する方法については、SUN のドキュメントを参照する必要があります。
170.3.8. アプリケーションサーバー内の JMX
170.3.8.1. Tomcat 6
Tomcat で JMX を有効にする方法の詳細については、このページ を参照してください。
つまり、catalina.sh (Windows では catalina.bat) ファイルを変更して、次のオプションを設定します。
set CATALINA_OPTS=-Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port=1099 \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false
170.3.8.2. JBoss AS 4
デフォルトでは、JBoss は独自の MBeanServer
を作成します。Camel が同じサーバーに公開できるようにするには、次の手順に従います。
-
プラットフォーム
MBeanServer
を使用するように Camel に指示します (Camel 1.5 ではデフォルトで true になります)。
<camel:camelContext id="camelContext"> <camel:jmxAgent id="jmxAgent" mbeanObjectDomainName="org.yourname" usePlatformMBeanServer="true" /> </camel:camelContext>
-
Platform
MBeanServer
を使用するように JBoss インスタンスを変更します。run.sh
またはrun.conf
-Djboss.platform.mbeanserver
を編集して、次のプロパティーをJAVA_OPTS
に追加します。See http://wiki.jboss.org/wiki/JBossMBeansInJConsole
170.3.8.3. WebSphere
mbeanServerDefaultDomain
を WebSphere
に変更します。
<camel:jmxAgent id="agent" createConnector="true" mbeanObjectDomainName="org.yourname" usePlatformMBeanServer="false" mbeanServerDefaultDomain="WebSphere"/>
170.3.8.4. Oracle OC4j
Oracle OC4J J2EE アプリケーションサーバーは、Camel がプラットフォーム MBeanServer
にアクセスすることを許可しません。Camel は WARNING
をログに記録するため、ログでこれを識別できます。
xxx xx, xxxx xx:xx:xx xx org.apache.camel.management.InstrumentationLifecycleStrategy onContextStart WARNING: Could not register CamelContext MBean java.lang.SecurityException: Unauthorized access from application: xx to MBean: java.lang:type=ClassLoading at oracle.oc4j.admin.jmx.shared.UserMBeanServer.checkRegisterAccess(UserMBeanServer.java:873)
これを解決するには、Camel で JMX エージェントを無効にする必要があります。Camel で JMX インスツルメンテーションエージェントを無効にする セクションを参照してください。
170.3.9. 高度な JMX 設定
Spring 設定ファイルを使用すると、管理のために Camel を JMX に公開する方法を設定できます。場合によっては、コネクターのポートやパス名などの詳細情報をここで指定できます。
170.3.10. 例:
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <jmxAgent id="agent" createConnector="true" registryPort="2000" mbeanServerDefaultDomain="org.apache.camel.test"/> <route> <from uri="seda:start"/> <to uri="mock:result"/> </route> </camelContext>
Java 5 JMX 設定を変更する場合は、さまざまな JMX システムプロパティー を使用できます。
たとえば、次の環境変数を設定することにより (プラットフォームに応じて set または export を使用)、Sun JMX コネクターへのリモート JMX 接続を有効にすることができます。これらの設定は、Java 1.5+ 内の Sun JMX コネクターのみを設定し、Camel がデフォルトで作成する JMX コネクターは設定しません。
SUNJMX=-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=1616 \ -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
(SUNJMX 環境変数は、JVM の追加の起動パラメーターとして、Camel の起動スクリプトによって単純に使用されます。Camel を直接起動する場合は、これらのパラメーターを自分で渡す必要があります。)
170.3.11. jmxAgent
プロパティーリファレンス
Spring プロパティー | System プロパティー | デフォルト値 | 説明 |
---|---|---|---|
|
|
| JMX エージェント名。オプションではありません |
|
|
|
|
|
|
|
|
|
|
| すべてのオブジェクト名が使用する JMX ドメイン |
|
|
|
|
|
|
| JMX RMI レジストリーが使用するポート |
|
| -1 (動的) | JMX RMI サーバーが使用するポート |
|
|
| JMX コネクターが登録されるパス |
|
|
| Camel 2.0: このオプションを有効にすると、カスタム ID セットを持つプロセッサーのみが登録されます。これにより、JMX コンソールで不要なプロセッサーを除外できます。 |
|
|
| Camel 2.1: MBean のパフォーマンス統計情報を有効にするかどうかのレベルを設定します。詳細については、パフォーマンス統計情報の粒度レベルの設定 セクションを参照してください。Camel 2.16 以降では、All オプションの名前が Default に変更され、追加のランタイム JMX メトリックを収集できる新しい Extended オプションが導入されました。 |
|
|
|
Camel 2.13: MBean の命名にホスト名を含めるかどうか。Camel 2.13 以降では、これはデフォルトの |
|
|
| Camel 2.16: リモートコネクターの作成時にサービス URL でホスト名または IP アドレスを使用するかどうか。デフォルトでは、ホスト名が使用されます。 |
|
|
| Camel 2.16: 負荷統計情報を有効にするかどうか (CamelContext ごとにバックグラウンドスレッドを使用して負荷統計情報を収集します)。 |
|
|
| Camel 2.16: エンドポイントのランタイム統計情報を有効にするかどうか (各入力エンドポイントおよび出力エンドポイントのランタイム使用状況を収集します)。 |
170.3.12. MBean を常に登録するか、新しいルートに登録するか、デフォルトでのみ登録するかの設定
Camel 2.7 以降で利用可能
Camel は、mbeans を登録するかどうかを制御する 2 つの設定を提供するようになりました
オプション | デフォルト | 説明 |
---|---|---|
|
| 有効にすると、MBean は常に登録されます。 |
|
| 有効にすると、CamelContext が開始された後に新しいルートを追加すると、その特定のルートから MBean も登録されます。 |
デフォルトでは、Camel は起動時に設定されたすべてのルートに MBean を登録します。registerNewRoutes
オプションは、後で新しいルートを追加する場合に MBean も登録する必要があるかどうかを制御します。たとえば、管理が不要な一時的なルートを追加および削除する場合は、これを無効にすることができます。
一意のエンドポイントを持つ受信者リストなどの動的 EIP パターンを使用する場合は、registerAlways
オプションを使用するように少し注意してください。その場合、それぞれの固有のエンドポイントとそれに関連付けられたサービス/プロデューサーも登録されます。これは、レジストリー内の mbean の数が増加するため、システムの機能低下につながる可能性があります。MBean は軽量オブジェクトではないため、メモリーを消費します。