如何 find/define ActiveMQ Artemis 监控的 JMX 密钥

How to find/define JMX key for ActiveMQ Artemis monitoring

我正在尝试使用 Zabbix 设置对 ActiveMQ Artemis 的监控。我的目的是监控 Artemis 的可用性,并监控队列中累积的消息的大小和数量,并设置警报。

我在 Artemis 上启用了 JMX 作为结构中的文档,并构建了 JMX 示例。据我所知,这只涉及将以下行添加到代理中的这两个文件中:

management.xml

<connector connector-port="1099" connector-host="192.168.56.101" />

打开端口: sudo ufw 允许 1099

broker.xml

<jmx-management-enabled>true</jmx-management-enabled>

所以我认为 JMX 已启用,虽然我还没有设法确认这一点。

在 Zabbix 中,我添加了“主机”(要监控的系统),但下一步是创建“项目”(系统上的东西)。为此,我需要一个 JMX 密钥,类似于 jmx["java.lang:type=Memory","HeapMemoryUsage.used"]。 (我试过这个,但没有得到任何数据)这定义了要调用的 MBean。

那么我在哪里可以找到用于在 Artemis 上监视的可用内容的密钥?还是我在这里搞砸了,没有在寻找正确的东西?

示例中有一个JMWExample.java程序。它连接到 Artemis,发布消息,使用 JMX 计算消息数量,然后删除消息——但我没有看到任何指向 MBean 的键。

此外,在 Artemis 的管理控制台中有一个 JMX 选项卡,其中列出了我认为所有可用的要监控的东西。例如,我有一个名为“test.queue”。在 JMX 选项卡下,我发现:

org.apache.activemq.artemis:broker="0.0.0.0",component=addresses,address="test.topic",subcomponent=queues,routing-type="multicast",queue="test.queue" 

并且列出了许多方法,包括 countMessages()。我在这里回答了我自己的问题吗?这就是我要找的吗?

如果是这样,它如何适应这种密钥格式,jmx[object_name,attribute_name]

{编辑}

我正在查看控制台上的 JMX 选项卡。如果我理解正确的话,密钥的格式应该是这样的:jmx[object_name,attribute_name]

所以我看到我的一个测试队列的 JMX 选项卡下的对象名称是:org.apache.activemq.artemis:broker="0.0.0.0",component=addresses,address="test.topic ",subcomponent=queues,routing-type="multicast",queue="test.queue"

它有一个属性:MessageCount

所以我尝试了这个,但没有用。我还尝试用 IP 地址替换 0.0.0.0。

jmx[org.apache.activemq.artemis:broker="0.0.0.0",component=addresses,address="test.topic",subcomponent=queues,routing-type="multicast",queue=" test.queue",MessageCount]

<jmx-management-enabled> 的默认值为 true,因此您 不需要 明确配置它。

您可以通过使用 JVM 附带的 JConsole 或 JVisualVM 等工具连接到代理来确认 JMX 已启用。理想情况下,您应该在本地执行此操作以避免任何网络配置问题。

代理公开了许多不同的 MBean 来管理代理的所有部分。以下是不同的“控制”对象及其默认的 MBean 对象命名 pattern:

  • ActiveMQServerControl: <domain>:broker=<brokerName>
  • AddressControl: <domain>:broker=<brokerName>,component=addresses,address=<addressName>
  • QueueControl: <domain>:broker=<brokerName>,component=addresses,address=<addressName>,subcomponent=queues,routing-type=<routingType>,queue=<queueName>
  • DivertControl: <domain>:broker=<brokerName>,component=addresses,address=<addressName>,subcomponent=diverts,divert=<divertName>
  • ClusterConnectionControl: <domain>:broker=<brokerName>,component=cluster-connections,name=<clusterConnectionName>
  • AcceptorControl: <domain>:broker=<brokerName>,component=acceptors,name=<acceptorName>
  • BroadcastGroupControl: <domain>:broker=<brokerName>,component=broadcast-groups,name=<broadcastGroupName>
  • BridgeControl: <domain>:broker=<brokerName>,component=bridges,name=<bridgeName>

您使用的“键”将取决于您要检查的控件的属性名称。该名称将对应于属性的“getter”。您可以在链接的 JavaDoc 中看到所有 getter 的所有名称。例如,如果您想从队列中获取消息数,您可以使用键 MessageCount,因为 getter 被命名为 getMessageCount().

domain 默认是 org.apache.activemq.artemis 并且默认代理 namelocalhost 所以如果你没有不显式配置其中任何一个,并且您想获取地址“myAddress”上任播队列“myQueue”的消息计数,您可以使用 like this:

jmx["org.apache.activemq.artemis:broker=\"localhost\",component=addresses,address=\"myAddress\",subcomponent=queues,routing-type=\"anycast\",queue=\"myQueue\"",MessageCount]

此格式基于 this Zabbix block post which is also discussed on this Zabbix forum thread

明确地说,JMXExample you cited 使用一个名为 getQueueObjectName 的方便的辅助方法来构造 MBean 的对象名称。

如果您需要快速启动支持远程 JMX 客户端的代理 运行,请执行以下操作:

  • 在终端中打开目录 examples/features/standard/jmx
  • 运行 使用 mvn clean verify 的示例。
  • 这将在 target/server0 中创建一个完整的代理实例,您可以将其用作配置自己的模板。它包括对 broker.xmlmanagement.xmlartemis.profile 的修改(以设置 java.rmi.server.hostname 系统 属性)。

如果您手动启动此代理实例,您可以使用 service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi.

通过 JConsole 或 JVisualVM 连接到它