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.10+
  • Docker Compose 2.12+
  • 开放端口:10051(Server)、8080(Web)、3306(MySQL)

验证环境:

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 docker

3. 编写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-server=utf8mb4
      - --collation-server=utf8mb4_bin
      - --default-authentication-plugin=mysql_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个poller)
  • PHP_TZ :必须设置否则仪表盘时间显示异常
  • MySQL 8.0需要特别指定字符集和认证插件

4. 启动与初始化

4.1 一键启动服务

docker-compose up -d

观察日志确保各容器正常启动:

docker-compose logs -f zabbix-server

4.2 初始化Web配置

  1. 访问 http://服务器IP:8080
  2. 按向导完成配置:
    • 数据库类型选MySQL
    • 数据库地址填 zabbix-mysql
    • 用户名/密码:zabbix/zabbix_pwd
  3. 使用默认账号登录:
    • 用户名: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: 32M

5.3 自定义监控模板

导入社区模板:

  1. 下载模板XML文件(如 VMware监控模板
  2. 进入 配置 → 模板 → 导入
  3. 上传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.uname

6.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 就完成迁移。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐