zabbix 监控docker 容器
客户端配置,可以参考:
zabbix自定义监控 之获取用户登录信息 : 连接
然后再配置监控docker 容器的;
2. 创建 Docker 监控脚本
创建 /etc/zabbix/scripts/docker_monitor.sh
#!/bin/bash
CONTAINER_NAME="$1"
METRIC="$2"
# 参数检查
if [ -z "$CONTAINER_NAME" ] || [ -z "$METRIC" ]; then
echo "ERROR: Missing parameters"
exit 1
fi
# 检查 Docker 命令是否存在
if ! command -v docker &> /dev/null; then
echo "ERROR: Docker not found"
exit 1
fi
# 处理容器名称(去除可能的前导斜杠)
CLEAN_CONTAINER_NAME=$(echo "$CONTAINER_NAME" | sed 's/^\///')
# 检查容器是否存在
if ! docker ps -a --format '{{.Names}}' | grep -Fx "$CLEAN_CONTAINER_NAME" > /dev/null 2>&1; then
echo "ERROR: Container $CLEAN_CONTAINER_NAME not found"
exit 1
fi
case "$METRIC" in
"status")
# 容器状态 (1=运行, 0=停止)
if docker inspect --format='{{.State.Running}}' "$CLEAN_CONTAINER_NAME" 2>/dev/null | grep -q "true"; then
echo 1
else
echo 0
fi
;;
"cpu")
# CPU 使用百分比
RESULT=$(docker stats --no-stream --format "{{.CPUPerc}}" "$CLEAN_CONTAINER_NAME" 2>/dev/null | sed 's/%//' | head -1)
if [ -n "$RESULT" ] && [ "$RESULT" != "<NA>" ] && [ "$RESULT" != "--" ]; then
echo "$RESULT"
else
echo 0
fi
;;
"memory")
# 内存使用百分比
RESULT=$(docker stats --no-stream --format "{{.MemPerc}}" "$CLEAN_CONTAINER_NAME" 2>/dev/null | sed 's/%//' | head -1)
if [ -n "$RESULT" ] && [ "$RESULT" != "<NA>" ] && [ "$RESULT" != "--" ]; then
echo "$RESULT"
else
echo 0
fi
;;
"memory_usage")
# 内存使用量 (MB)
RESULT=$(docker stats --no-stream --format "{{.MemUsage}}" "$CLEAN_CONTAINER_NAME" 2>/dev/null | awk '{print $1}' | head -1)
if [ -n "$RESULT" ] && [ "$RESULT" != "<NA>" ] && [ "$RESULT" != "--" ]; then
# 转换为 MB
if [[ $RESULT == *GiB ]]; then
echo "$(echo "$RESULT" | sed 's/GiB$//' | awk '{print $1*1024}')"
elif [[ $RESULT == *MiB ]]; then
echo "$(echo "$RESULT" | sed 's/MiB$//' | awk '{print $1}')"
elif [[ $RESULT == *KiB ]]; then
echo "$(echo "$RESULT" | sed 's/KiB$//' | awk '{print $1/1024}')"
else
echo "$RESULT"
fi
else
echo 0
fi
;;
*)
echo "ERROR: Unknown metric $METRIC"
exit 1
;;
esac
设置脚本权限
sudo mkdir -p /etc/zabbix/scripts
sudo chmod +x /etc/zabbix/scripts/docker_monitor.sh
sudo chown zabbix:zabbix /etc/zabbix/scripts/docker_monitor.sh
3. 配置 UserParameter
创建 /etc/zabbix/zabbix_agentd.d/docker.conf:
# Docker 容器监控 UserParameter
UserParameter=docker.container.status[*],/etc/zabbix/scripts/docker_monitor.sh "$1" status
UserParameter=docker.container.cpu[*],/etc/zabbix/scripts/docker_monitor.sh "$1" cpu
UserParameter=docker.container.memory[*],/etc/zabbix/scripts/docker_monitor.sh "$1" memory
UserParameter=docker.container.memory_usage[*],/etc/zabbix/scripts/docker_monitor.sh "$1" memory_usage
# 容器发现规则
UserParameter=docker.container.discovery,/etc/zabbix/scripts/docker_discovery.sh
4. 创建容器发现脚本
创建 /etc/zabbix/scripts/docker_discovery.sh:
#!/bin/bash
echo '{"data":['
FIRST=true
docker ps --format '{{.Names}}' | while read container; do
if [ -n "$container" ]; then
if [ "$FIRST" = true ]; then
FIRST=false
else
echo ","
fi
# 转义特殊字符
ESCAPED_CONTAINER=$(echo "$container" | sed 's/\\/\\\\/g' | sed 's/"/\\"/g')
echo -n "{\"{#CONTAINER.NAME}\":\"$ESCAPED_CONTAINER\"}"
fi
done
echo ""
echo ']}'
设置权限:
sudo chmod +x /etc/zabbix/scripts/docker_discovery.sh
sudo chown zabbix:zabbix /etc/zabbix/scripts/docker_discovery.sh
5. 启动 Zabbix Agent
# 确保 zabbix 用户可以访问 Docker
sudo usermod -aG docker zabbix
# 启动 Zabbix Agent
sudo systemctl enable zabbix-agent
sudo systemctl restart zabbix-agent
sudo systemctl status zabbix-agent
6. 在 Zabbix Server 上配置
找到主机,然后点击 监控项- 》 创建监控项
欢迎来撩 : 汇总all