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
下一篇 2015-03-08

相关推荐

  • Homework Week-9 bash脚本之顺序、选择、循环

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash #Elephant echo "nologin users:" user1=$(cat /etc/passwd&n…

    Linux干货 2016-10-17
  • mysql主从复制以及扩展

    一、MySQL简单复制相关概念:    1. mysql复制的意义:Mysql复制是使得mysql完成高性能应用的前提    2. mysql复制的机制:             SLAVE端线程: …

    Linux干货 2015-12-16
  • Linux 第八天: 练习和作业

    Linux 第八天: (08月09日) 练习和作业       1删除/etc/grub2.cfg所有以空白开头的行行首空白字符 sed 's#^[[:space:]]\+##' /etc/grub2.cfgsed -r 's@^[[:space:]]+@@' /etc/grub2.cfg…

    Linux干货 2016-08-11
  • 十个让你变成糟糕的程序员的行为

    之前本站发表过《优秀程序员的十个习惯》以及《程序员需要具备的基本技能》,那是我们需要去学习和培养的。这里,我们主要讨论十个糟糕程序员的特征,主要是需要让我们去避免和小心的。 1) 情绪化的思维 如果你开始使用不同颜色的眼光来看待这个世界的话,那么你可能会成为一个很糟糕的程序员。情绪化的思维或态度很有可能会把自己变成一个怪物。相信你经常可以看到很多很糟糕的程序…

    Linux资讯 2015-04-03
  • 手动编译内核+busybox+dropbear+nginx

    我们需要先在宿主机上添加一个磁盘,然后,把这个磁盘做好分区和文件系统: fdisk /dev/sdb 创建第一个分区: n p 1 +512M 创建第二个分区: n p 2 +10G 保存退出: w 为分区提供文件系统: kpartx /dev/sdb 为分区提供文件系统: mke2fs -t ext4 /dev/sd…

    Linux干货 2015-09-24