背景
实现CDH服务出现异常能够及时通知。
脚本实现
#! /bin/bash
#异常服务出现次数累加数量
export count=0
#异常服务列表
export BADserver
#单次轮询标志位,0 无异常服务,1 有异常服务
export sc=0
#轮询次数累加数量
export lxcount=0
while true
do
# 每三分钟轮询 /home/azkaban/serveies.txt 里配置监控的cdh服务
while read line
do
#调用cloudreaManager restAPI获取服务状态信息
rs=`curl -u user:passwd -X GET http://hdh02.c.p.xyidc:7180/api/v33/clusters/EZCluster/services/$line|jq .healthSummary | sed 's/\"//g'`
#单次轮询,有异常服务进入
if [ ${rs} == "BAD" ];
then
#有异常服务,标志位置 1
sc=1
#异常服务累加
count=$((count+1))
#判断异常服务列表是否已包含当前坏的服务
if [[ "$BADserver" =~ $line ]]
then
echo "------------------------------------------------------------------------------$line exits"
else
#没有包含,则加入坏的服务列表
BADserver=$line,$BADserver
echo "------------------------------------------------------------------------------BADserver=${BADserver%,}"
fi
fi
echo -----------------server=$line healthSummary=$rs count=$count lxcount=$lxcount------------------
done<serveies.txt
#判断单次轮询,是否有服务异常
if [ $sc -ge 1 ];
then
lxcount=$((lxcount+1))
echo --------------------------------------------------------------------------------Have some server BAD!!!
else
echo --------------------------------------------------------------------------------All server not BAD now
#无服务异常,将前面累计的count值置为0,异常服务列表置为空,表示前面异常的服务已经恢复正常
count=0
lxcount=0
BADserver=
fi
#单次轮询完,将标志位置为0
sc=0
if [ $count -ge 6 -a $lxcount -ge 8 ];
then
message="不得了了,出大事啦,线上环境大数据服务${BADserver%,}状态异常!!!"
#邮件发送
#echo "$message" | mail -s "线上服务${BADserver%,}状态异常" zhangxiping5@hikvision.com.cn
#调用短信rest接口,进行短信告警发送
curl "http://xxxx:8080/alarm/sendSms.do?mobile=1515813***5&body=${message}&type=0&producer=CDH"
echo $message
#增加hive服务异常处理,hive服务重启,服务重启完成短信通知
if [[ "$BADserver" =~ "hive" ]];
then
echo "------------------------------------------------------------------------------restart hive "
msg="大数据线上集群hive服务状态异常,hive服务重启完成"
#curl -u user:passwd -X post http://hdh02.c.p.xyidc:7180/api/v33/clusters/EZCluster/services/hive/commands/restart
if [[ "$?" =~ "0" ]]
then
echo "$msg $BADserver $lxcount"
#curl "http://xxx:8080/alarm/sendSms.do?mobile=1515813**&body=${msg}&type=0&producer=CDH"
fi
fi
lxcount=0
count=0
fi
#轮询间隔时间
sleep 3m
done
echo "-----------task is stoped!----------------"