首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Docker 部署最新 Zabbix 8.0 与 Agent2 全流程指南

Docker 部署最新 Zabbix 8.0 与 Agent2 全流程指南

原创
作者头像
聂伟星
发布于 2026-10-29 17:26:27
发布于 2026-10-29 17:26:27
830
举报

Docker 部署最新 Zabbix 8.0 与 Agent2 全流程指南

Zabbix 是企业级开源监控的事实标准之一,能够监控网络设备、服务器、虚拟机、容器乃至应用指标。随着版本演进,Zabbix 8.0 已成为当前最新的稳定版(LTS),在性能、可观测性和用户体验上都有明显提升。

用 Docker 部署 Zabbix 是目前最推荐的方式:环境隔离、版本可控、升级简单,一条 docker compose up 就能拉起一整套监控平台。本文基于官方镜像,手把手带你用 Docker Compose 部署 Zabbix Server + Web 前端 + MySQL + Agent2,并总结大量实战中容易踩坑的注意事项。

说明:文中镜像统一使用 alpine-latest 标签,始终拉取当前最新稳定版(目前即 Zabbix 8.0 LTS)。若需要锁定大版本,可把 alpine-latest 替换为 alpine-8.0-latest。

一、环境准备

在开始之前,请确认宿主机满足以下要求:

  • Docker Engine:20.10 及以上(建议 24.x / 27.x 稳定版)
  • Docker Compose:v2.24.0 及以上(docker compose version 可查)
  • 资源:最低 2 核 4G;生产环境建议 4 核 8G 起步,监控目标越多内存需求越大
  • 磁盘:预留至少 20G 用于数据库与历史数据存储(视监控规模而定)
  • 网络:放通 8080(Web)、10051(Server)、10050(Agent 被动模式)端口

如果你的宿主机还没有 Docker,可以用官方一键脚本安装:

代码语言:bash
复制
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl enable --now docker
docker compose version

二、整体架构与端口

我们采用最经典的单节点全套部署,组件如下:

组件

镜像

作用

端口

MySQL

mysql:8.0

存储配置与历史数据

3306

Zabbix Server

zabbix/zabbix-server-mysql

核心采集与告警引擎

10051

Zabbix Web

zabbix/zabbix-web-nginx-mysql

Nginx + PHP 前端界面

8080

Zabbix Agent2

zabbix/zabbix-agent2

监控宿主机本身(含 Docker 监控)

10050

各容器通过 Docker Compose 默认网络以服务名互相发现(mysql-server、zabbix-server 等),无需手动配置 IP。

三、编写 docker-compose.yml

新建工作目录并创建编排文件:

代码语言:bash
复制
mkdir -p /opt/zabbix && cd /opt/zabbix
mkdir -p mysql-data zabbix-server agent2

docker-compose.yml 完整内容如下(注意替换其中的密码):

代码语言:yaml
复制
version: '3.5'

services:
  mysql-server:
    image: mysql:8.0
    container_name: zabbix-mysql
    restart: unless-stopped
    # 关键:MySQL 8 开启 binlog 时,Zabbix 初始化建库函数需要该变量,否则建库失败
    command:
      - --log-bin-trust-function-creators=1
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_bin
    environment:
      MYSQL_DATABASE: zabbix
      MYSQL_USER: zabbix
      MYSQL_PASSWORD: Zabbix@123456
      MYSQL_ROOT_PASSWORD: Root@123456
    volumes:
      - ./mysql-data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-pRoot@123456"]
      interval: 10s
      timeout: 5s
      retries: 10

  zabbix-server:
    image: zabbix/zabbix-server-mysql:alpine-latest
    container_name: zabbix-server
    restart: unless-stopped
    depends_on:
      mysql-server:
        condition: service_healthy
    environment:
      DB_SERVER_HOST: mysql-server
      MYSQL_DATABASE: zabbix
      MYSQL_USER: zabbix
      MYSQL_PASSWORD: Zabbix@123456
      MYSQL_ROOT_PASSWORD: Root@123456
      ZBX_JAVAGATEWAY: zabbix-java-gateway
      ZBX_JAVAGATEWAY_ENABLE: "true"
      TZ: Asia/Shanghai
    ports:
      - "10051:10051"
    volumes:
      - ./zabbix-server:/etc/zabbix

  zabbix-java-gateway:
    image: zabbix/zabbix-java-gateway:alpine-latest
    container_name: zabbix-java-gateway
    restart: unless-stopped
    environment:
      TZ: Asia/Shanghai

  zabbix-web:
    image: zabbix/zabbix-web-nginx-mysql:alpine-latest
    container_name: zabbix-web
    restart: unless-stopped
    depends_on:
      - mysql-server
      - zabbix-server
    environment:
      DB_SERVER_HOST: mysql-server
      MYSQL_DATABASE: zabbix
      MYSQL_USER: zabbix
      MYSQL_PASSWORD: Zabbix@123456
      ZBX_SERVER_HOST: zabbix-server
      PHP_TZ: Asia/Shanghai
    ports:
      - "8080:8080"

  zabbix-agent2:
    image: zabbix/zabbix-agent2:alpine-latest
    container_name: zabbix-agent2
    restart: unless-stopped
    depends_on:
      - zabbix-server
    environment:
      ZBX_SERVER_HOST: zabbix-server
      ZBX_HOSTNAME: Zabbix server
      TZ: Asia/Shanghai
    ports:
      - "10050:10050"
    volumes:
      # 只读挂载 docker.sock,启用 Zabbix 对容器的监控模板
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /etc/localtime:/etc/localtime:ro

四、启动与初始化

在 docker-compose.yml 所在目录执行:

代码语言:bash
复制
docker compose up -d

第一次启动会经历"拉镜像 → 建库 → 导入 Zabbix schema → Server 启动"的过程,通常需要 3~5 分钟。期间可以通过日志观察进度:

代码语言:bash
复制
docker compose ps
docker compose logs -f zabbix-server

当你在 Server 日志中看到类似 Zabbix server started 的提示,说明核心服务已就绪。

随后在浏览器访问 http://<你的服务器IP>:8080,使用默认账号登录:

  • 用户名:Admin
  • 密码:zabbix

若页面提示数据库未初始化或连接失败,多半是 MySQL 还没建库完成,稍等片刻刷新即可。

五、配置 Agent 与主机监控

1. 监控 Zabbix 服务器本身

上面编排里已经启动了 zabbix-agent2 容器,并在 Web 中默认会有一个名为 Zabbix server 的主机。进入「监测 → 主机 → Zabbix server」,确认其"Zabbix agent"可用性为绿色(可用)。然后给它链接官方模板:

  • Templates/Operating systems 下的 Linux by Zabbix agent2
  • 若想监控容器,链接 Docker 相关模板(如 Template App Docker)

等待几分钟,就能在「最新数据」里看到 CPU、内存、磁盘、Docker 容器等指标。

2. 监控其他远程主机

在需要被监控的机器上安装 Agent2(以 CentOS/RHEL 为例):

代码语言:bash
复制
rpm -Uvh https://repo.zabbix.com/zabbix/8.0/rhel/9/x86_64/zabbix-release-latest-8.0.el9.noarch.rpm
dnf install -y zabbix-agent2 zabbix-agent2-plugin-*

修改配置,把 Server 指向你的 Zabbix Server 地址(被动模式)并设主机名:

代码语言:bash
复制
sed -i 's/^Server=127.0.0.1/Server=192.168.1.100/' /etc/zabbix/zabbix_agent2.conf
sed -i 's/^Hostname=Zabbix server/Hostname=web-node-01/' /etc/zabbix/zabbix_agent2.conf
systemctl enable --now zabbix-agent2

然后在 Web 端「数据采集 → 主机」中新建主机,主机名与 Agent 的 Hostname 保持一致,并链接 Linux by Zabbix agent2 模板即可。

六、注意事项(避坑重点)

  1. MySQL 必须设置 log_bin_trust_function_creators=1:从 Zabbix 6.0 起,初始化建库会创建存储函数,若 MySQL 开启二进制日志又未授权,建库会直接失败。本文已在 command 中预置,使用外部独立 MySQL 时务必同样配置。
  2. 所有组件版本必须一致:Server、Web、Agent、Java Gateway 的 Zabbix 大版本必须相同(都 latest 或都 8.0-latest),混用会导致协议不兼容、数据异常。
  3. 时区一定要统一:容器设置 TZ=Asia/Shanghai,Web 设置 PHP_TZ=Asia/Shanghai,否则告警时间、图表时间会错乱,排查问题时非常迷惑。
  4. 数据必须持久化:mysql-data、各组件配置目录都要挂载 volume,否则容器重建后历史数据与配置全部丢失。
  5. 第一时间修改默认密码:Admin/zabbix 是公开默认凭据,上线前务必修改,并建议创建专用低权限账号日常使用。
  6. 首次启动请耐心等待:数据库初始化较慢,Web 首次打开可能报错或空白,这不是故障,等 Server 日志出现 started 再访问。
  7. 端口冲突与防火墙:确认宿主机 8080/10051/10050 未被占用,云服务器还需在安全组放通对应端口;Agent 被动模式需 Server 能访问被监控机的 10050。
  8. 内存与缓存调优:监控规模上来后,Server 的 CacheSize、HistoryCacheSize 等参数需要按需调大,默认配置在主机数上千时会成为瓶颈。
  9. Java Gateway 可选:只有监控 JMX(如 Tomcat、Kafka)时才需要 Java Gateway;不需要可以删除该服务以节省资源。
  10. 升级策略:使用 latest 标签虽然方便,但大版本升级(如将来 8.0→9.0)建议先在测试环境验证,并提前备份 mysql-data 后再升级。

七、常见故障排查

Q1:Web 页面打不开或一直转圈?

先确认容器都在运行:docker compose ps。再看 zabbix-web 日志是否有连不上数据库或 PHP 报错,多半是 MySQL 还没就绪,等待即可。

Q2:Zabbix server 一直重启?

最常见原因是连不上 MySQL 或数据库未初始化完成。查看 docker compose logs zabbix-server,若提示数据库函数创建失败,检查 log_bin_trust_function_creators 是否设置。

Q3:主机可用性显示红色(不可用)?

检查 Agent 的 Server 配置是否指向正确地址、Hostname 是否与 Web 中主机名一致;被动模式还要确认 Server 到 Agent 的 10050 端口通畅。

Q4:最新数据里看不到指标?

确认主机已链接对应模板,且 Agent 可用性为绿色;新链接模板后通常需要 1~3 个采集周期(默认 1 分钟)才有数据。

八、总结

通过 Docker Compose,我们可以在几分钟内搭建一套功能完整的 Zabbix 8.0 监控平台:MySQL 负责存储,Zabbix Server 负责采集与告警,Web 提供可视化,Agent2 负责主机与容器指标采集。只要把文中提到的版本一致、时区统一、数据持久化、MySQL 建库参数、默认密码修改这五个关键点处理好,绝大多数部署问题都能迎刃而解。

后续你可以继续接入 SNMP 设备、JMX 应用、以及通过 Proxy 实现大规模分布式监控,Zabbix 的扩展能力足以支撑从几十台到上万节点的监控场景。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • Docker 部署最新 Zabbix 8.0 与 Agent2 全流程指南
    • 一、环境准备
    • 二、整体架构与端口
    • 三、编写 docker-compose.yml
    • 四、启动与初始化
    • 五、配置 Agent 与主机监控
      • 1. 监控 Zabbix 服务器本身
      • 2. 监控其他远程主机
    • 六、注意事项(避坑重点)
    • 七、常见故障排查
    • 八、总结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档