Zabbix 7.4 Alpine 版 Docker Compose 部署

compose.yaml

services:
  # ---------------------------------------------------------------------------
  # 1. 数据库服务 (MariaDB)
  # ---------------------------------------------------------------------------
  zabbix-db:
    image: mariadb:11.8
    container_name: zabbix-db
    restart: always
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_bin
      - --default-authentication-plugin=mysql_native_password
      - --innodb-buffer-pool-size=1G
      - --innodb-log-file-size=256M
      - --max-connections=500
    environment:
      MYSQL_DATABASE: ${MYSQL_DATABASE:-zabbix}
      MYSQL_USER: ${MYSQL_USER:-zabbix}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD:-zabbix_secret_password}
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root_secret_password}
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - zabbix-net
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 10s
      timeout: 5s
      retries: 5

  # ---------------------------------------------------------------------------
  # 2. Zabbix Server 服务 (MySQL/MariaDB 后端)
  # ---------------------------------------------------------------------------
  zabbix-server:
    image: zabbix/zabbix-server-mysql:alpine-7.4-latest
    container_name: zabbix-server
    restart: always
    ports:
      - "10051:10051"
    environment:
      DB_SERVER_HOST: zabbix-db
      MYSQL_DATABASE: ${MYSQL_DATABASE:-zabbix}
      MYSQL_USER: ${MYSQL_USER:-zabbix}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD:-zabbix_secret_password}
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root_secret_password}
      ZBX_JAVAGATEWAY_ENABLE: "false"
      ZBX_CACHESIZE: "128M"
      ZBX_HISTORYCACHESIZE: "128M"
      ZBX_HISTORYINDEXCACHESIZE: "64M"
      ZBX_TRENDCACHESIZE: "64M"
      ZBX_VALUECACHE_SIZE: "256M"
      TZ: "Asia/Shanghai"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - zabbix-alertscripts:/usr/lib/zabbix/alertscripts
      - zabbix-externalscripts:/usr/lib/zabbix/externalscripts
    networks:
      - zabbix-net
    depends_on:
      zabbix-db:
        condition: service_healthy

  # ---------------------------------------------------------------------------
  # 3. Zabbix Web 前端 (Nginx + PHP-FPM)
  # ---------------------------------------------------------------------------
  zabbix-web-nginx:
    image: zabbix/zabbix-web-nginx-mysql:alpine-7.4-latest
    container_name: zabbix-web-nginx
    restart: always
    ports:
      - "8080:8080"
      - "8443:8443"
    environment:
      DB_SERVER_HOST: zabbix-db
      MYSQL_DATABASE: ${MYSQL_DATABASE:-zabbix}
      MYSQL_USER: ${MYSQL_USER:-zabbix}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD:-zabbix_secret_password}
      ZBX_SERVER_HOST: zabbix-server
      PHP_TZ: "Asia/Shanghai"
    volumes:
      - /etc/localtime:/etc/localtime:ro
    networks:
      - zabbix-net
    depends_on:
      zabbix-db:
        condition: service_healthy
      zabbix-server:
        condition: service_started

  # ---------------------------------------------------------------------------
  # 4. Zabbix Agent 2 (监控宿主机自身)
  # ---------------------------------------------------------------------------
  zabbix-agent2:
    image: zabbix/zabbix-agent2:alpine-7.4-latest
    container_name: zabbix-agent2
    restart: always
    ports:
      - "10050:10050"
    privileged: true
    pid: "host"
    environment:
      ZBX_SERVER_HOST: "zabbix-server,127.0.0.1"
      ZBX_HOSTNAME: "Zabbix server"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /:/host:ro
    networks:
      - zabbix-net
    depends_on:
      - zabbix-server

# -----------------------------------------------------------------------------
# 持久化 Data Volume
# -----------------------------------------------------------------------------
volumes:
  db-data:
    driver: local
  zabbix-alertscripts:
    driver: local
  zabbix-externalscripts:
    driver: local

# -----------------------------------------------------------------------------
# 网络配置
# -----------------------------------------------------------------------------
networks:
  zabbix-net:
    driver: bridge

生产部署要点说明

  1. 环境凭据安全: 强烈建议在 compose.yaml 同级目录下新建一个 .env 文件,将密码替换为自定义安全字符串:

    代码段
     
    MYSQL_DATABASE=zabbix
    MYSQL_USER=zabbix
    MYSQL_PASSWORD=YourStrongDBPassword123!
    MYSQL_ROOT_PASSWORD=YourStrongRootPassword123!
  2. 性能与缓存优化: 在 zabbix-db 中添加了参数 --innodb-buffer-pool-size=1G,在 zabbix-server 中放大了 ZBX_VALUECACHE_SIZE 等缓存配置,避免中大型监控场景下的缓存瓶颈。

  3. 健康检查依赖(Healthcheck): 使用 depends_on: condition: service_healthy,确保 MariaDB 完全初始化并准备好接收连接后,Zabbix Server 才会启动建表,避免首次启动时 Server 因数据库未就绪而频繁崩溃重启。

  4. 宿主机监控: Agent 2 挂载了 /var/run/docker.sock 和根目录 /host:ro,并开启 pid: "host",可直接通过官方模板采集宿主机的 CPU、内存、磁盘以及 Docker 容器状态。

前端 Web 页面配置

  1. 登录 Zabbix Web 界面(默认端口 8080,初始账号密码 Admin / zabbix)。

  2. 点击左侧菜单 Data collection -> Hosts。

  3. 找到默认生成的 Zabbix server 主机(如果禁用状态则启用它)。

  4. 点击进入配置:

    • Host name:必须与 compose.yaml 中环境变量 ZBX_HOSTNAME: "Zabbix server" 完全一致(区分大小写)。

    • Interfaces(接口配置):选择 Agent 类型。

      • DNS name:填 zabbix-agent2(Docker 服务名/容器名)。

      • Connect to:选择 DNS。

      • Port:10050。

  5. 保存后等待 1~2 分钟,页面上该主机的 BX 标识变为绿色,即代表连接成功。

监控外部物理机 / 其他服务器上的 Agent 2

如果你是在其他独立服务器上安装了 Zabbix Agent 2,需要将其连接回 Docker 运行的 Zabbix Server。

1. 外部服务器的 zabbix_agent2.conf 配置

修改 Agent 2 的配置文件(通常位于 /etc/zabbix/zabbix_agent2.conf):

Ini, TOML
 
# 被动模式:允许来自 Zabbix Server 宿主机公网/内网 IP 的轮询请求
Server=192.168.1.100

# 主动模式:Agent 2 主动向 Zabbix Server 汇报数据
ServerActive=192.168.1.100:10051

# 本机标识:必须与 Web 界面添加 Host 时的 Host name 完全一致
Hostname=Web-Server-01

(注意:将 192.168.1.100 替换为你运行 Zabbix Docker 的宿主机实际 IP)

修改后重启外部 Agent 2 服务:

Bash
 
systemctl restart zabbix-agent2

2. 前端 Web 页面添加该主机

  1. 路径:Data collection -> Hosts -> 点击右上角 Create host。

  2. Host name:填写 Web-Server-01(对应 Agent 配置文件中的 Hostname)。

  3. Templates:添加官方模板 Linux by Zabbix agent ZBX 或 System Performance by Zabbix agent。

  4. Interfaces -> Add Agent:

    • IP address:填写外部服务器的实际 IP。

    • Connect to:选择 IP。

    • Port:10050。

  5. 点击 Add 添加。

 

posted @ 2026-10-06 17:55  木子欢儿  阅读(3)  评论(0)    收藏  举报