【网络监控】Zabbix 7.4 容器化部署实战(Docker Compose 一站式) 1. 为什么选择容器化部署Zabbix每次在物理机或虚拟机上手动部署Zabbix总会遇到各种依赖冲突、环境不一致的问题。记得有次为了编译一个snmp扩展花了整整一下午解决库版本问题。而Docker Compose的标准化部署方式能让你在10分钟内搭建起完整的Zabbix 7.4监控平台。Zabbix 7.4作为当前最新LTS版本新增了预测性监控和机器学习告警功能。通过容器化部署你可以获得环境隔离MySQL、Web前端、Server组件各自独立快速回滚版本升级失败一条命令即可恢复资源控制精确分配CPU/内存给每个组件一键启停开发测试环境随时销毁重建2. 部署前的准备工作2.1 硬件资源规划建议生产环境配置小型监控场景100台设备2核CPU / 4GB内存 / 50GB存储中型监控场景100-500台4核CPU / 8GB内存 / 100GB存储实测发现Zabbix Server容器内存占用会随监控项增长而增加建议预留20%缓冲空间2.2 软件环境要求确保宿主机已安装Docker 20.10Docker Compose 2.12开放端口10051Server、8080Web、3306MySQL验证环境docker --version docker-compose --version如果未安装用以下命令快速安装# Ubuntu/Debian sudo apt-get update sudo apt-get install -y docker.io docker-compose # CentOS/RHEL sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin sudo systemctl start docker3. 编写Docker Compose文件创建zabbix-docker目录新建docker-compose.yml文件version: 3.7 services: zabbix-server: image: zabbix/zabbix-server-mysql:7.4-latest ports: - 10051:10051 environment: DB_SERVER_HOST: zabbix-mysql MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix_pwd ZBX_STARTPOLLERS: 10 volumes: - zbx_export:/var/lib/zabbix/export depends_on: - zabbix-mysql restart: unless-stopped zabbix-web: image: zabbix/zabbix-web-nginx-mysql:7.4-latest ports: - 8080:8080 environment: DB_SERVER_HOST: zabbix-mysql MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix_pwd ZBX_SERVER_HOST: zabbix-server PHP_TZ: Asia/Shanghai depends_on: - zabbix-server restart: unless-stopped zabbix-mysql: image: mysql:8.0 command: - --character-set-serverutf8mb4 - --collation-serverutf8mb4_bin - --default-authentication-pluginmysql_native_password environment: MYSQL_DATABASE: zabbix MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix_pwd MYSQL_ROOT_PASSWORD: root_pwd volumes: - zbx_mysql:/var/lib/mysql restart: unless-stopped zabbix-agent: image: zabbix/zabbix-agent:7.4-latest environment: ZBX_HOSTNAME: zabbix-agent ZBX_SERVER_HOST: zabbix-server ports: - 10050:10050 restart: unless-stopped volumes: zbx_mysql: zbx_export:关键参数说明ZBX_STARTPOLLERS根据监控主机数量调整建议每50台设备增加5个pollerPHP_TZ必须设置否则仪表盘时间显示异常MySQL 8.0需要特别指定字符集和认证插件4. 启动与初始化4.1 一键启动服务docker-compose up -d观察日志确保各容器正常启动docker-compose logs -f zabbix-server4.2 初始化Web配置访问http://服务器IP:8080按向导完成配置数据库类型选MySQL数据库地址填zabbix-mysql用户名/密码zabbix/zabbix_pwd使用默认账号登录用户名Admin密码zabbix首次登录后建议立即修改密码我在测试环境曾因未改密码导致被植入挖矿程序5. 高级配置技巧5.1 数据持久化验证检查MySQL数据是否持久化docker-compose down docker-compose up -d # 重新登录后数据应仍然存在5.2 性能调优参数在zabbix-server服务段添加这些环境变量environment: ZBX_CACHESIZE: 128M ZBX_HISTORYCACHESIZE: 64M ZBX_HISTORYINDEXCACHESIZE: 32M5.3 自定义监控模板导入社区模板下载模板XML文件如 VMware监控模板 进入配置 → 模板 → 导入上传XML文件6. 常见问题排查6.1 Web界面无法访问检查Nginx容器日志docker-compose logs zabbix-web常见错误时区未设置 → 添加PHP_TZ环境变量数据库连接失败 → 检查zabbix-mysql容器状态6.2 监控数据不更新在Server容器内测试Agent连通性docker exec -it zabbix-docker_zabbix-server_1 zabbix_get -s 127.0.0.1 -k system.uname6.3 数据库性能瓶颈优化MySQL配置docker exec -it zabbix-docker_zabbix-mysql_1 mysql -uroot -proot_pwd执行SQL优化ALTER TABLE history_uint MODIFY itemid bigint unsigned NOT NULL; CREATE INDEX history_uint_1 ON history_uint (itemid, clock);这套方案已在生产环境稳定运行3个月监控着200服务器和网络设备。最大的优势是升级时只需要修改镜像版本号然后执行docker-compose pull docker-compose up -d就完成迁移。