我正在尝试实现一个 nagios 插件,这样做需要我明确知道我想要监视的对象和属性。问题是,我无法在任何地方找到标准系统 jmx 对象和属性的列表。谁能指出我正确的方向?我需要监控内存池、堆大小等。
原文由 Matthew 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在尝试实现一个 nagios 插件,这样做需要我明确知道我想要监视的对象和属性。问题是,我无法在任何地方找到标准系统 jmx 对象和属性的列表。谁能指出我正确的方向?我需要监控内存池、堆大小等。
原文由 Matthew 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用
Set mbeans = mBeanServer.queryNames(null, null);
for (Object mbean : mbeans)
{
WriteAttributes(mBeanServer, (ObjectName)mbean);
}
private void WriteAttributes(final MBeanServer mBeanServer, final ObjectName http)
throws InstanceNotFoundException, IntrospectionException, ReflectionException
{
MBeanInfo info = mBeanServer.getMBeanInfo(http);
MBeanAttributeInfo[] attrInfo = info.getAttributes();
System.out.println("Attributes for object: " + http +":\n");
for (MBeanAttributeInfo attr : attrInfo)
{
System.out.println(" " + attr.getName() + "\n");
}
}
这将写入所有对象名称及其属性…
原文由 Gilad 发布,翻译遵循 CC BY-SA 3.0 许可协议
8 回答6.4k 阅读
1 回答4.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
3 回答1.7k 阅读✓ 已解决
1 回答2k 阅读✓ 已解决
你总是可以使用 mBeanServer.queryNames(null, null); 用于获取在某个 MBeanServer 上注册的所有 MBean(其中
mBeanServer
是MBeanServerConnection
您在本地或远程获得的)。但是,在实施您自己的 Nagios 插件之前,为什么不使用已经存在的插件呢?例如 jmx4perl 的
check_jmx4perl
带有用于探索 JMX 命名空间的工具(例如jmx4perl <url> list
用于列出所有 JMX MBean 及其属性和操作或j4psh
based具有上下文敏感命令行完成的 JMX shell)。