【发布时间】:2011-07-07 12:53:15
【问题描述】:
我正在尝试实现一个 nagios 插件,这样做需要我明确知道我想要监控的对象和属性。问题是,我无法在任何地方找到标准系统 jmx 对象和属性的列表。谁能指出我正确的方向?我需要监控内存池、堆大小等。
【问题讨论】:
我正在尝试实现一个 nagios 插件,这样做需要我明确知道我想要监控的对象和属性。问题是,我无法在任何地方找到标准系统 jmx 对象和属性的列表。谁能指出我正确的方向?我需要监控内存池、堆大小等。
【问题讨论】:
你可以使用
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");
}
}
这将写入所有对象名称及其属性...
【讨论】:
您始终可以使用mBeanServer.queryNames(null, null); 获取在某个MBeanServer 上注册的所有MBean(其中mBeanServer 是您在本地或远程获得的MBeanServerConnection)。
但是,在实现您自己的 Nagios 插件之前,为什么不使用已经存在的插件呢?例如。 jmx4perl 的 check_jmx4perl 带有用于探索 JMX 命名空间的工具(例如 jmx4perl <url> list 用于列出所有 JMX MBean 及其属性和操作或 j4psh 一个基于 readline 的 JMX shell,具有上下文相关的命令行完成)。
【讨论】:
从系统管理员的角度来看,我完全理解这个问题的基础。标准的 JMX 文档,或者在尝试浏览 JMX 对象树时可能遇到的对象,可能会让人不知所措且令人困惑。
我发现这个Op5 KB article 在为 JBoss 提供一个对 JMX 感兴趣的对象的体面概述方面非常有用。
显然,需要进行调整以适应他们实际使用的监控系统,但是对于任何基于 nagios 的监控系统,示例中的内容已经足够了。
【讨论】:
您在寻找JVM platform MBean docs吗?
那里有获取 MBean 并询问它们的示例,例如
ThreadMXBean 平台 MBean 提供对监控线程的支持 争用和线程 CPU 时间。
【讨论】: