6.2. JMX を使用した AMQ Broker の管理
JMX (Java Management Extensions) を使用してブローカーを管理できます。管理 API は、MBean インターフェイスを使用してブローカーによって公開されます。ブローカーは、リソースをドメイン org.apache.activemq
に登録します。
たとえば、exampleQueue
という名前のキューを管理するための ObjectName
は次のとおりです。
org.apache.activemq.artemis:broker="__BROKER_NAME__",component=addresses,address="exampleQueue",subcomponent=queues,routingtype="anycast",queue="exampleQueue"
MBean は以下のようになります。
org.apache.activemq.artemis.api.management.QueueControl
MBean の ObjectName
は、ヘルパークラス org.apache.activemq.artemis.api.core.management.ObjectNameBuilder
.を使用して構築されます。jconsole を使用して、管理する MBean の ObjectName
を見つけることもできます。
JMX を使用したブローカーの管理は、JMX を使用した Java アプリケーションの管理と同じです。これは、リフレクションまたは MBean のプロキシーを作成して実行できます。
6.2.1. JMX 管理の設定
デフォルトでは、JMX はブローカーの管理に有効になっています。JMX 管理を有効または無効にするには、broker.xml
設定ファイルで jmx-management-enabled
プロパティーを設定します。
手順
-
<broker_instance_dir>/etc/broker.xml
設定ファイルを開きます。 <jmx-management-enabled>
を設定します。<jmx-management-enabled>true</jmx-management-enabled>
JMX が有効になっている場合、ブローカーは
jconsole
を使用してローカルで管理できます。注記セキュリティー上の理由から、JMX へのリモート接続はデフォルトで有効になっていません。
同じ
MBeanServer
から複数のブローカーを管理する場合は、各ブローカーに JMX ドメインを設定します。デフォルトでは、ブローカーは JMX ドメイン
org.apache.activemq.artemis
を使用します。<jmx-domain>my.org.apache.activemq</jmx-domain>
注記Windows システムで AMQ Broker を使用している場合は、
artemis
またはartemis.cmd
でシステムプロパティーを設定する必要があります。シェルスクリプトは<install_dir>/bin
の下にあります。
関連情報
- リモート管理用のブローカーの設定に関する詳細は、Oracle の Java Management Guide を参照してください。
6.2.2. JMX 管理アクセスの設定
デフォルトでは、セキュリティー上の理由から、ブローカへのリモート JMX アクセスは無効になっています。ただし、AMQ Broker には、JMX MBean へのリモートアクセスを許可する JMX エージェントがあります。ブローカー management.xml
設定ファイルに connector 要素を設定して JMX アクセスを有効にします。
com.sun.management.jmxremoteJVM システムプロパティーを使用して JMX アクセスを有効にすることもできますが、その方法はサポートされておらず、安全ではありません。その JVM システムプロパティーを変更すると、ブローカーで RBAC をバイパスできます。セキュリティーリスクを最小限に抑えるために、localhost へのアクセスを制限することを検討してください。
リモート管理のためにブローカーの JMX エージェントを公開すると、セキュリティーに影響があります。
この手順で説明されているように設定を保護するには、次のようにします。
- すべての接続に SSL を使用します。
- コネクターホスト、つまり、エージェントを公開するホストとポートを明示的に定義します。
- RMI (Remote Method Invocation) レジストリーがバインドするポートを明示的に定義します。
前提条件
- 作業中のブローカーインスタンス
-
Java の
jconsole
ユーティリティー
手順
-
<broker-instance-dir>/etc/management.xml
設定ファイルを開きます。 JMX エージェントのコネクターを定義します。connector-port 設定は、jconsole などのクライアントが JMX コネクターサーバーに対してクエリーを実行する RMI レジストリーを確立します。たとえば、ポート 1099 でのリモートアクセスを許可するには、次のようにします。
<connector connector-port="1099"/>
jconsole
を使用して、JMX エージェントへの接続を確認します。service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
以下で説明するように、コネクターに追加のプロパティーを定義します。
- connector-host
-
エージェントを公開するブローカーサーバーホスト。リモートアクセスを防ぐには、
connector-host
を127.0.0.1
(localhost) に設定します。 - rmi-registry-port
- JMX RMI コネクターサーバーがバインドするポート。設定されていない場合、ポートは常にランダムです。このプロパティーを設定して、ファイアウォールを通過するリモート JMX 接続の問題を回避します。
- jmx-realm
-
認証に使用する JMX レルム。デフォルト値は、JAAS 設定に一致する
activemq
です。 - object-name
-
リモートコネクターを公開するオブジェクト名。デフォルト値は
connector:name=rmi
です。 - 安全な
-
コネクターが SSL を使用して保護されているかどうかを指定します。デフォルト値は
false
です。通信をセキュアにするには、値をtrue
に設定します。 - key-store-path
-
キーストアの場所。
secured="true"
を設定している場合は必須です。 - key-store-password
-
キーストアパスワード
secured="true"
を設定している場合は必須です。このパスワードは暗号化できます。 - key-store-provider
-
キーストアプロバイダー。
secured="true"
を設定している場合は必須です。デフォルト値はJKS
です。 - trust-store-path
-
トラストストアの場所。
secured="true"
を設定している場合は必須です。 - trust-store-password
-
トラストストアのパスワード
secured="true"
を設定している場合は必須です。このパスワードは暗号化できます。 - trust-store-provider
-
トラストストアプロバイダー。
secured="true"
を設定している場合は必須です。デフォルト値はJKS
です。 - password-codec
- 使用するパスワードコーデックの完全修飾クラス名。この仕組みの詳細については、以下にリンクされているパスワードマスキングのドキュメントを参照してください。
-
Java Platform ドキュメント に記載されているように、
jdk.serialFilter
を使用してエンドポイントシリアライゼーションに適切な値を設定します。
関連情報
- 設定ファイル内の暗号化されたパスワードの詳細については、設定ファイル内のパスワードの暗号化 を参照してください。
6.2.3. MBeanServer の設定
ブローカーがスタンドアロンモードで動作しているときは、Java 仮想マシンの Platform MBeanServer
を使用して MBeans を登録します。デフォルトでは、Jolokia もデプロイされ、REST を使用した MBean サーバーへのアクセスを許可します。
6.2.4. Jolokia で JMX を公開する方法
デフォルトでは、AMQ Broker には Web アプリケーションとしてデプロイされた Jolokia HTTP エージェントが同梱されます。Jolokia は、MBean を公開する HTTP ブリッジ上のリモート JMX です。
Jolokia を使用するには、ユーザーは <broker_instance_dir>/etc/artemis.profile
設定ファイルの hawtio.role
システムプロパティーによって定義されたロールに属している必要があります。デフォルトでは、このロールは amq
です。
例6.1 Jolokia を使用したブローカーのバージョンのクエリー
この例では、Jolokia REST URL を使用してブローカーのバージョンを検索します。Origin
フラグは、ブローカーサーバーのドメイン名または DNS ホスト名を指定する必要があります。さらに、Origin
に指定する値は、Jolokia Cross-Origin Resource Sharing (CORS) 仕様の <allow-origin>
のエントリーに対応している必要があります。
$ curl http://admin:admin@localhost:8161/console/jolokia/read/org.apache.activemq.artemis:broker=\"0.0.0.0\"/Version -H "Origin: mydomain.com" {"request":{"mbean":"org.apache.activemq.artemis:broker=\"0.0.0.0\"","attribute":"Version","type":"read"},"value":"2.4.0.amq-710002-redhat-1","timestamp":1527105236,"status":200}
関連情報
- JMX-HTTP ブリッジの使用に関する詳細は、Jolokia のドキュメント を参照してください。
- ユーザーをロールに割り当てる方法は、ユーザーの追加 を参照してください。
- CORS(Jolokia Cross-Origin Resource Sharing) の指定に関する詳細は、セキュリティー のセクション 4.1.5 を参照してください。
6.2.5. JMX 管理通知のサブスクライブ
お使いの環境で JMX が有効になっている場合は、管理通知にサブスクライブできます。
手順
-
ObjectName org.apache.activemq.artemis:broker="<broker-name>"
にサブスクライブします。
関連情報
- 管理通知の詳細は、「管理通知」 を参照してください。