jmx 接口访问数据
来源:互联网 发布:网易uu打不开修复网络 编辑:程序博客网 时间:2024/04/27 22:14
说到对Hadoop和HBase的集群监控,大家知道的和用的最多的可能还是第三方的监控工具,cacti,ganglia,zabbix之类的。玩的深一些的,会用zenoss之类的。这些工具确实不错,也能发挥很大的作用,但时间长了总感觉监控粒度还是比较粗,不够详细。毕竟是第三方的监控,即便Hadoop自带了ganglia的接口,也还是觉得不够。其实Hadoop本身是带有监控接口的,各公司的发行版还有自己定制的接口,不过可能知道的人就不太多了。这个不详细的看文档和源码一般是找不到的,属于隐藏属性。事实上,我写的EasyHadoop管理界面里面就用到了这个监控的接口,能够对整个集群有一个比较详细的状态监控,目前还在不断扩展。下一步会实现对Java进程的Heap使用的监控,这样对整个集群的性能调优就会起到比较重要作用。其实这个接口特别简单,但是非常详细,也非常方便,就是JMX。
Hadoop的http监控端口基本所有人都知道,namenode 50070,jobtracker 50030,datanode 50075,tasktracker 50060。不过当用户访问这些端口的时候,会自动跳转到dfshealth.jsp或者jobtracker.jsp这样的监控页面。jmx的访问很简单,只需要把网页的名字换成jmx就可以了。
例如
将
http://your_namenode:50070/dfshealth.jsp的地址替换成http://your_namenode:50070/jmx即可,其他如50030,50060等等,也依次类推,HBase的系统信息也可以用这种方法获取。
返回值全部是JSON,非常便于自己进行处理。返回的信息也非常详细,内存状态,内存池状态,java堆信息等等。甚至还有操作系统信息,版本,JVM版本信息等等,很全面。
但是这个接口获取的JSON往往很大,而且对于某一项的监控,整个抓一串JSON信息就太浪费了。所以,这又是一个隐藏属性了,只在Hadoop源码中可以了解到。源码在src/core/org/apache/hadoop/jmx中。
JMXJsonServlet.java的一个public类
点击(此处)折叠或打开
- public void doGet(HttpServletRequest
- request, HttpServletResponse response){
- try {
- //
- Do the authorization
- if (!HttpServer.hasAdministratorAccess(getServletContext(),
- request,
- response))
- {
- return;
- }
- response.setContentType("application/json;
- charset=utf8");
- PrintWriter
- writer = response.getWriter();
- JsonFactory
- jsonFactory = new JsonFactory();
- JsonGenerator
- jg = jsonFactory.createJsonGenerator(writer);
- jg.useDefaultPrettyPrinter();
- jg.writeStartObject();
- if (mBeanServer
- == null)
- {
- jg.writeStringField("result","ERROR");
- jg.writeStringField("message","No
- MBeanServer could be found");
- jg.close();
- return;
- }
- String
- qry = request.getParameter("qry");
- if (qry
- == null)
- {
- qry
- = "*:*";
- }
- listBeans(jg,new ObjectName(qry));
- jg.close();
- } catch(IOException
- e) {
- LOG.error("Caught
- an exception while processing JMX request",
- e);
- response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
- } catch(MalformedObjectNameException
- e) {
- LOG.error("Caught
- an exception while processing JMX request",
- e);
- response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
- }
- }
从源码中可以看到json的获取可以带有http验证,另外还可以有一个参数叫qry。这个参数的值就是在获取整个长JSON中每个"name"key所对应的名字。也就是,可以用
http://your_tasktracker:50060/jmx?qry=GarbageCollector,name=PS MarkSweep
这种方式来获取关于JVM对内存垃圾回收的处理状态信息。很简单不是吗?
在EasyHadoop的Agent中获取HDFS和MR的实时状态监控就是通过JMX的接口,处理代码如下:
点击(此处)折叠或打开
- class EasyHadoopHandler:
- def GetJmx(self,host,port,qry):
- url ='http://'+host+':'+port+'/jmx?qry='+qry
- jmx = urllib.urlopen(url)
- json = jmx.read().replace('\n','')
- jmx.close()
- return json
由Central主动发起查询JMX的请求,Agent在获取了相关的监控信息后将json返回给Central,Central再用js将数据进行绘图实时返回给用户。
各发行版还有不同的监控接口,例如cloudera版还多加了一个叫metrics也不metrics2的接口。
这样来自己做Hadoop的监控,就比光使用cacti和ganglia就详细了许多。HBase也可对60010等端口进行同样的处理,进行监控。
- jmx 接口访问数据
- JDBC数据访问接口
- nc 数据访问接口
- http访问数据接口
- JMX RMI 访问
- JMX设置远程访问
- JMX客户端访问代码
- 数据访问接口的实现
- 微软数据访问接口概述
- 数据访问接口设计思考
- 接受远程接口访问数据
- XML解析(访问数据接口)
- JMX接口监测(一)
- MS数据访问加速模块接口
- SSAS : 数据访问接口整理汇总
- 数据访问接口 DAO 关键回顾
- ajax跨域访问数据接口 php
- 数据访问接口功能及含义
- 二叉树大全
- An overview of gradient descent optimization algorithms
- 《图解HTTP》笔记——返回结果的HTTP状态码(第四章)
- R精通必看书籍推荐
- POJ 2323 贪心
- jmx 接口访问数据
- Linux通过PID查看进程完整信息
- 不通过GwtTestCase测试GWT
- 在栈上new出一个对象
- android 全屏以及透明状态栏总结
- An overview of gradient descent optimization algorithms
- 简单的c语言程序
- GitHub上史上最全的iOS开源项目分类汇总
- 配置iis站点上放置的apk文件不能下载