zabbix 自定义监控docker容器

需求

1、线上环境docker已经运行起来了,有时候容器挂掉之后没有第一时间通知,之前已经搭建好zabbix并配置好了微信告警

2、使用zabbix来监控容器,并发送告警

3、首先创建一个自定义监控脚本,来获取监控的值

服务器端配置

一、服务器上配置脚本

路径

cd /etc/zabbix/scripts
vim docker_monitor.sh

内容

#!/bin/bash
#监控容器的运行状态
#容器名称 传入参数
containerName=$1
#当前时间
now=`date +"%Y-%m-%d %H:%M:%S"`

# 查看进程是否存在
exist=`docker inspect --format '{{.State.Status}}' ${containerName}`

if [ "${exist}" != "running" ]; then
#记录日志
echo "${now} docker容器异常, 容器名称:${containerName}" 请检查 >> /var/log/docker_monitor.log
echo 0
else
echo 1
fi

脚本说明:通过docker inspect检查容器状态是否为runing,如果是则脚本反馈1,如果不是则返回0

二、修改zabbix_agentd.conf配置文件

vim /etc/zabbix/zabbix_agentd.conf

添加下面两个参数

UnsafeUserParameters=1
UserParameter=docker_monitor,bash /etc/zabbix/scripts/docker_monitor.sh mwx_ndj_hosting

UnsafeUserParameters=0 ,默认是0,修改为1,是否允许自定义脚本传递特殊字符作为参数,通常不用开

自定义监控项,格式为:UserParameter=<键值>,<命令>

UserParameter=docker_monitor,bash /etc/zabbix/scripts/docker_monitor.sh xxxx

自定义键值为:docker_monitor 要执行的命令为执行docker_monitor.sh这个脚本 ,加上参数xxxx(这个是需要监控的容器名称)

添加完成以后,重启zabbix_agentd生效

systemctl restart zabbix-agent.service

三、在zabbix服务端上检查一下能不能获取到监控的指标

zabbix 是服务器上编译安装

zabbix_get -s 192.168.0.220 -p 10050 -k "docker_monitor"

zabbix 是docker安装

docker exec -t zabbix-agent zabbix_get -s 192.168.0.220 -p 10050 -k "docker_monitor"

结果是1,说明OK了,否则报错的话就要排查错误,直到输出结果是我们要的那个

其中

-s 客户端的IP
-p 客户端端口,默认10050
-k 监控项的key

报错1

$ docker exec -t zabbix-agent zabbix_get -s 117.50.93.138 -p 10050 -k "docker_monitor" 
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/mwx_ndj_hosting/json: dial unix /var/run/docker.sock: connect: permission denied
/etc/zabbix/scripts/docker_monitor.sh: line 13: /var/log/docker_monitor.log: Permission denied
0

解决

touch /var/log/docker_monitor.log
chown zabbix.zabbix /var/log/docker_monitor.log

报错2

$ docker exec -t zabbix-agent zabbix_get -s 117.50.93.138 -p 10050 -k "docker_monitor"
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/mwx_ndj_hosting/json: dial unix /var/run/docker.sock: connect: permission denied
0

解决查看文档

zabbix监控脚本中执行docker命令报错

sudo usermod -aG docker zabbix
systemctl restart zabbix-agent

zabbix控制台配置

web面板创建监控项

填好之后,保存

创建一个触发器来发送告警

检查一下状态

再创建一个图形

过一段时间之后发现就有数据显示了

测试一下告警有没有生效,把这个容器stop

大约10s就触发了告警