Docker部署的Zabbix Server与Agent无法双向通信问题求助
问题排查与解决方案
核心问题定位
- 主机名不匹配导致的注册失败
你看到的host [xxxxxx] not found报错是核心原因:zabbix/zabbix-agent 镜像默认会将容器ID作为自身的Hostname上报给Zabbix Server,但是你并未在Zabbix前端控制台添加对应Hostname的监控主机,因此Server会直接拒绝Agent的注册和上报请求。 - 监控项数值类型不匹配
报错Value of type "string" is not suitable for value type "Numeric (unsigned)"是因为对应vfs.fs.size[/,pused]监控项的数值类型配置为「无符号数值」,但实际采集返回的是带小数的百分比数值,类型不兼容导致指标不生效。 - 偶发域名解析失败
Agent日志里短暂的cannot resolve [zabbix-server]是启动顺序导致的:Agent启动时Zabbix Server还未完成初始化注册到Docker网络,后续解析恢复就属于正常状态,不需要特殊处理,也可以调整启动依赖优化。
具体解决步骤
- 第一步:固定Agent主机名并配置允许的Server地址
修改docker-compose.yml中zabbix-agent服务的配置,新增Hostname配置和允许的被动检查Server地址:
zabbix-agent: image: zabbix/zabbix-agent:latest container_name: pooyesh-zabbix-agent hostname: pooyesh-zabbix-agent # 新增这行,固定Agent的主机名 privileged: true environment: - ZBX_SERVER_HOST=zabbix-server - ZBX_SERVERS=zabbix-server,127.0.0.1 # 新增这行,允许来自Zabbix Server的被动检查请求 volumes: - pooyesh-zabbix-agent:/etc/zabbix/ depends_on: # 新增启动依赖,保证Server先启动 - zabbix-server
- 第二步:在Zabbix前端添加对应监控主机
访问zabbix前端(默认地址为你配置的http://本机IP:8090,默认管理员账号Admin,密码zabbix),进入「配置」-「主机」-「创建主机」:- 主机名称填写
pooyesh-zabbix-agent(和上面配置的hostname完全一致) - 群组选择「Linux servers」或者自定义群组
- Interfaces处添加Agent接口,IP地址填
pooyesh-zabbix-agent(Docker网络内部服务名),端口填10050 - 模板页签关联「Linux by Zabbix agent」模板
- 点击添加即可
- 主机名称填写
- 第三步:修复不兼容的监控项
如果是默认模板里的vfs.fs.size[/,pused]报错,进入该监控项的配置页面,将「类型的信息」从「Numeric (unsigned)」修改为「Numeric (float)」,保存后等待下次采集就会恢复正常。
验证方法
修改配置后执行docker-compose up -d --force-recreate zabbix-agent重启Agent服务,等待1-2分钟查看两边日志,没有host not found报错、前端主机列表对应的Agent可用性图标变绿即说明通信正常。
内容的提问来源于stack exchange,提问作者Emad Helmi
相关产品推荐
相关产品推荐

