如何 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
并且默认代理 name 是 localhost
所以如果你没有不显式配置其中任何一个,并且您想获取地址“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.xml
、management.xml
和 artemis.profile
的修改(以设置 java.rmi.server.hostname
系统 属性)。
如果您手动启动此代理实例,您可以使用 service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
.
通过 JConsole 或 JVisualVM 连接到它
我正在尝试使用 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
并且默认代理 name 是 localhost
所以如果你没有不显式配置其中任何一个,并且您想获取地址“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.xml
、management.xml
和artemis.profile
的修改(以设置java.rmi.server.hostname
系统 属性)。
如果您手动启动此代理实例,您可以使用 service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
.