JMX

功能 > JMX

JMX

Apache ActiveMQ Classic 具有廣泛的 JMX 支援,讓您能夠透過 JMX MBeans 監控和控制代理程式的行為。

使用 JMX 監控 Apache ActiveMQ Classic

您可以啟用/停用 JMX 支援,如下所示…

  1. 執行代理程式,將代理程式屬性 useJmx 設定為 true(預設為啟用),例如:

    針對 xbean 設定

     <broker useJmx="true" brokerName="BROKER1">
     ...
     </broker>
    
  2. 執行 JMX 主控台
    $ jconsole 
    
  3. 如果您在與 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 以上版本)

  1. 請確定已啟用 JMX,但告知 ActiveMQ Classic 不要建立自己的連接器,以便它將使用預設的 JVM JMX 連接器。
     <broker xmlns="http://activemq.org/config/1.0" brokerName="localhost"useJmx="true">
        
       ...
        
       <managementContext>
          <managementContext createConnector="false"/>
       </managementContext>
        
       ...
        
     </broker>
    
  2. 建立存取權和密碼檔案

    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 文件

  3. 修改「activemq」啟動指令碼 (位於 bin 中),以啟用 Java 1.5 以上版本的 JMX 連接器

    找到「ACTIVEMQ_SUNJMX_START=」行,並將其變更為以下內容:(請注意,在 ActiveMQ Classic 的先前版本中,此屬性在某些指令碼中稱為 SUNJMX。從 v5.12.0 開始,所有指令碼都使用 ACTIVEMQ_SUNJMX_START)

    1. 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
      
    2. 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 存取權)

    1. 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
      
    2. 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"
      
  4. 啟動 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 名稱模式清單

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛標誌和 Apache ActiveMQ 專案標誌是 Apache 軟體基金會的商標。版權所有 © 2024,Apache 軟體基金會。在 Apache 授權 2.0 下授權。