一、环境架构概览

  • 宿主机环境:Windows (Oracle VirtualBox)
  • 网络模式:Host-Only(主机-VM-VM连通) + NET(出网)(HOST确保 101 与 102 在同一网段且互通)
  • 服务器规划
    • Zabbix Server (101):运行 Zabbix Server, Web UI, MySQL/PostgreSQL。
    • Zabbix Agent (102):仅运行 Zabbix Agent,作为被监控目标。
  • 操作系统Ubuntu 26.04 (Resolute) 
  • 环境:docker容器两台主机需要提前自己装好

二、服务端部署 (Server 101)

核心步骤

  1. 准备目录与文件
    创建 docker-compose.yml,包含 zabbix-server, web, mysql、agent 四个服务。然后复制以下文本进去

    sudo mkdir /opt/zabbix && cd /opt/zabbix && sudo nano docker-compose.yml
  2. services:
      zabbix-db:
        image: mysql:8.0
        container_name: zabbix-db #服务名
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: ZabbixRootP@ss2026 #数据库root密码 根据自己喜欢修改
          MYSQL_DATABASE: zabbix
          MYSQL_USER: zabbix
          MYSQL_PASSWORD: ZabbixP@ss2026
        command:
          - --character-set-server=utf8mb3
          - --collation-server=utf8mb3_bin
          - --default-authentication-plugin=caching_sha2_password
          - --log_bin_trust_function_creators=1
    	  - --innodb-strict-mode=OFF
        volumes:
          - ./data/mysql:/var/lib/mysql
        healthcheck:
          test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
          interval: 10s
          timeout: 5s
          retries: 5
    
      zabbix-server:
        image: zabbix/zabbix-server-mysql:alpine-7.0-latest
        container_name: zabbix-server
        restart: always
        depends_on:
          zabbix-db:
            condition: service_healthy
        environment:
          DB_SERVER_HOST: zabbix-db
          MYSQL_DATABASE: zabbix
          MYSQL_USER: zabbix
          MYSQL_PASSWORD: ZabbixP@ss2026
        ports:
          - "10051:10051"
        volumes:
          - ./data/zabbix:/var/lib/zabbix
    
      zabbix-web:
        image: zabbix/zabbix-web-nginx-mysql:alpine-7.0-latest
        container_name: zabbix-web
        restart: always
        depends_on:
          - zabbix-server
          - zabbix-db
        environment:
          DB_SERVER_HOST: zabbix-db
          MYSQL_DATABASE: zabbix
          MYSQL_USER: zabbix
          MYSQL_PASSWORD: ZabbixP@ss2026
          ZBX_SERVER_HOST: zabbix-server
          PHP_TZ: Asia/Shanghai
        ports:
          - "8080:8080"
    
      zabbix-agent:
        image: zabbix/zabbix-agent:alpine-7.0-latest
        container_name: zabbix-agent
        restart: always
        depends_on:
          - zabbix-server
        environment:
          ZBX_SERVER_HOST: zabbix-server
          ZBX_SERVER_ACTIVE: zabbix-server
          ZBX_HOSTNAME: ZabbixServer
        ports:
          - "10050:10050"
        volumes:
          - /proc:/host/proc:ro
  3. 启动服务(在yml同一目录中运行以下命令)

    docker compose up -d
    
  4. 初始化检查

    • 查看日志确认数据库初始化成功:
      docker compose logs -f zabbix-server
      
    • 关键报错处理:若出现 users table is empty,说明数据库未正确初始化。需彻底删除数据卷 (rm -rf data) 后重新启动。
      sudo docker compose down -v #停止容器并删除
      
      sudo rm -rf ./data/ #如果有的话删
      
      #重新走第三步
  5. 访问控制台

    • 默认端口:808080 (取决于 yml 映射)。
    • Server 端 (101) 操作

      sudo ufw allow 10050/tcp # agent端口
      sudo ufw allow 8080/tcp # 前端页面端口
      sudo ufw allow 10051/tcp #(可选)配置主动模式需要开放
      sudo ufw status
      
    • 开放前端访问端口(浏览器访问):IP101:8080
    • 默认账号:Admin / zabbix

三、客户端部署 (Agent 102)

配置文件 (docker-compose.yml)

services:
  zabbix-agent:
    image: zabbix/zabbix-agent:alpine-7.0-latest
    container_name: zabbix-agent-102
    restart: always
    environment:
      # 指向 101 服务器的 IP 按自己实际情况修改
      ZBX_SERVER_HOST: "192.168.56.101"
      ZBX_SERVER_ACTIVE: "192.168.56.102"
      # 必须与控制台添加的主机名称完全一致
      ZBX_HOSTNAME: "Server-102"
    ports:
      - "10050:10050"
    volumes:
      # 关键:挂载系统目录以获取真实负载数据
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /dev:/host/dev:ro

关键点解析

  • 不要加 depends_on:Agent 端没有 Server 容器,加了会报错无法启动。
  • Volume 挂载:必须挂载 /proc/sys,否则监控到的 CPU/内存是容器内部的假数据。

四、网络与防火墙配置 (重点)

由于使用了 Ubuntu 且开启了 UFW,必须手动放行端口

1. Agent 端 (102) 操作

  • 开放被动监控端口(Server 主动来抓取数据):
    sudo ufw allow 10050/tcp

五、Web 控制台配置流程

  1. 进入菜单:数据采集 (Data collection) -> 主机 (Hosts)。
  2. 创建主机
    • 主机名称:必须与 Docker 环境变量 ZBX_HOSTNAME 一致(例如 Server-102)。
    • 接口:填入 102 的 IP 地址,端口 10050
    • 模板:搜索并链接 Linux by Zabbix agent
  3. 验证状态
    • 等待几分钟,观察“可用性”列。
    • 绿色 ZBX:连接成功。
    • 红色 ZBX:点击图标查看报错(通常是 Connection refused 或 Timeout)。

六、常见故障排查清单

现象 可能原因 解决方案
Server 启动失败 数据库表为空 删除数据卷重新 up -d
Agent 无法启动 依赖错误 删除 depends_on: zabbix-server
监控数据为 0 权限不足 检查 /proc 等目录是否挂载且为只读 (:ro)
ZBX 图标变红 防火墙拦截 102 服务器执行 ufw allow 10050
ZBX 图标变红 主机名不匹配 检查 Web 端主机名与 Agent 环境变量是否完全一致
找不到主机 网络不通 检查 VirtualBox 网络适配器设置及 IP 配置

初学这个随便搭建的,以备后续查阅。供大家参考参考

Logo

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

更多推荐