一、场景
公司已经部署多个生产网站,需要监控这些网站能否正常访问,不会出现404或者500类的错误返回。一旦出现类似错误及时告知相关负责人。
二、实现
使用curl
命令获取网站的返回码并判断是否200,然后调用钉钉机器人的webhook
通知群内相关负责人
curl命令:http://www.ruanyifeng.com/blog/2019/09/curl-reference.html
钉钉机器人:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
三、脚本
#! /bin/bash
# set -xeuo pipefail
date=`date '+%Y-%m-%d %H:%M:%S'`
# 定义服务字典
declare -A dic
dic=(
[https://admin.testy.com]="vue-saas"
[https://doctor.testy.com]="vue-doctor"
[https://xzzyy.testy.com/internetHospitalWs/doc.html]="internetHospitalWs"
)
# 钉钉机器人提醒
function alarmdingding(){
conTent=$(echo ${date} 服务异常报警!返回码:$1,服务名:$2,网址:$3。@139xxxx9458)
apiurl="https://oapi.dingtalk.com/robot/send?access_token=b0xxxxxxxxxxxxx6"
/bin/curl ${apiurl} -X POST -H "Content-Type: application/json" -d '{"msgtype": "text","text": {"content": '${conTent}'}, "at": {"atMobiles": ["139xxxx9458"],"isAtAll": false}}'
}
# 服务检查
for i in ${!dic[*]}
do
k=`curl -I -s ${i} | grep 'HTTP/1.1'| awk '{print $2}'`
if [[ ${k} -ne 200 ]];then
alarmdingding ${k} ${dic[${i}]} ${i}
fi
done
# 邮件提醒
#if [ -e /tmp/error.log ];then
# mail -s "线上服务异常!!!" 122xxxx40@qq.com < /tmp/error.log
# rm -f /tmp/error.log
#fi