综合利用Nagios、Ganglia和Splunk搭建起的云计算平台监控体系,具有错误报警、性能调优、问题追踪和自动生成运维报表的功能。实现这套监控体系系统,可轻松管理Hadoop/HBase云计算平台。前端
云计算早已不是停留在概念阶段了,各大公司都购买了大量的机器,开始正式的部署和运营。而动辄上百台的性能强劲的服务器,为运营管理带来了巨大的挑战。node
朋友们,当咱们管理起公司寄予厚望的云计算平台时,当咱们面对如此多充满挑战的实际问题时,该怎么办?ios
概述apache
咱们在搭建趋势云计算平台时,遇到了不少的问题和挑战。开始搭建时,第一次来了那么多性能强劲的机器,咱们在感到兴奋的同时,也难免有些顾虑。你们坐在一块儿讨论,问题就列了满满一白板。服务器
带着这些问题,咱们开始了本身的云计算平台管理和运营之旅,一路走来,收获颇丰。如今基本上造成了如图1所示的一整套云计算平台监控体系。网络
图1 云计算平台监控架构架构
在这个系统中,咱们综合利用了Nagios、Ganglia和Splunk,搭建起云计算平台监控体系,使其具有错误报警、性能调优、问题追踪和自动生成运维报表的功能。有了这套系统,咱们终于可以轻松管理Hadoop/HBase云计算平台了。接下来将简单介绍它们的特色和功能。运维
Nagios:云计算平台的智能报警器分布式
总不能每天盯着机器看吧,所以咱们首先关心的是机器的监控与报警。最理想的境界是:若是机器出故障了,我能第一时间处理;若是机器没有问题(最好永远没有问题),我能去喝茶、钓鱼和睡大觉。工具
发现机器有没有问题,对咱们而言不是什么难事。写个脚本,Ping一下IP,Telnet每台机器的Service端口,若是增长了新机器就改改配置便可。但这样也太原始了吧,可视化效果差,很差维护,没有层次,很差管理,出不来报表,总不能总是用Excel人工写报表吧。有没有更好的方法呢?
有,你能够用Nagios。
Nagios是一个可运行在Linux/Unix平台之上的开源监视系统,能够用来监视系统运行状态和网络信息。Nagios能够监视所指定的本地或远程主机以及服务,同时提供异常通知功能。
Nagios能够提供如下几种监控功能。
Nagios最好用的地方就是它将这些天天管理员作的工做自动化,你只需设定好要监听的端口便可,它会默默地工做,帮忙定时地去检测服务端口的状态,一旦发现问题,会及时发出报警。报警能够是电子邮件也能够是手机,从而使得管理员第一时间就能收到系统的情况。
Nagios的报表功能也很强大。管理员能够很容易地获得天天、每周和每个月的Service运行情况。
图2 SPN 后台运行的全部Service的当前状态
如图2所示,红色部分清楚地标注有问题的机器,点开连接,就能够获得有问题机器的状况。虽然在HBase中,几台Region Server宕机不会对总体服务产生大的影响,但多少会影响到系统的Performance。并且,若是某几台Region Server频繁宕机,对整个系统的稳定性也会产生很差的影响。有了Nagios,咱们能够快速定位有问题的机器,及时地将一些机器移除出HBase系统,待调整好了再上线运行,以保证系统的稳定性。
如今,Nagios已经成为了不少公司必备的监控工具。只须要简单地配置,就能够实现强大的功能,将管理员从平常烦琐的工做中解放出来。
有了Nagios,哪怕就是管理上千台机器,也不会手忙脚乱,而是有一种统领千军、指挥若定的感受。
Ganglia:看到云计算平台的方方面面
Nagios的确不错,但你是否是真的能够喝茶、钓鱼、睡大觉呢?显然还不行。有了Nagios,你基本上能够作个优秀的救火队员,能在事发第一时间到达现场、处理事故。但如何防患于未然,真正作到指挥若定、游刃有余呢?
咱们须要更加精确的数据,可以看到云计算平台的方方面面,能根据这些数据,作出性能调整、升级、扩容等的决策,从而保证Service可以知足不断增加的业务需求。
这时候,你须要Ganglia。
Ganglia是UC Berkeley发起的一个开源实时监视项目,用于测量数以千计的节点,为云计算系统提供系统静态数据以及重要的性能度量数据。Ganglia系统基本包含如下三大部分。
Gmond:Gmond运行在每台计算机上,它主要监控每台机器上收集和发送度量数据(如处理器速度、内存使用量等)。
Gmetad:Gmetad运行在Cluster的一台主机上,做为Web Server,或者用于与Web Server进行沟通。
Ganglia Web前端:Web前端用于显示Ganglia的Metrics图表。
Hadoop和HBase自己对于Ganglia的支持很是好。经过简单的配置,咱们能够将Hadoop和HBase的一些关键参数以图表的形式展示在Ganglia的Web Console上。这些对于咱们洞悉Hadoop和HBase的内部系统状态有很大的帮助。
在Hadoop的conf文件夹下面,找到hadoop-metrics.properties,配置好Ganglia的Server便可。这里要注意,Ganglia 3.0和Ganglia 3.1的区别,它们使用了不一样的class。
dfs.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
dfs.period=10
dfs.servers={Ganglia_Server}:8649
有了这些图表,Hadoop和HBase就再也不是一个黑盒。不管是Hadoop的Namenode、Datanode,仍是HBase的MasterServer、RegionServer任什么时候刻的状况,都会一目了然。因为图标的跨度能够是小时、天、月甚至是年,这样,就能够很是方便地按期生成周报、月报和年报。同时,根据图中Metrics的情况,咱们能够经过调整参数、增长内存和硬盘、增长机器等的方法调整单个机器或者整个Service的性能。
图3 Hadoop其中一个DataNode的Metrics
Nagios 最大的问题在于不能洞悉到Service内部的情况。像Hadoop、HBase这样的分布式系统,一个节点的故障并不等于整个Service的故障,影响的只是Service的性能。因此,在测定Service的SLA时,咱们不能以某一台机器的故障做为Service故障的评判标准。好比在咱们的HBase SLA的设定上,咱们定义了HBase Service彻底不能工做的评判标准以下。
图4 Ganglia对Hadoop/HBase使用状况的监测
那么,咱们就能够根据这个规则定义SLA,经过按期调用HBaseAdmin相应API ,将测试的结果发给Ganglia。采用一样的方法,咱们还能够自定义一些规则,监视HBase Master、Zookeeper等的状况。
经过这些方法,咱们彻底可以针对Hadoop/HBase使用的实际状况,作出Service级别而不是机器级别的监控系统并生成报表。
此外,Ganglia还能够经过Server反馈回来的Load信息,给出各个机器的Load状况,给咱们作升级和扩容提供依据。
如图5所示,Ganglia分别会用不一样颜色,标注出当前时刻的机器Load分布状况。若是Load太重,就应该检查机器的具体使用状况。
图5 HBase Cluster Load Metrics
Ganglia的安装配置,能够参考:http://www.spnguru.com/?p=604。
Splunk:像查Google同样查日志
有了Nagios和Ganglia,算是成功了一大半。做为一名优秀的管理员,咱们须要具有必定的Troubleshooting能力,对一些常见的问题能给出解决方案。那么,对日志的分析就必不可少。
但Hadoop/HBase的日志分布在各个机器上面,而日志之间关联性强。Client端的错误有多是Region Server引发,而Region Server的错误有多是Zookeeper致使。有没有一个统一的日志管理平台呢?
众里寻它千百度,蓦然回首,咱们找到了Splunk——日志界的Google。
很遗憾,Splunk不是开源的,但它的免费版本提供天天500MB日志索引。若是数据量较小,经过定义好Log的级别,基本上也能知足需求。但对于数据量较大的公司,就有些捉襟见肘。
Splunk支持AdHoc的日志搜索,并且能够与Nagios配合使用。好比Nagios报警某台RegionServer端口不可达,咱们收到Notification后,登陆Splunk,直接搜索shutdown和host名称,找到RegionServer退出的日志。点击详细信息,分析日志,就能快速定位问题。如图6所示。
图6 Splunk与Nagios配合使用进行日志搜索
对Hadoop和HBase有了进一步了解后,咱们能够利用Splunk实时检测日志中的关键字,定义关键字规则,如监控“shutdown”、“quit”、“ERROR”、“Zookeeper Session Expired”等,一旦出现,利用Splunk的Notification功能,发出邮件通知管理员,管理员经过Splunk定位问题,就能够在系统真正出现问题以前,对系统进行调整,防患于未然。
具体Splunk的设置,能够参考:http://www.spnguru.com/?p=122。
总结
搭建一套云计算平台,强大的监控管理系统是必不可少的。固然,任何工具都不是万能的,在实际维护过程当中,咱们也发现,Nagios和Splunk常常出现误报,若是规则定义得很差,大量的警报邮件如潮水同样涌来,反而掩盖了真正的问题。能够说,在云计算平台的运维管理上,没有一劳永逸的事情,随着规模的不断增大和应用的不断多样化,须要你们不断地实践和总结。