经常线上生产环境docker容器出现假死、或者容器异常退出,运维都是后知后觉,由运营部门反馈才知晓,于是研发领导提出对服务进行监控告警。这就有了下面对docker容器进行监控告警并进行容器重启的脚本。下面是具体配置步骤和脚本代码:
添加脚本文件cat /root/monitor.sh
#!/bin/bash
#docker容器名字
export scontainerName="memberapi"
#健康检查URL ,返回响应码是200则认为服务正常,否则异常进行重启
export healthCheckUrl="https://memberapi.linux66.cn/health"
function dingsend(){
curl https://oapi.dingtalk.com/robot/send?access_token=钉钉机器人token -H 'Content-Type: application/json' -d "
{
'msgtype': 'text',
'text': {
'content': '自动化通知,${scontainerName}容器已重启!'
},
'at': {
'isAtAll': false
}
}"
}
num=0
for i in {1..15};
do
# 发送HTTP请求并获取响应码
response_code=$(curl -k -s -o /dev/null -w "%{http_code}\n" $healthCheckUrl)
# 检查响应码是否为200
if [ "$response_code" -eq 000 ]; then
continue
fi
if [ "$response_code" -eq 200 ]; then
echo "HTTP响应码为200"
else
echo "HTTP响应码不是200,而是 $response_code"
let num++
fi
sleep 10
done
if [ $num -gt 5 ]; then
echo "检测到http状态码非200共${num}次"
echo "执行重启容器命令..."
docker restart `docker ps -a|grep $scontainerName|awk '{print $1}'`
dingsend
fi
给脚本设置可执行权限
chmod +x /root/monitor.sh
添加linux定时任务
crontab -e
*/1 * * * * /root/monitor.sh