#!/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