Docker部署Zabbix创建定时报表报Web Service连接超时如何解决?
Zabbix Web Service 报表超时问题排查解决思路
1 核心配置校验
- 检查
docker-compose.yml中zabbix-web-service容器的ZBX_ALLOWEDIP参数,必须配置为zabbix-server容器的网段/固定IP,若仅写127.0.0.1会导致跨容器通信失效,刚启动时临时缓存可能生效,路由刷新后就会出现访问失败 - 确认zabbix-server配置里的
ZBX_WEBSERVICEURL参数,值必须是zabbix-web-service容器的服务名+端口(默认10053),格式为http://zabbix-web-service:10053/report,不要填写127.0.0.1或者宿主机IP避免网络抖动导致连接失败 - 检查容器资源限制,若zabbix-web-service分配的内存/CPU阈值过低,宿主机压力大时服务进程会被OOM killer静默杀掉但容器仍处于运行状态,就会出现刚重启可用、运行一段时间后无响应的问题
2 运行时状态排查
- 服务报错时先不要直接重启容器,进入zabbix-web-service容器执行
ps aux查看zabbix_web_service进程是否存活,执行netstat -tunlp确认10053端口是否处于监听状态 - 从zabbix-server容器内执行
curl http://<zabbix-web-service容器IP>:10053/,返回404说明服务正常,超时则代表web service进程假死或容器间网络不通 - 检查zabbix-web-service容器的句柄限制,执行
ulimit -n,若默认值为1024,处理几次请求后句柄占满就会拒绝新连接,需要在docker-compose配置中为容器增加如下参数:
ulimits: nofile: soft: 65535 hard: 65535
3 兼容性与环境问题排查
- 当前使用的
ubuntu-latest标签属于滚动更新镜像,可能存在依赖版本未同步的bug,建议固定到具体版本号比如zabbix/zabbix-web-service:6.4.10,排除跨小版本的兼容性问题 - 检查宿主机的防火墙/ufw/iptables规则,确认是否存在动态封禁策略,多次请求后zabbix-server的容器IP被封禁,重启容器后IP变更就恢复可用,运行一段时间后再次被封禁
- 排查Docker网络是否存在IP冲突,导致流量被转发到错误的服务上
4 临时兜底方案
若暂时未定位到根因,可以为zabbix-web-service容器配置健康检查和自动重启策略,服务假死时自动恢复,不影响定时报表运行:
healthcheck: test: ["CMD", "curl", "-f", "http://localhost:10053/"] interval: 30s timeout: 10s retries: 3 restart: always
内容的提问来源于stack exchange,提问作者Mi1anovic
相关产品推荐
相关产品推荐

