容器化部署的Zabbix Agent如何监控宿主机Docker容器
结论
完全可以通过容器化运行的Zabbix Agent实现宿主机上其他Docker容器的监控,无需在宿主机额外部署Zabbix Agent。你提到的已停维第三方镜像核心实现逻辑是挂载宿主机Docker套接字实现Docker API调用,目前官方Zabbix Agent 2版本已经原生内置Docker监控插件,不需要依赖第三方镜像即可实现该能力。
前置要求
- 现有容器化部署的Zabbix Server、数据库、Zabbix Agent网络连通正常,Agent已可正常向Server上报基础监控数据
- 宿主机Docker服务运行正常,默认Docker Unix套接字路径为
/var/run/docker.sock - 优先使用官方
zabbix/zabbix-agent2镜像部署Agent,老版zabbix-agent无内置Docker插件,需要自行编写监控脚本,维护成本较高
配置步骤
1. 调整Zabbix Agent容器启动配置
核心是将宿主机Docker套接字以只读模式挂载进Agent容器,并给容器内运行Agent进程的用户开放套接字访问权限,不需要给容器开启特权模式。
- 直接docker命令启动的参考配置:
# 先获取宿主机docker套接字的用户组ID DOCKER_SOCK_GID=$(stat -c '%g' /var/run/docker.sock) # 启动Agent容器,在你原有启动参数基础上增加挂载和用户组配置 docker run \ # 此处保留你原有所有Agent启动参数,比如ZBX_SERVER_HOST、ZBX_HOSTNAME、端口映射、重启策略等 -v /var/run/docker.sock:/var/run/docker.sock:ro \ --group-add $DOCKER_SOCK_GID \ zabbix/zabbix-agent2:对应你的Zabbix Server版本标签
参数说明:
-v /var/run/docker.sock:/var/run/docker.sock:ro:只读挂载宿主机Docker套接字,只读权限完全满足监控采集需求,不会因为容器内操作篡改宿主机Docker配置--group-add $DOCKER_SOCK_GID:将容器内运行Agent进程的用户加入Docker套接字对应的用户组,解决套接字访问权限不足问题- docker-compose部署的参考配置段:
services: zabbix-agent2: image: zabbix/zabbix-agent2:对应你的Zabbix Server版本标签 # 保留原有环境变量配置,比如ZBX_SERVER_HOST、ZBX_HOSTNAME等 volumes: # 保留你原有其他挂载配置 - /var/run/docker.sock:/var/run/docker.sock:ro group_add: # 此处替换为你在宿主机执行stat -c '%g' /var/run/docker.sock获取到的组ID - 999 # 保留原有重启策略、网络模式等配置
2. 容器内采集能力校验
Agent容器启动完成后,在宿主机执行以下命令校验采集是否正常:
docker exec -it 你的Zabbix Agent容器名 zabbix_agent2 -t docker.info
如果命令返回Docker版本、容器总数、镜像总数等结构化数据,说明Agent已经可以正常访问宿主机Docker服务;如果返回权限拒绝错误,重新检查套接字挂载路径、用户组配置是否正确。
3. Zabbix前端配置
登录Zabbix Web管理端,找到对应宿主机绑定的Agent主机条目,在模板关联页面选择官方自带的 Docker by Zabbix agent 2 模板绑定即可。该模板已经预置了容器运行状态、CPU/内存/磁盘IO/网络IO资源占用、镜像/存储卷统计、容器异常退出触发器等常用监控能力,等待5-10分钟即可看到全量监控数据。
常见问题说明
- 若使用老版Zabbix Agent(非Agent2):需要自行在容器内安装docker-cli,挂载宿主机docker.sock和docker二进制文件,再编写UserParameter自定义监控项调用docker命令采集数据,维护成本高,无特殊需求不建议使用
- 若监控项提示不支持:进入Agent容器执行
curl --unix-socket /var/run/docker.sock http://localhost/version,如果能返回Docker版本JSON数据说明套接字连通正常,再检查Agent插件是否开启(默认已开启,可通过环境变量ZBX_DOCKER_PLUGIN_ENABLED=true强制开启) - rootless Docker场景:宿主机Docker套接字默认路径为用户目录下的
/run/user/你的UID/docker.sock,对应调整挂载路径即可 - 安全注意:禁止为了方便给Zabbix Agent容器开启
--privileged特权模式,只读挂载docker.sock配合用户组授权已经满足所有监控需求,特权模式会带来不必要的安全风险
内容的提问来源于stack exchange,提问作者user19413311
相关产品推荐
相关产品推荐

