首先我们下看一下hbase中的监控包:
监控都有哪些呢? 监控什么呢?
Hmaster dump
监控的入口StateDumpServlet ,通过浏览器进行打印查看主要通过Hmaster界面和RegionServer界面我们看一下抽象类StateDumper的实现类:
先从MasterDumpServlet详细说,当请求/dump的时候进入MasterDumpServlet doGet处理并打印信息:
1、打印version信息
2、打印MonitoredTask信息
TaskMonitor顾名思义 就是任务监控,
下面就先拿Hmaster 启动来说:
Hmaster 启动的时候会执行
MonitoredTask startupStatus =
TaskMonitor.get().createStatus("Master startup");
monitoredTask 就是被监控的任务,上面的流程就是 TaskMonitor 获得单例对象然后创建一个MonitoredTask。
TaskMonitor 主要管理两个主要任务,一个是MonitoredTask (通过createStatus) 一个是MonitoredRPCHandler(通过createRPCStatus)
创建一个上述createStatus 主要创建了一个MonitoredTask 实例和一个动态代理类,但是动态代理类的Handle没做任何处理,然后将实例和放到弱引用中的动态代理组成taskpair,然后判断tasks 总数是不是超不过了1000,如果超过了1000就需要进行清理。
我们看一下monitoredTask ,看描述我们知道这个是一个被监控任务的声明周期,拿Hmaster启动来说,hmater启动过程就是一个被监控的任务即一个MonitoredTask(看上面的代码片段),那Hmater 启动的监控流程是怎么样的、下面我们看一下:
1、startupStatus.setDescription("Master startup"); // 任务描述
2、startupStatus.setStatus("Trying to register in ZK as active master"); //任务状态
3、startupStatus.setStatus("Successfully registered as active master."); //修改任务状态
至于总共有多少被监控任务可以通过打印出来的信息查看
以上只是启动的任务、会涉及到很多其它的任务,比如IPC等等涉及到包里面MonitoredRPCHandlerImpl类
3、打印在线的server信息。示例
Servers:
===========================================================
slaver007.xxx,60020,1396941155193: requestsPerSecond=0, numberOfOnlineRegions=4, usedHeapMB=114, maxHeapMB=966
4、打印Regions-in-transition。
5、打印Executors信息,参考前面文章http://blog.youkuaiyun.com/asdfasdfsadffds/article/details/21952003
6、打印线程信息、这个是调用hadoop的接口
7、打印Master配置
8、打印Recent regionserver aborts
9、打印 tailLogKb,这个涉及到monitoring 包下面的LogMonitoring类,tailKb 默认是100kb,也可以通过request 参数tailkb传递
我们再看一下RegionServer的RSDumpServlet、基本上和Hmaster 差不多只不过有一个打印队列信息的,主要是 compaction \ split queue 和 Flush queue