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.jmxremote ` JVM システムプロパティーを使用して 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
- 使用するパスワードコーデックの完全修飾クラス名。この仕組みの詳細は、以下にリンクされているパスワードマスキングのドキュメントを参照してください。
注記RMI レジストリーは、バインドする IP アドレスを選択します。システムに複数の IP アドレス/NIC が存在する場合は、
artemis.profile
ファイルに-Djava.rmi.server.hostname=localhost
を追加して、使用する IP アドレスを選択できます。-
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 のドキュメント を参照してください。
- ユーザーをロールに割り当てる方法は、ユーザーの追加 を参照してください。
- Jolokia Cross-Origin Resource Sharing (CORS) の指定の詳細は、セキュリティー のセクション 4.1.5 を参照してください。
6.2.5. JMX 管理通知のサブスクライブ
お使いの環境で JMX が有効になっている場合は、管理通知にサブスクライブできます。
手順
-
ObjectName org.apache.activemq.artemis:broker="<broker-name>"
にサブスクライブします。
関連情報
- 管理通知の詳細は、「管理通知」 を参照してください。