Stay hungry Stay foolish

Hadoop及相关服务监控、报警

Posted on By blue

目录



  公司一直使用的Cloudera Manager进行集群的管理和监控,虽然某些服务出现异常,也能在页面上进行提示,但当下班后或节假日,就缺乏及时的告警通知功能。公司使用大数据相关的服务很多,市面上也没有一套现成的解决方案,所以只好自己实现了。

  通过对比,发现Zabbix有自定义脚本监控功能,而且Zabbix也比较成熟,使用比较广泛,故采用Zabbix+Script的方式,来对我们大数据相关的服务进行监控报警,主要实现了以下功能:

  1. 监控集群硬件、网络、IO等资源
  2. 监控Kafka Lag堆积数
  3. 监控Kafka Brokers服务
  4. 监控ES集群健康状态
  5. 监控Zookeeper服务
  6. 监控Hadoop HA服务
  7. 监控对外API接口是否正常
  8. 监控Yarn上作业运行情况
  9. 实现微信、邮件告警通知

  由于Zabbix本身硬件资源这块的监控就做得很好了,基本安装后就可以用了。下面就介绍下对于相关大数据服务的监控实现思路及过程。

一、Kafka监控告警

  对于Kafka的监控,已经有现成的开源软件了,在我们内部也使用了一段时间,具体见博文http://hadoop1989.com/2015/09/22/Kafka-Monitor_Compare/。有两种方案,可以在Zabbix中对Kafka进行监控,一种是监控JMX端口,另外一种是直接写脚本,使用bin/kafka-run-class.sh里提供的相关方法类。根据我们的业务场景,最为主要的的是监控消费者Lag的情况。所有我们直接写脚本了。

上图是我们对某一个Topic的30个分区,每个分区,当前Consumer的Lag情况。

当然还可以生成汇总图,在此不做多展示。在Zabbix中配置对应的Triggers,当Lag超过阀值,实现报警。

对于Borker的监控,直接使用脚本去定期扫描ZooKeeper的/brokers/ids目录,当目录中的注册数发生变化时,进行报警。

二、ES监控告警

ElasticSearch的监控,就更为简单了,直接使用自带的API接口,定期去读取就可以了。

curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'

判断status状态,green即为正常,反之亦然。

三、ZooKeeper监控告警

使用Zookeeper的“The Four Letter Words”命令,对Zookeeper服务状态进行监控。主要监控Leader是否存在,Followers是否为预设的值。

echo mntr | nc localhost 2181 

四、Hadoop 监控告警

正在Yarn上运行的作业,使用命令:

yarn application –list

对于HA,这个也很简单,使用命令:

hdfs haadmin –getServiceState

举一反三,可以通过提供的API监控更多,具体可见官方文档。

五、对外API接口

对外提供的API接口,都是Restful风格的。Zabbix内置了这方面的监控,直接进行配置即可。

六、邮件、微信报警

邮件,可以通过sendmail、mailx来实现。至于微信,也不复杂,先申请公众号,然后添加联系人,网上找的现成发送脚本,拿来配置一下就可以使用了。

七、总结

通过使用Zabbix一段时间,深刻的感受到其功能强大,使用方便。由于各种组件,如Yarn、Spark、Kafka其实已经都有对应的监控方案,所以,通过Zabbix来增强告警功能,是一个非常不错的选择。