JMX
JMX
Apache ActiveMQ Classic 具有廣泛的 JMX 支援,讓您能夠透過 JMX MBeans 監控和控制代理程式的行為。
使用 JMX 監控 Apache ActiveMQ Classic
您可以啟用/停用 JMX 支援,如下所示…
-
執行代理程式,將代理程式屬性 useJmx 設定為 true(預設為啟用),例如:
針對 xbean 設定
<broker useJmx="true" brokerName="BROKER1"> ... </broker>
- 執行 JMX 主控台
$ jconsole
- 如果您在與 ActiveMQ Classic 相同的主機上執行 JConsole,ActiveMQ Classic 代理程式應會出現在本機連線清單中。
JMX 遠端存取
基於安全考量,在 activemq.xml 中預設不啟用 JMX 的遠端連線。請參閱 Java 管理指南 以設定代理程式進行遠端管理。
在 OS X 上使用 Apache ActiveMQ Classic 版本時,會顯示如下:
ActiveMQ Classic MBeans 參考
以下提供額外的參考資料,包括 mbean 的簡短階層結構以及每個 mbean 的屬性、特性和操作清單。
Mbean 類型 | 屬性 / ObjectName | 特性 | 操作 |
---|---|---|---|
代理程式 | type=Broker, brokerName=<代理程式識別碼> | BrokerId、TotalEnqueueCount、TotalDequeueCount、TotalConsumerCount、TotalMessageCount、TotalConnectionsCount、TotalConsumerCount、TotalProducerCount、MemoryLimit、MemoryPercentUsage、StoreLimit、StorePercentUsage | start、stop、terminateJVM、resetStatistics、gc |
目的地 | type=Broker, brokerName=<代理程式名稱>, destinationType=Queue|Topic, destinationName=<名稱> | Average、EnqueueTime、ConsumerCount、DequeueCount、EnqueueCount、ExpiredCount、InFlightCount、MemoryLimit、MemoryPercentUsage、Name、QueueSize(僅限佇列) | browseMessages、gc、purge、resetStatistics |
網路連接器 | type=Broker, brokerName==<代理程式名稱>, connector=networkConnectors, networkConnectorName==<連接器識別碼> | Name、Duplex、DynamicOnly、BridgeTempDestinations、ConduitSubscriptions、DecreaseNetworkConsumerPriority、DispatchAsync、DynamicOnly、NetworkTTL、Password、PrefetchSize | start、stop |
連接器 | type=Broker, brokerName=<代理程式名稱>, connector=clientConnectors, ConnectorName==<連接器識別碼> | StatisticsEnabled | start、stop、resetStatistics、enableStatistics、disableStatistics、connectionCount |
連線 | type=Broker, brokerName=<代理程式名稱>, connectionViewType=clientId, connectionName==<連線識別碼> | DispatchQueueSize、Active、Blocked、Connected、Slow、Consumers、Producers、RemoteAddress、UserName、ClientId | start、stop、resetStatistics |
持久性配接器 | type=Broker, brokerName=<代理程式名稱>, Service=PersistenceAdapter, InstanceName==<配接器識別碼> | Name、Size、Data、Transactions | |
健康狀態 | type=Broker, brokerName=<代理程式名稱>, Service=Health | CurrentStatus | health |
也有可用的命令列公用程式,讓您可以監控 ActiveMQ Classic。如需使用資訊,請參閱 ActiveMQ Classic 命令列工具參考。
JMX API 也透過 REST 管理 API 公開。
密碼保護 JMX 連接器
(適用於 Java 1.5 以上版本)
- 請確定已啟用 JMX,但告知 ActiveMQ Classic 不要建立自己的連接器,以便它將使用預設的 JVM JMX 連接器。
<broker xmlns="http://activemq.org/config/1.0" brokerName="localhost"useJmx="true"> ... <managementContext> <managementContext createConnector="false"/> </managementContext> ... </broker>
-
建立存取權和密碼檔案
conf/jmx.access
# The "monitorRole" role has readonly access. # The "controlRole" role has readwrite access. monitorRole readonly controlRole readwrite
conf/jmx.password
# The "monitorRole" role has password "abc123". # The "controlRole" role has password "abcd1234". monitorRole abc123 controlRole abcd1234
(請確定這兩個檔案都不是任何人都可以讀取的 - 如需保護檔案的詳細資訊,請參閱這裡)
如需更多詳細資訊,您可以參閱監控 Tomcat 文件
-
修改「activemq」啟動指令碼 (位於 bin 中),以啟用 Java 1.5 以上版本的 JMX 連接器
找到「ACTIVEMQ_SUNJMX_START=」行,並將其變更為以下內容:(請注意,在 ActiveMQ Classic 的先前版本中,此屬性在某些指令碼中稱為 SUNJMX。從 v5.12.0 開始,所有指令碼都使用 ACTIVEMQ_SUNJMX_START)
- Windows
ACTIVEMQ_SUNJMX_START=-Dcom.sun.management.jmxremote.port=1616 -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.password.file=%ACTIVEMQ_BASE%/conf/jmx.password \ -Dcom.sun.management.jmxremote.access.file=%ACTIVEMQ_BASE%/conf/jmx.access
- Unix
ACTIVEMQ_SUNJMX_START="-Dcom.sun.management.jmxremote.port=1616 -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_BASE}/conf/jmx.password \ -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_BASE}/conf/jmx.access"
這可以在 /etc/activemq.conf 中設定 (如果您具有 root 存取權)
- Windows
ACTIVEMQ_HOME=DRIVE_LETTER:/where/ActiveMQ/is/installed ACTIVEMQ_BASE=%ACTIVEMQ_HOME% ACTIVEMQ_SUNJMX_START=-Dcom.sun.management.jmxremote.port=1616 -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.password.file=%ACTIVEMQ_BASE%/conf/jmx.password \ -Dcom.sun.management.jmxremote.access.file=%ACTIVEMQ_BASE%/conf/jmx.access
- Unix
ACTIVEMQ_HOME=DRIVE_LETTER:/where/ActiveMQ/is/installed ACTIVEMQ_BASE=${ACTIVEMQ_HOME} ACTIVEMQ_SUNJMX_START="-Dcom.sun.management.jmxremote.port=1616 -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_BASE}/conf/jmx.password \ -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_BASE}/conf/jmx.access"
- Windows
- 啟動 ActiveMQ Classic
您應該能夠在 JMX URL 上連線到 JMX
service:jmx:rmi:///jndi/rmi://<your hostname>:1616/jmxrmi
而且您將被迫登入。
選擇性 MBean 註冊
在您需要將代理程式擴展到大量連線、目的地和消費者的情況下,為所有這些物件保留 JMX MBean 會變得非常昂貴。從 5.12.0 開始,您可以選擇性地抑制某些類型的 MBean 註冊,而不是完全關閉 JMX,從而協助您的代理程式擴展,同時仍然可以對代理程式狀態進行基本檢視。
例如,以下設定將排除所有動態生產者、消費者、連線和諮詢主題註冊其 MBean
<managementContext>
<managementContext suppressMBean="endpoint=dynamicProducer,endpoint=Consumer,connectionName=*,destinationName=ActiveMQ.Advisory.*"/>
</managementContext>
ManagementContext 屬性參考
屬性名稱 | 預設值 | 描述 |
useMBeanServer | true | 如果為 true,則避免在 JVM 中已建立 MBeanServer 的情況下建立新的 MBean 伺服器 |
jmxDomainName | org.apache.activemq | 所有物件名稱將使用的 jmx 網域 |
createMBeanServer | true | 如果未找到 MBeanServer,是否應建立 MBeanServer。 |
createConnector | false | 請參閱 Java 管理指南 以設定伺服器進行遠端管理,並使用適當的 jdk.serialFilter 鎖定端點序列化 注意:如果設定為 true * 使用適當的 jdk.serialFilter 鎖定端點序列化 * 設定 rmiServerPort 和 connectorHost 以鎖定 RMI 伺服器介面繫結 |
connectorPort | 1099 | JMX 連接器將使用的連接埠 |
connectorHost | localhost | JMX 連接器和 RMI 伺服器 (如果 rmiServerPort>0) 將使用的主機 |
rmiServerPort | 0 | RMI 伺服器連接埠,如果需要在防火牆後方限制連接埠使用,則非常方便 |
connectorPath | /jmxrmi | JMX 連接器將在其下註冊的路徑 |
findTigerMBeanServer | true | 啟用/停用搜尋 Java 5 平台 MBeanServer |
suppressMBean | 要忽略的 MBean 名稱模式清單 |