JVM和Java Metrics使用样例(读取kafka统计信息)

不多说无用的话,以访问Kafka的Metrics统计信息为例,简单记录如何访问JVM中Java Metrics信息。

代码仅是流程示例,不保证编译通过。

import javax.management.JMX;
import javax.management.remote.JMXServiceURL;
import javax.management.ObjectInstance;
import java.net.MalformedURLException;
import javax.management.AttributeNotFoundException;
import javax.management.InstanceNotFoundException;
import javax.management.ReflectionException;
import javax.management.MalformedObjectNameException;
import javax.management.MBeanException;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.MBeanInfo;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;

...

           String jmxServiceURL = "service:jmx:rmi:///jndi/rmi://" + "127.0.0.1" + ":" + "8888" + "/jmxrmi";            // "127.0.0.1"是JVM运行的机器IP,"8888"是JMX端口号,这里仅是举例

           JMXServiceURL jmxURL = null;
           JMXConnector jmxc = null;
           MBeanServerConnection jmxs = null;
           ObjectName mbeanObjName = null;
           Iterator  sampleIter = null;
           Set sampleSet = null;

           jmxURL = new JMXServiceURL(jmxServiceURL);
            try{
                jmxc = JMXConnectorFactory.connect(jmxURL);                               // 注意,最后要关闭的是这个JMX connector变量
                jmxs = jmxc.getMBeanServerConnection();
            } catch (IOException err) {
                ...
            }
            try {

                // 构建要获取的Java MBean的名字, 其中name参数可以是正则表达式,代表取一类java Mbean对象, 可对比Jconsole中相应的Mbean信息
                mbeanObjName = new ObjectName("\"kafka.server\":type=\"BrokerTopicMetrics\",name=\"AllTopics*\"");       

                     JVM和Java Metrics使用样例(读取kafka统计信息)_第1张图片
            } catch(MalformedObjectNameException err) {
                ...
            }
            try {
                sampleSet = jmxs.queryMBeans(null, mbeanObjName);      // 获得Java Mbean对象,返回结果集合
            } catch(IOException err) {
               ...
            }
            sampleIter = sampleSet.iterator();
            if(sampleSet.isEmpty()) {
                 ...
            } else {
                while(sampleIter.hasNext()) {              // 轮询所获取集合中每一个Java Mbean对象, 做你需要的处理
                    ObjectInstance sampleObj = (ObjectInstance)sampleIter.next();
                    ObjectName sampleMbeanName = sampleObj.getObjectName();
                    ...
                    ...
                    try {
                          sampleAttrVal = jmxs.getAttribute(sampleMbeanName, "Count").toString();     // 这里仅作举例,获取一个Java Mbean对象的"Count"属性
                    } catch(AttributeNotFoundException err) {
                           ...
                    } catch (InstanceNotFoundException err) {
                           ...
                    } catch (ReflectionException err) {
                           ...
                    } catch (MBeanException err) {
                           ...
                    } catch (IOException err) {
                           ...
                    }
                    ...
                }

            }                                                                                  
            try {
                jmxc.close();                               // JMX Connector必须关闭
            } catch(IOException err) {
                ...
            }

IT人的微信自媒体--- 杰天空, 走在寻找创意的路上
发掘创意,点缀生活,品味人生。
请搜索微信订阅号: jksy_studio  ,或者微信扫描下图二维码添加关注


杰天空静候您的光临。


你可能感兴趣的:(Web开发)