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

相关推荐

  • 网络配置——路由配置实验

    一、实验环境: 4台虚拟主机,2台CentOS6.8主机做了R1路由器和PC1主机,2台CentOS7.2主机做了R2路由器和PC2主机,4台主机工作在桥接模式下 实验拓扑图: 二、网络配置: ·PC1的网卡配置; ·PC2的网卡配置; ·R1的网卡配置; ·R2的网卡配置; ·启用路由      &nbsp…

    Linux干货 2016-09-07
  • 子网掩码快速划分-心算

    问题状况: 不管作为一名网络工程师还是一名运维工程师,快速心算划分出网络掩码是必备得技能,      为什么要进行子网掩码划分? 纯二层环境不能隔离广播 有安全 管理方面的问题 解决办法:在二层环境下增加三层设备 将原本的一个主类网络号划分成多个子网     掩码基础知识:     注意:此步没记住不要往下进行     死记硬背1:     2^0=1   …

    Linux干货 2017-03-26
  • LAMP+logzilla+sphinx+syslog-ng实现集中日志管理(第一版)[原创]

    一、前言        目前查看系统日志比较被动,遇到系统不正常或故障时才会主动去检查服务器系统日志,这样一来不能及时了解系统的运行情况,因此部署Logzilla+sphine+syslog-ng来弥补这不足。以下为安装、部署平台详细步骤。(Logzilla是什么新东西?其实前身就是php-syslog-ng,引用作者…

    Linux干货 2015-03-27
  • while循环中的一个常见问题

    在楼主刚刚学习接触while循环的时候,发现了一个问题,在while循环内部对变量赋值、定义变量、数组定义等等环境,在循环外面失效。 一个简单的测试脚本如下: 执行结果证明,$new_var的结果是空值。在google上查了查,才发现问题出在管道上。 先看看下面的内容。 while循环的写法有好几种,它的语法结构为: while test_cmd_list;…

    2017-08-26
  • 任务计划管理

    一:单一工作调度:at命令       列出在指定的时间和日期在计算机上运行的已计划命令或计划命令和程序。必须正在运行“计划”服务才能使用 at 命令。 示例: [root@CentOS 6 ~]#/etc/init.d/atd restart   启动服务 …

    Linux干货 2016-09-12
  • lvm逻辑卷管理

    lvm逻辑卷管理: 允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小 允许在多个物理设备间重新组织文件系统,将设备指定为物理卷 用一个或者多个物理卷来创建一个卷组 物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的 在物理卷上创建的逻辑卷是由物理区域(PE)组成 可以在逻辑卷上创建文件系统 创建: 创建物理卷: pvcrea…

    Linux干货 2016-09-01