#!/bin/bash ###运维联系方式 OP_PHONE=15121132075,13817488875,15800329316 #OP_PHONE=15800329316 ####业务地址 url1="http://api.pplaystore.com/api/v22/apks/tabList?format=json&page=1" url2="http://push.pplaypush.com/api/push/getpushcfg.json" url3="http://kkkkkjdflk.com" ####计数器 CONTINUER=3 ####报警消息 task1="playapp_api" #业务连续$CONTINUER次异常 task2="playapp_push" #业务连续$CONTINUER次异常" task3="pplayapp_bash" ###业务数 tasknum=3 ####计数器文件 counterfile=‘/dev/shm/mon_api_push/counter‘ dirname=‘/dev/shm/mon_api_push‘ [ -f $dirname ] || mkdir -p $dirname [ -f $counterfile ] || touch $counterfile function num_mod_add() { local ltask num taskdir ltask=$1 taskdir=$2 num=$CONTINUER lnum=`cat $counterfile |grep $ltask|awk -F‘_‘ ‘{print $3}‘` [ -n "$lnum" ] || echo ${ltask}_1 >> $counterfile let lnum++ sed -i ‘s/‘$ltask‘.*/‘$ltask‘_‘$lnum‘/g‘ $counterfile if [ $lnum -eq $num ] then echo 0 $lnum > $taskdir/ret_add elif [ $lnum -gt $num ] then echo 1 $lnum > $taskdir/ret_add fi } function num_del() { local ltask num taskdir ltask=$1 taskdir=$2 num=$CONTINUER lnum=`cat $counterfile |grep $ltask|awk -F‘_‘ ‘{print $3}‘` if [ "$lnum" != "" ] then if [ "$lnum" -lt "$((num-1))" ] then sed -i ‘/‘$ltask‘/d‘ $counterfile let lnum++ echo "1 $lnum $ltask" > $taskdir/ret_del echo nihao elif [ "$lnum" -eq "$((num-1))" ] then sed -i ‘/‘$ltask‘/d‘ $counterfile let lnum++ echo "0 $lnum $ltask" > $taskdir/ret_del elif [ "$lnum" -ge "$num" ] then sed -i ‘/‘$ltask‘/d‘ $counterfile let lnum++ echo "0 $lnum $ltask" > $taskdir/ret_del fi fi } function sendwarning() { local ltask taskdir time state ltask=$1 taskdir=$2 time=`date +%F‘ ‘%T` CURL="/usr/bin/curl" for i in `seq $tasknum` do task=task$i eval task=\$$task if [ $ltask == $task ] then url=url$i eval url=\$$url $CURL -I --connect-timeout 10 "$url"|grep "HTTP/1.1 200 OK" state=`$CURL -I --connect-timeout 10 "$url"` if [ $? -eq 0 ] then sendrecovery $ltask $taskdir $state else num_mod_add $ltask $taskdir ret=`cat $taskdir/ret_add |awk ‘{print $1}‘` numwar=`cat $taskdir/ret_add|awk ‘{print $2}‘` if [ $ret -eq 0 ] then for phone in `echo $OP_PHONE|sed ‘s/,/ /g‘` do sendtime=" (`date +%F‘ ‘%T`)" URL="http://192.168.6.13/fetion.php?phone=PHONE&msg=MSG" sendtask=`echo $ltask连续$numwar次异常 $sendtime|/usr/bin/perl -e ‘use URI::Escape;while(<STDIN>){print uri_escape($_);}‘` ##拼装告警信息 MSGURL=`echo $URL|sed "s/PHONE/$phone/g;s/MSG/$sendtask/g;"` $CURL "$MSGURL" mon_log "$ltask" "$state" "$ltask连续$numwar次异常" "$time" done else mon_log $ltask $state "$ltask连续$numwar次异常" $time fi fi fi done rm -rf $taskdir/* } function sendrecovery() { local ltask phone taskdir time state ltask=$1 taskdir=$2 state=$3 time=`date +%F‘ ‘%T` CURL="/usr/bin/curl" sendtime=" (`date +%F‘ ‘%T`)" num_del $ltask $taskdir ##发送短信接口 if [ -f $taskdir/ret_del ] then cat $taskdir/ret_del|grep $ltask if [ $? -eq 0 ] then ret=`cat $taskdir/ret_del|grep $ltask |awk ‘{print $1}‘` if [ "$ret" -eq 0 ] then numrec=`cat $taskdir/ret_del|awk ‘{print $2}‘` ####拼装告警信 URL="http://192.168.6.13/fetion.php?phone=PHONE&msg=MSG" sendtask=`echo "$ltask第$numrec次恢复" "$sendtime"|/usr/bin/perl -e ‘use URI::Escape;while(<STDIN>){print uri_escape($_);}‘` for phone in `echo $OP_PHONE|sed ‘s/,/ /g‘` do MSGURL=`echo $URL|sed "s/PHONE/$phone/g;s/MSG/$sendtask/g;"` $CURL "$MSGURL" mon_log "$ltask" "$state" "$ltask第$numrec次恢复" "$time" done fi fi rm -rf $taskdir/* fi } function mon_log() { local task time state msg task=$1 state=$2 msg=$3 time=$4 echo $task $state $msg $time >> /tmp/amos_mon_task.log } function mon_api_push() { local task taskdir for i in `seq $tasknum` do task=task$i rand=$RANDOM eval taskdir=$dirname/\$$task [ -d $taskdir ] || mkdir -p $taskdir eval echo \$$task eval sendwarning \$$task $taskdir & done wait } mon_api_push
本文出自 “秋风颂” 博客,请务必保留此出处http://qiufengsong.blog.51cto.com/7520243/1360524
原文:http://qiufengsong.blog.51cto.com/7520243/1360524