此脚本用于监控容器运行状态,并将异常容器通过钉钉端报警!!!

1、编写监控脚本

[root@localhost ~]#  vim containerState-monitor.sh

!/bin/bash
##########################################################
#          监控容器运行状态,异常通过钉钉端报警脚本!!!        #
##########################################################

#取出容器的名字
containerName=`docker ps -a --format "table {{.Names}}" | grep -v "NAMES"`

#钉钉报警Token
dingtalk_openapi="https://oapi.dingtalk.com"
dingtalk_openapi_token="根据自己的token填"

#循环判断容器运行状态情况
for containerState in ${containerName[*]}
do
        #查看容器的运行状态
        exist=`docker inspect --format '{{.State.Running}}' ${containerState}`
        #判断容器运行状态,运行正常在屏幕输出即可,异常则发送报警到钉钉
        if [ "${exist}" = "true" ]; then
                echo "容器$containerState运行正常"
        else
                curl ''$dingtalk_openapi'/robot/send?access_token='$dingtalk_openapi_token'' \
                    -H 'Content-Type: application/json' \
                    -d '{"msgtype": "text",
                    "text": {
                    "content": "警告:'$containerState'服务运行异常,所在服务器为'xxx.xxx.xxx.xx'"
                    }
                    }'
        fi
done                                                                                                                 

2、测试时脚本时可能会报错如下

[root@localhost ~]# ./containerState-monitor.sh
flag provided but not defined: --format
See 'docker ps --help'.

上面的报错是因为docker版本低于1.8.0,导致-- format参数无法使用

3、将脚本中提取容器名字的命令改为如下即可

[root@localhost ~]# vim containerState-monitor.sh

containerName=`docker ps -a | awk 'NR == 1 {next} {print $NF}'`

4、如果需要指定容器监控,可以参考如下(监控所有容器不需要更改脚本!!!

[root@localhost ~]# docker ps  --format "table {{.Names}}" | grep -v "NAMES" > containerState.txt
[root@localhost ~]# vim containerState-monitor.sh

#取出容器的名字
#containerName=`docker ps -a --format "table {{.Names}}" | grep -v "NAMES"`

#将上面取出容器名字的变量更改为如下,路径根据实际情况

#通过文件所记录的容器赋值给变量
containerName=`cat /root/containerState.txt`

5、设置计划任务

[root@localhost ~]# crontab -e

*/1 * * * *   /root/containerState-monitor.sh

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐