现在有个微服务集群,其中网关是单点的服务,需要定时检测服务状态,避免服务宕机导致整个应用不可用的情况
springcloud-gateway添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
启用监控 暴露helath接口返回{"status":"UP"}
shell脚本
$ vi /root/health.sh
function sms()
{
for phone in "$@"
do
echo "$phone"
sms_key='key'
sms_secret='secret'
sms_url='http://sms_send_url'
sms_vn='vn'
sms_tem='tem'
uuid=$(cat /proc/sys/kernel/random/uuid)
timestamp=`date +%s%3N`
echo timestamp:$timestamp
echo uuid:$uuid
keys=$sms_secret$uuid$timestamp
echo keys:$keys
sign=`echo -n $keys|md5sum|cut -d ' ' -f1`
echo sign:$sign
sign=`echo $sign | tr "[:lower:]" "[:upper:]"`
echo sign:$sign
content='smsParam={"service":"xxxx网关服务告警","reason":"网关服务异常","id":"0","reqid":"0"}&smsSignId=000001&smsTemplateId=000001&smsType=0&telNo
='$phone'&'
commmand= curl -H "Content-Type:application/x-www-form-urlencoded;charset=utf-8" -H "key:$sms_key" -H "timestamp:$timestamp" -H "uuid:$uuid" -H "token:$sign" -X "POST" $sms_url -d $content
$(command)
done
}
res=`curl http://127.0.0.1:8080/actuator/health`
uptag='UP'
if [[ $res =~ $uptag ]]
then
echo "健康检查成功"
else
echo "健康检查失败"
sms "15800001111" "15800002222"
fi
释义:首先定义一个发送短信的方法,然后调用/actuator/health接口,返回值如果不包含UP,发送短信到指定的2个号码
包含shell语法:
时间戳 uuid md5 字符串拼接 小写转大写 包含 定义function function传参 获取function参数 执行变量命令 if-else curl请求接口
定时任务:
crontab -e
*/2 * * * * /root/health.sh
编辑定时任务,2分钟执行一次健康检查