cjuexuan / mynote

237 stars 34 forks source link

聊聊server级别的监控 #39

Open cjuexuan opened 7 years ago

cjuexuan commented 7 years ago

聊聊server级别的监控

最近一直在做大数据基础组件监控相关的内容,整理了下各种监控指标的获取途径

hbase监控

hbase监控有两种途径可以获取,一种是通过jmx,一种是通过hadmin

在jmx获取的过程中可以通过qry获取感兴趣的bean,一个真实的url类似

http://${serverName.getHostname}:$port/jmx?qry=Hadoop:service=HBase,name=RegionServer,sub=Server,通过jmx可以拿到一个json的response,反序列化后填充自己的监控模型即可

另外是通过hadmin获取,如果调用java的api,那么自己不需要额外定义dto对象,这个还是不错的方案,通过 hAdmin.getClusterStatus.getLoad(serverName)可以获取到serverLoad,通过serverLoad.getRegionsLoad可以获取到region级别的一些性能指标

hdfs监控

hdfs监控以及接下来的yarn的监控获取的途径,最直接的方式都是通过jmx获取(ps,yarn也可以走yarn的webservice接口),这里具体讲下哪些指标是我认为比较有意义的指标

hdfs是一个分布式文件系统,那么相当重要的一点是网络io相关,(曾经发生过我们的job将交换机的流网卡跑满的情况),另一块需要监控的就是磁盘使用率,避免部分dataNode的磁盘使用率过高,另外就是网络的错误数,如果持续上升的话,也应该引起我们的注意

yarn的监控

yarn的监控主要关注跑的任务数,任务失败率,pending状况,这些指标有助于决策集群是否需要整体扩容,以及集群任务提交合理与否,获取方式同样是走jmx

es的监控

es的监控获取方式的话,可以通过http获取,目前很多插件实现方式也是通过这种方式获取的,另外也可以通过transport的client获取的集群的状态,后者的好处和hbase走serverLoad是一样的,不需要额外定义dto对象,所以我们也选择了用后者

代码看起来类似

client.admin().cluster()
        .nodesInfo(new NodesInfoRequest().clear().transport(true))
        .actionGet().getNodesMap

es我们通常关心的指标有index,get,query,当然还有index 失败率,至于系统级别的,通常是cpu的负载,如果开了swap,还要看swap的占比(我们是禁用了的)

总结

通常现代的大数据组件都提供了一些简单的监控指标采集方式,最常见的方式是jmx,其次是集群内部进行report和健康检查的一些途径,如果自己实现监控的话,可以通过这些方式进行切入,server级别的监控简单讲一下,未完待续(下一次将涉及spark的监控和jvm的监控)