现在我使用nagios来监控hadoop的核心进程,rm,nm,dn,nn,zkfc,jn,zk等,但是有时候进程虽然还在,但是日志不刷新,web ui上可以看到有些datanodes节点已经变为dead状态,不服务.
为了在nagios中显示出dead的datanodes我写了自定义的插件,在某一台nn节点上配置了一个command.代码要点,
首先要获取active的namenode,我们关注的是active的,不是standby的.
第二步,通过curl jmx的方法来获取我们想要的信息,过滤组合,然后发出来.
#!/bin/bash if [[ $(su - ochadoop -c 'hdfs haadmin -getServiceState nn1') -eq "active" ]]; then host="101" else host="102" fi echo $host nm=$( curl http://$host:50082/jmx | grep NumDeadDataNodes | grep -oE "[0-9]*" ); #echo $nm deadnodes=$(curl http://$host:50082/jmx?qry=Hadoop:service=NameNode,name=NameNodeInfo | grep DeadNodes | sed -e "s/\\"//g" | sed -e "s/"//g" | sed -e 's/[[:space:]][[:space:]]*/ /g'); #echo $deadnodes if [ $nm -gt 1 ]; then echo "detect dead datanodes ,nums:$nm, lists:$deadnodes" exit 2 else echo 'status is ok' exit 0 fi
安装:
save as check_deadnodes.sh in /usr/local/nagios/libexec/
chmod +x check_deadnodes.sh
配置 etc/objects下面的commands.cfg文件,添加如下:
define command{ command_name check-deadnodes command_line $USER1$/check_deadnodes.sh }