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 类型 属性/对象名  特性 操作
代理 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 MBeans 会变得非常昂贵。从 5.12.0 开始,您可以选择性地抑制某些类型 MBean 的注册,而不是完全关闭 JMX,从而帮助您的代理扩展,同时仍然可以基本了解代理状态。

例如,以下配置将排除所有动态生产者、使用者、连接和咨询主题注册其 MBeans

<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,则没有找到。
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 许可。