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

相关推荐

  • sed 和 vim 的 用法

    处理文本的工具 三剑客之 sed sed是一种流编辑器,它一次处理一行内容。处理时,把 当前处理的行存储在临时缓冲区中,称为“模式空间”( pattern space),接着用sed命令处理缓冲区中的内容 ,处理完成后,把缓冲区的内容送往屏幕。接着处理下一 行,这样不断重复,直到文件末尾。文件内容并没有改变 ,除非你使用重定向存储输出。Sed主要用来自动编辑…

    Linux干货 2016-08-12
  • 防火墙原理以及iptables重要实践

    防火墙 主机间通信大致过程: 请求报文由客户端IP+PORT和服务器端IP+PORT构成。当客户端网络地址和服务端地址在同一网段时,不需要经由路由转发,可以直接到目标服务器,再经由服务器端口请求道所需资源; 当服务器端和客户端不在同一网段时。目标IP和源IP是不会改变的,会经由互联网中的路由器,按照其的路由表,指向该路由器的下一跳主机,知道找到服务器端所在网…

    2017-06-18
  • 文件管理初探(inode理解)及管道和IO重定向

    第一部分    文件管理初探   1、Linux系统上各主要目录的简介           /  根,所有文件的起点     ├── bin    存…

    Linux干货 2016-07-29
  • Linux中的文件管理命令及shell特性

    Linux中的文件管理命令 一、linux中的目录管理命令:mkdir和rmdir mkdir命令:创建目录 – SYNOPSIS         mkdir [OPTION]… DIRECTORY…     -…

    Linux干货 2016-09-27
  • 文本编辑工具Sed

                    Stream EDitor, 行编辑器         sed是一种流编辑器,它一次处理一行内容。处理时,一次性的先把文件读入内存中,并且开辟一块内存空间,该内存空间称为“模式空间”(pa…

    Linux干货 2016-08-10
  • 第一周学习作业

    课后作业 1.描述计算机的组成及其功能。 计算机主要由硬件和软件两大部分组成。 硬件 CPU:又叫中央处理器,其主要功能是进行运算和逻辑运算。 主板:是电脑各个配件的连接平台,电脑的CPU、内存和控制核心电路均安装在主板上。 内存:又称为动态存储器,主要用于存储电脑运行中的数据。 显卡:用于向显示器输出信号的设备。 硬盘:是一种最为常见的外存储器,具有超大容…

    Linux干货 2016-11-30