我正在尝试实现一个nagios插件,这样做需要我具体知道我想要监视的对象和属性。问题是,我无法在标准系统jmx对象和属性的任何地方找到列表。谁能指出我正确的方向?我需要监视内存池,堆大小等内容。
答案 0 :(得分:19)
您可以使用
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");
}
}
这将写出所有对象名称及其属性......
答案 1 :(得分:17)
您始终可以使用mBeanServer.queryNames(null, null);来获取在某个MBeanServer上注册的所有MBean(其中mBeanServer
是您在本地或远程获得的MBeanServerConnection
)。
但是,在实现自己的Nagios插件之前,为什么不使用已经存在的插件呢?例如。 jmx4perl的check_jmx4perl
附带了用于探索JMX名称空间的工具(例如jmx4perl <url> list
用于列出所有JMX MBean及其属性和操作,或j4psh
基于readline的JMX shell上下文敏感的命令行完成)。
答案 2 :(得分:1)
从系统管理员的角度来看,我完全理解问题的基础。标准的JMX文档,或者在尝试浏览JMX对象树时可能遇到的对象,可能会让人感到压力和困惑。
我发现这个Op5 KB article非常有用,可以为JBoss提供一个关注的JMX对象。
显然,需要调整以适应他们实际使用的监控系统,但是在示例中有足够的基于nagios的监控系统正在使用。
答案 3 :(得分:0)
答案 4 :(得分:0)