zabbix监控Hadoop的实现

        Hadoop日常运行过程中一些参数需要进行实时监控,如:Map、Reduce任务数量,HDFS磁盘使用情况,namenode、datanode在线数量及健康情况,以便更好的掌握整个Hadoop集群架构的运行情况。

        下面结合最近工作中的一些实践经验,分享一下如何用zabbix实时监控Hadoop集群。

         工作一开始想在网上找现成的zabbix监控Hadoop文档,发现只一篇老外的文档:https://code.google.com/p/mikoomi/wiki/05,51cto有人做了翻译,上面提供的好用的现成模板和两个强大的数据抓取脚本。

         但是在使用的过程中有很多问题,需要根据自己的实际环境进行修改,但脚本中大部分的数据抓取和分析代码是没有问题的,写这个的人的确很NB,下了不少工夫。

         我在这里仅提一下,需要改变的部分。

          mikoomi文档中使用的是zabbix的externalscripts功能,生成数据后使用zabbix_sender命令向服务器发送数据,实现过程非常简单,但不走运的是,我使他这个方法,数据的抓取和整理都没有问题,就是在用zabbix_sender上传数据时问上失败。中间挣扎、纠结了好久,没有找到解决办法。遂决定,放弃原有的套路,换另一种方法。


         如果你用mikoomi的原始方法实现在,那么恭喜你,他的方法确实简单好用,请你一定联系我你是怎么做到的。


          下面来讲一下我的基于mikoomi脚本的另一种实现方法。


          一开始,按照mikoomi原文中方法,导入他所提供的hadoop监控模板,一个用于监控namemode,一个用于监控jobstracker。

          然后,将需要被监控的namenode加入这两个模板,当加入第二个模板的时候会提示你,这两个模板中有两个item冲突了,很好办,从任意一个模板中删除冲突项就好了。

 

         上述两步操作比较简单,就不多说了,下面重点来了,前方高能。

   

          两个模板中默认原作者是要以zabbix_sender的方式传送监控数据的,所以两个模板中的item都是zabbix_trap的数据类型,现在我们即将采用的是传统的在被监控端创建UserParameter的方式,所以一个很重要的地方需要做修改,如图:

zabbix监控Hadoop的实现

(这个页面就是这么宽,没办法,将就着看吧!zabbix监控Hadoop的实现)

    两个模板60多个item一个一个改势必很痛苦,zabbix给我们提供了一个叫“mess update”的功能,全选之后(除了一个叫Data Collector的item),选择mess update即可进入如下页面进行修改:

zabbix监控Hadoop的实现

就是这么贴心,就是这么简单。有些情况下,全选的话,可能无法成功,那就一次少选 几个,多改几次就是了。


        模板中item的数据类型改完之后,将进入最重要的数据抓取阶段。原作提供的脚本功能强大,但有很多地方不是哪里都能用,比如他的shell脚本是以#!/usr/bin/bash开头的。脚本抓取数据的来源是hadoop自身提供的web页面,脚本通过curl命令抓取页面内容进行分析,提炼后按照 “主机名 key value”  的格式进行存储。

        如果你们hadoop服务器的web页面是不需要密码访问的还好,如果像我们公司一样是需要密码访问的,这个url就需要特别注意一个,免得不能访问,就将无法获取数据。

    

        现把我修改后的,正在使用的脚本放在这里,供参考 :

mikoomi-hadoop-jobtracker-plugin-helper.sh

mikoomi-hadoop-jobtracker-plugin.sh

mikoomi-hadoop-namenode-plugin-helper.sh

mikoomi-hadoop-namenode-plugin.sh

run_hd.sh

******************************************************

注意事项:

         上述脚本均是放在被监控端即namenode上运行。

        上述脚本中的URL使用了user.name变量,是因为我们的环境中访问hadoop页面是需要密码的,直接把密码加入url就行。如果不需要密码,把这个就是去掉就了行,注意,每一个脚本有两处URL。

         从脚本名称中便可看出,带有“jobtracker”的脚本是用于抓取和jobtracker运行有关的数据的,带有“namenode”的是用来抓取和namenode运行有关的数据的。

         脚本run_hd.sh是用来将前面脚本生成的数据合并到一处的,后并后的文件我取名为/tmp/namenode.txt(这个文件不要放在zabbix用户无法访问的目录,比如:root家目录下zabbix监控Hadoop的实现)。

         

         首次使用需先运行run_hd.sh产生数据文件/tmp/namenode.txt ,然后执行如下awk命令,将生成结果导入 /etc/zabbix/zabbix_agentd.d/hadoop.conf 中,代码如下:

                    

awk '{ print "UserParameter="$2",grep \" "$2" \" /tmp/namenode.txt | awk '\''{ print '\$'3 }'\''" }' /tmp/namenode.txt  > /etc/zabbix/zabbix_agentd.d/hadoop.conf

        注意: 此awk命令只需执行一次即可。


        然后重启被监控端的zabbix_agent进程: 

                   

  service zabbix_agent restart


         最后,也是最重要的,要把脚本run_hd.sh放入crontab,第分钟执行一次,这样/tmp/namenode.txt   中的数据就会每分更新一次,和zabbix监控中的更新同步。


好了,坐等出图。出图需要一点点时间,这个时候可以使用zabbix_get命令来测试,看一看zabbix server 端能不能接收到数据,比如: 

                    

 zabbix_get -s namenode -k min_free_storage_pct_node_name


zabbix监控Hadoop的实现

zabbix监控Hadoop的实现


就先展示这两个吧,其它的数据不方便放上来。

至于triger和报警,mikoomi的模板中都为我们安排好了,我们只要保障数据能正常上传,就可以了。



如有疑问,欢迎留言~~~~zabbix监控Hadoop的实现


************************************************************

神马, 谷歌不能访问?mikoomi的网页打不开?好吧,附送hosts一枚,不谢!

戳我就能上谷歌!





原创文章,作者:红豆殺,如若转载,请注明出处:http://www.178linux.com/736

赞 (1)
红豆殺红豆殺
上一篇 2015-03-06 15:39
下一篇 2015-03-08 21:38

相关推荐

  • 任务计划1

    at.allow :优先级高,有此文件,deny无效,只有此文件中的用户可使用at at.deny:优先级低,此文件中的用户拒绝,不在此文件允许 如果都没有,全都拒绝普通用户     [root@localhost ~]# rpm -q  at at-3.1.13-22.el7.x86_64 [root@localhost ~]…

    Linux干货 2017-05-15
  • LVM逻辑卷管理

    前言     通常情况下,在操作系统上新建了一个分区并在此分区创建文件系统后,该文件系统的大小就固定了。假如要增加此文件系统的大小,我们不得不添加一块硬盘并重新分区,创建文件系统,然后把原文件系统的数据完整复制过来。如果第二次分区时分配的空间太大,用不完又浪费该怎么办呢?重复此前的流程又将花费大量的时间,有没有更便捷的…

    Linux干货 2015-05-04
  • 网络接口配置-bonding

    bonding      就是将多块网卡绑定同一个IP地址对外提供服务,可以实现高可用或是负载均衡,当 然,直接给两块网卡设置同一个IP地址是不可能的,通过bonding,虚拟一块网卡对外提供链接,这样即使一块网卡坏了可以经行自动切换,而不会影响业务的正常的通信 Bonding的工作模式 mode 0 轮转(…

    Linux干货 2016-09-05
  • 构建NP和NMP

    实验一、构建NP (一)实验布置:两台虚拟机充当代理服务器和后端服务器,一台虚拟机充当客户端。 (二)实验目的:实现NP的搭建。 (三)实验图解: (四)实验步骤: 1、  在后端服务器安装php-fpm文件,修改PHP-FPM的配置文件,vim/etc/php-fpm.d/www.conf文件,如下: listen = 127.0.0.1:900…

    2017-05-07
  • 马哥教育网络班21期+第8周课程练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 集线器(HUB)是在OSI模型的第一层——物理层——连接多台主机、延长网络的设备。其主要功能是将从一个端口接收到的数据包转发给所有端口。中继器(Repeater)是将由电缆传过来的电信号或光信号调整波形和放大再传给另一个电缆的设备,提供多端口服务的中继器称作集线器。二者的主要区别…

    Linux干货 2016-09-05
  • 划分子网例题

    概念:子网划分就是——>将一个大网络(主机ID位多)划分成多个小的网络(主机ID位少) 如何实现呢?!        实现——->网络ID向主机ID借位,网络ID位变多,主机ID位变少 涉及的公式:         &n…

    2017-09-04