Administrator
Published on 2025-12-25 / 29 Visits
0
0

麒麟服务器上部署 Zabbix 7.0 LTS(Docker 企业版):离线归档、非默认端口、持久化映射、数据库备份一篇讲透

Image

Image

你装过 Zabbix,但你真正缺的往往不是“再装一次”,而是:
一套可复制、可审计、可离线交付、可长期运维的企业部署方法。

这篇文章:从麒麟服务器装 Docker 开始,到 拉取并归档指定 Zabbix 7.0 版本镜像,讲清每个镜像的作用与调用关系,端口不走默认值,路径映射可落盘,最后把 MySQL 备份与恢复 做成可直接交付的方案。


一、 为什么选 Zabbix 7.0,而不是“随便装个最新版”?

Zabbix 7.0 是 LTS(长期支持) 分支,适合企业环境“稳态运行”。官方生命周期页面明确列出 7.0 LTS 的发布时间与支持周期。
另外,Zabbix 官方发布了 7.0.22(2025-12-17)等维护版本,说明该分支仍在更新维护。

本文示例以 7.0.22(或你指定的 7.0.x)为准;你只要改一个版本号,就能一键复用全套流程。


https://www.zabbix.com/rn/rn7.0.22

1.1、先把“组件/镜像/调用链”讲清楚

Zabbix 容器化部署的核心思想是:一个组件一个容器,按职责拆开,升级/回滚更可控。官方也明确:Zabbix 提供按组件拆分的容器镜像(Server、Frontend、Proxy、Agent 等)。

https://www.zabbix.com/container_images

我们选用 MySQL 作为后端数据库(更常见、生态更成熟),典型最小可用组合:

MySQL(或 MariaDB)容器

  • 只负责存储:历史数据、趋势数据、配置数据、事件、告警等

  • 不直接对外暴露(建议仅容器网段可达)

zabbix-server-mysql

  • Zabbix Server 核心:采集、计算触发器、写库、发告警、提供 API

  • 启动时会检查数据库可用性,必要时创建库/表结构(镜像行为在官方容器说明中有描述)。

https://catalog.redhat.com/en/software/containers/zabbix/zabbix-server-mysql-70/66425419fc1b23180a424c56

zabbix-web-nginx-mysql(前端)

  • Nginx + Nginx 的 Web UI

  • 通过环境变量连接数据库与 Zabbix Server(官方示例说明了通过环境变量传 DB 与 ZBX_SERVER_HOST)。

https://catalog.redhat.com/en/software/containers/zabbix/zabbix-web-mysql-70/6642545da4063260a3b7800a

zabbix-agent2(被监控端)

  • 安装在麒麟服务器本机(可用容器跑,也可用原生包;本篇统一容器化)

  • 负责把 CPU/内存/磁盘/进程/日志等指标送到 Server/Proxy

1.2、调用链一图读懂

  • 浏览器 → Web 前端(你自定义端口)

  • Web 前端 → 连接 MySQL(读写配置/展示数据)

  • Web 前端 → 调用 Zabbix Server API(展示、配置、生效)

  • Zabbix Server ↔ Agent2(主动/被动采集,按你策略)

  • Zabbix Server → 写入 MySQL


2. 环境基线:麒麟服务器 + Docker

麒麟(银河麒麟)环境装 Docker,企业更常见两类:

  • 在线装(有外网/镜像源)

  • 离线装(内网、受控区、涉密/商密隔离环境更常见)

你如果要“可交付”,一定要把离线能力做进去。

下面给你一套“尽量不依赖发行版差异”的通用做法:优先用官方 docker-ce 仓库;不通就走离线二进制

2.1 检查麒麟版本/架构

cat /etc/kylin-release || cat /etc/os-release
uname -r
uname -m

2.2 安装 Docker(在线方式)

不同麒麟版本底层可能偏 Debian/Ubuntu 系或 RHEL 系,命令略有差异。你只要抓住原则:装 docker engine + compose 插件

安装后验证:

docker version
docker compose version

2.3 安装 Docker(离线方式)

核心动作就三步:
1)下载 docker 静态二进制包(按架构)
2)放到 /usr/bin
3)写 systemd 服务 + daemon.json


3. 关键要求落地:非默认端口 + 目录落盘 + 版本镜像归档

3.1 端口规划(全部避开默认值)

默认端口容易被扫、被误用,也不利于你在同机上做多套环境隔离。

建议示例(你可按单位规范改):

  • Zabbix Web(HTTP):18080(默认 80)

  • Zabbix Web(HTTPS):18443(默认 443,可选)

  • Zabbix Server:11051(默认 10051)

  • Agent2:11050(默认 10050)

  • MySQL:13306(默认 3306,且建议不映射到宿主机,只容器内部用)

3.2 目录映射规划(可审计、可备份、可迁移)

统一放到 /data/zbx7/,结构建议:

/data/zbx7/
  compose/                 # docker-compose.yml、.env
  mysql/
    data/                  # MySQL 数据目录(持久化)
    conf/                  # 自定义 my.cnf
    backup/                # 备份输出目录
  zabbix/
    alertscripts/          # 告警脚本
    externalscripts/       # 外部脚本
    modules/               # 模块
    snmptraps/             # SNMP Trap(可选)
  logs/                    # 统一日志(可选)
  images-archive/          # 镜像 tar 归档

4. 不同“标签版本”的解释说明

Zabbix 官方提供容器镜像,Docker Hub 上可用 alpine-7.0.0 等标签形式,你也能找到 7.0.0 的分层信息。
而 7.0 LTS 的维护版本(如 7.0.22)也有对应发布说明。

4.1、alpine 的核心优势

alpine 镜像特点:

  • 使用 musl libc

  • 静态依赖多

  • 用户态极简

  • 对宿主机发行版“几乎无感”

📌 结论:

alpine 是对银河麒麟“最不挑食”的基础镜像


查看所有可用的zabbix的标签

https://hub.docker.com/r/zabbix/zabbix-server-mysql/tags

alpine-trunk / trunk-alpine ≠ 正式版本

👉 它们是 Zabbix 的“开发分支(trunk)镜像”

不推荐用于生产
不能等价替代 7.0.x / 6.0.x
只适合开发 / 测试 / 参与 Zabbix 开发的人

在 Zabbix 官方体系中:

名称

含义

trunk

主开发分支(正在开发中的代码)

7.0.x

LTS 稳定分支

7.2 / 7.4

功能分支

6.0.x

上一代 LTS

4.2、alpine-trunk / trunk-alpine 拆开解释

我们把标签拆开看就非常清楚了:

1️⃣ alpine

  • 镜像底层 OS 是 Alpine Linux

  • 优点:体积小

  • 缺点:

    • musl libc

    • 排查问题困难

    • 和国产 OS 环境(麒麟)联调不友好


2️⃣ trunk

  • 基于 Zabbix 主干开发代码

  • 代码每天都可能变

  • 数据库结构 / API / Agent 行为不稳定


3️⃣ 顺序为什么有两种?

标签

本质

alpine-trunk

OS 在前,分支在后

trunk-alpine

分支在前,OS 在后

👉 功能上没有任何区别
👉 只是历史命名 + CI 构建方式遗留

4.3、把 7.0.22-ol 拆开解释

7.0.22-ol = Zabbix 7.0.22 + Oracle Linux(OL)基础镜像

  • 属于 Zabbix 官方正式发布

  • 生产环境可用

  • 不是 trunk

  • 不是测试版

1️⃣ 7.0.22

  • Zabbix 7.0 LTS 分支

  • 第 22 个维护版本

  • 生产强烈推荐


2️⃣ ol 是什么?

ol = Oracle Linux

也就是:

后缀

含义

ol

Oracle Linux

alpine

Alpine Linux

ubuntu

Ubuntu

rocky

Rocky Linux

ubi

Red Hat UBI

👉 只是“镜像底层 OS 不同”

4.4、7.0.22-ol7.0.22 有什么区别?

这是一个非常关键的问题👇

🔹 7.0.22(不带后缀)

  • 通常是 默认基础镜像

  • 多数情况下也是 Oracle Linux

  • 写法更简洁

🔹 7.0.22-ol

  • 明确指定 Oracle Linux

  • 行为更可预期

  • 企业/合规环境更喜欢

👉 功能、Zabbix 版本、DB 结构完全一致


5、在“麒麟 + 内网 + 合规”环境下,怎么选?

✅ 强烈建议你选:7.0.22-ol

原因非常现实:

维度

原因

稳定性

glibc,问题少

排错

工具齐全(bash / curl / ip)

运维习惯

接近 RHEL / CentOS

国产 OS 兼容性

明显好于 alpine

合规审计

企业可接受度高


哪些后缀你不建议在生产用?

alpine

  • musl libc

  • DNS / TLS / Agent 插件问题多

  • 国产化环境不友好

trunk-*

  • 开发分支

  • DB 不稳定

  • 生产绝对禁用

“标准解释”

Zabbix Docker 镜像标签 7.0.22-ol 表示
该镜像基于 Oracle Linux 构建,
Zabbix 核心版本仍为 7.0.22 LTS

选用 -ol 镜像可获得更好的稳定性与企业级兼容性,
适用于生产与内网环境部署。


6、拉取 Zabbix 镜像时指定架构

6.1、最常用、也是你最可能用到的架构

架构

说明

常见场景

linux/amd64

x86_64

Intel / AMD 服务器(最常见)

linux/arm64

aarch64

鲲鹏 / 飞腾 / ARM 服务器

linux/386

x86

老旧环境(基本不用)

👉 银河麒麟 V10 SP3 x86_64:99% 用 linux/amd64


Docker 拉镜像时,如果没有arm物理环境,可以通过 --platform 明确指定操作系统架构

标准格式:

docker pull --platform=<os>/<arch> 镜像:tag

明确指定 amd64和arm64

docker pull --platform=linux/amd64 ghcr.io/zabbix/zabbix-server-mysql:7.0.22-ol

对应 Web / Agent:

docker pull --platform=linux/amd64 ghcr.io/zabbix/zabbix-web-nginx-mysql:7.0.22-ol
docker pull --platform=linux/arm64 ghcr.io/zabbix/zabbix-agent2:7.0.22-ol
docker pull --platform=linux/arm64 zabbix/zabbix-server-mysql:7.0.22-ol

6.2、为什么一定要指定架构

1️⃣ 防止拉错 ARM 镜像

现在很多镜像是 multi-arch(多架构)

  • amd64

  • arm64

  • ppc64le

  • s390x

Docker 默认会“猜”

  • 在复杂环境 / 代理 / registry 中

  • 有时会选错

👉 结果就是:

exec format error

2️⃣ 离线环境 / 中转机必须指定

你这种流程很典型:

外网机器 pull
→ docker save
→ 内网麒麟 docker load

如果内网机是 ARM(比如 Mac M1 / 鲲鹏):

❌ 不指定平台 → 拉到 amd64
✔ 指定 linux/arm64 → 内网可用

默认拉取的是和服务器一样的架构amd64的

基于指定ARM平台拉取

7、最后帮你把常见 Zabbix tag 一眼分清

标签示例

是否生产可用

说明

7.0.22

正式版

7.0.22-ol

✅✅

正式版(推荐)

7.0.22-alpine

⚠️

可用但不推荐

trunk-alpine

开发分支

alpine-trunk

开发分支

在国产化环境中:

镜像

出问题概率

alpine

⭐(极低)

ubuntu

⭐⭐

rockylinux

⭐⭐⭐

latest

⭐⭐⭐⭐⭐

8、Zabbix7.0.22离线docker镜像包归档

8.1、Zabbix镜像包介绍

序号

包名称

包用途

1

zabbix-server-mysql

支持MySQL数据库的Zabbix服务器

2

zabbix-web-nginx-mysql

基于Nginx Web服务器并支持MySQL的Zabbix前端

3

zabbix-snmptraps

接收发送到Zabbix服务器或Zabbix代理的SNMP陷阱

4

zabbix-agent2

支持TLS加密的zabbix代理2,新环境优先,资源消耗略高于agent

5

zabbix-agent

支持TLS加密的zabbix代理,适合老系统

6

zabbix-web-service

Zabbix Web服务,用于使用无头Web浏览器执行各种任务,例如生成报告,Zabbix Server / Web 自己不会生成 PDF、截图、报表,这些都由 Web Service 完成。

7

zabbix-proxy-mysql

支持MySQL数据库的Zabbix代理,部署在分支 / 隔离区的“监控前线代理 + 本地数据库缓存”,数据先写 本地 MySQL,定时批量同步给 Zabbix Server,只要监控规模 > 200 台 或 存在跨网,就一定要用 Proxy

8

zabbix-java-gateway

Zabbix Java 网关,JMX 专用采集通道,专门用来监控 Java 应用(JMX)的中间采集服务

9

zabbix-build-base

Zabbix构建基础环境,Zabbix 官方“构建用基础镜像”,不是运行组件,做二次开发,构建 server / agent / web 镜像,99%用不到

10

zabbix-build-mysql

不是运行时组件,是 编译 / 构建阶段用的 Docker 镜像,自编译 Zabbix Server,99%用不到

11

zabbix-appliance

支持MySQL数据库和Nginx Web服务器的zabbix设备,开箱即用的一体化zabbix全家桶,不推荐生产,适合演示环境或者截图写文档

👉 生产环境绝对不碰 latest

假设你用 MySQL + Nginx Web + Agent2

# Zabbix Server(MySQL)
zabbix/zabbix-server-mysql:alpine-7.0.22

# Zabbix Web(Nginx + MySQL)
zabbix/zabbix-web-nginx-mysql:alpine-7.0.22

# Zabbix Agent2
zabbix/zabbix-agent2:alpine-7.0.22

👉 这三类是“必需核心组件”

8.2、拉取Zabbix镜像并归档【很重要】

设定版本号(统一管理)

export ZBX_VER="alpine-7.0.22"

拉取Zabbix的镜像(全局变量按版本)

docker pull zabbix/zabbix-server-mysql:7.0.22
docker pull zabbix/zabbix-web-nginx-mysql:7.0.22
docker pull zabbix/zabbix-agent2:7.0.22
docker pull mysql:8.0
docker pull zabbix/zabbix-server-mysql:${ZBX_VER}
docker pull zabbix/zabbix-web-nginx-mysql:${ZBX_VER}
docker pull zabbix/zabbix-agent2:${ZBX_VER}

Zabbix 官方“容器镜像目录页”能看到各组件镜像的分类与组合方式(Server MySQL、Frontend Nginx MySQL 等)。

(1)拉取amd64镜像

docker pull mysql:8.0.44
docker pull zabbix/zabbix-server-mysql:7.0.22-ol
docker pull zabbix/zabbix-web-nginx-mysql:7.0.22-ol
docker pull zabbix/zabbix-agent2:7.0.22-ol
docker pull zabbix/zabbix-java-gateway:7.0.22-ol
docker pull zabbix/zabbix-web-service:7.0.22-ol
docker pull zabbix/zabbix-proxy-mysql:7.0.22-ol
docker pull zabbix/zabbix-appliance:centos-latest

(2)拉取arm64镜像

#删除下载的所有x86的镜像避免冲突
docker rmi $(docker images -q)
#作用
docker images -q:列出所有镜像 ID
docker rmi:删除这些镜像

下载新的arm版本的镜像

docker pull --platform=linux/arm64 mysql:8.0.44
docker pull --platform=linux/arm64 zabbix/zabbix-server-mysql:7.0.22-ol
docker pull --platform=linux/arm64 zabbix/zabbix-web-nginx-mysql:7.0.22-ol
docker pull --platform=linux/arm64 zabbix/zabbix-agent2:7.0.22-ol
docker pull --platform=linux/arm64 zabbix/zabbix-java-gateway:7.0.22-ol
docker pull --platform=linux/arm64 zabbix/zabbix-proxy-mysql:7.0.22-ol
docker pull --platform=linux/arm64 zabbix/zabbix-appliance:centos-latest

zabbix-web-service没有arm版本

由于这个镜像 强依赖:

  • Chromium

  • wkhtmltopdf / headless 浏览器

  • Oracle Linux(ol)基础镜像

而官方构建链路中:

Oracle Linux + Chromium = 仅支持 x86_64

📌 不是 Zabbix 不支持 ARM
📌 是 底层浏览器组件在 ol / ARM 上没法官方构建

如果你 必须用 PDF 报表

ARM 麒麟服务器
 ├─ zabbix-server
 ├─ zabbix-web
 └─ zabbix-agent

x86_64 服务器
 └─ zabbix-web-service
  • Zabbix Server 指向远端 web-service

  • 官方 完全支持这种部署

(3)zabbix镜像归档(离线交付/内网部署核心)

mkdir -p /data/zbx7/images-archive

docker save -o /data/zbx7/images-archive/mysql-8.0.44.tar mysql:8.0.44
docker save -o /data/zbx7/images-archive/zabbix-server-mysql:7.0.22-ol.tar zabbix/zabbix-server-mysql:7.0.22-ol
docker save -o /data/zbx7/images-archive/zabbix-web-nginx-mysql:7.0.22-oll.tar zabbix/zabbix-web-nginx-mysql:7.0.22-ol
docker save -o /data/zbx7/images-archive/zabbix-agent2:7.0.22-ol.tar zabbix/zabbix-agent2:7.0.22-ol
docker save -o /data/zbx7/images-archive/zabbix-java-gateway:7.0.22-ol.tar zabbix/zabbix-java-gateway:7.0.22-ol
docker save -o /data/zbx7/images-archive/zabbix-web-service:7.0.22-ol.tar zabbix/zabbix-web-service:7.0.22-ol
docker save -o /data/zbx7/images-archive/zabbix-proxy-mysql:7.0.22-ol.tar zabbix/zabbix-proxy-mysql:7.0.22-ol
#这个是六年前的镜像,已经停止维护
docker save -o /data/zbx7/images-archive/zabbix-appliance:centos-latest.tar zabbix/zabbix-appliance:centos-latest
#生成教研码
sha256sum /data/zbx7/images-archive/*.tar > /data/zbx7/images-archive/SHA256SUMS.txt

内网导入(目标机)

#验证校验码
sha256sum -c SHA256SUMS.txt
#导入镜像包
docker load -i /data/zbx7/images-archive/mysql-8.0.44.tar
docker load -i /data/zbx7/images-archive/zabbix-server-mysql:7.0.22-ol.tar
docker load -i /data/zbx7/images-archive/zabbix-web-nginx-mysql:7.0.22-oll.tar
docker load -i /data/zbx7/images-archive/zabbix-agent2:7.0.22-ol.tar
docker load -i /data/zbx7/images-archive/zabbix-java-gateway:7.0.22-ol.tar
docker load -i /data/zbx7/images-archive/zabbix-web-service:7.0.22-ol.tar
docker load -i /data/zbx7/images-archive/zabbix-proxy-mysql:7.0.22-ol.tar
#由于是6年前的镜像,可不用导入
docker load -i /data/zbx7/images-archive/zabbix-appliance:centos-latest.tar

9、Zabbix的Docker Compose(非默认端口 + 持久化 + 可备份)

/data/zbx7/compose/docker-compose.yml

services:
  # =========================
  # MySQL 8.0
  # =========================
  mysql:
    image: mysql:8.0.44
    container_name: zbx7-mysql
    restart: unless-stopped
    command:
      - --default-authentication-plugin=mysql_native_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_bin
      - --log-bin-trust-function-creators=1
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${ZBX_DB_NAME}
      MYSQL_USER: ${ZBX_DB_USER}
      MYSQL_PASSWORD: ${ZBX_DB_PASS}
      TZ: ${TZ}
    volumes:
      - /data/zbx7/mysql/data:/var/lib/mysql
      - /data/zbx7/mysql/conf:/etc/mysql/conf.d:ro
      - /data/zbx7/mysql/backup:/backup
    networks:
      - zbx7-net
    healthcheck:
      test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p$${MYSQL_ROOT_PASSWORD} --silent"]
      interval: 10s
      timeout: 5s
      retries: 12
    # 按要求:不映射 13306

  # =========================
  # Zabbix Server
  # =========================
  zabbix-server:
    image: zabbix/zabbix-server-mysql:7.0.22-ol
    container_name: zbx7-server
    restart: unless-stopped
    depends_on:
      mysql:
        condition: service_healthy
    environment:
      DB_SERVER_HOST: mysql
      MYSQL_DATABASE: ${ZBX_DB_NAME}
      MYSQL_USER: ${ZBX_DB_USER}
      MYSQL_PASSWORD: ${ZBX_DB_PASS}
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      ZBX_DEBUGLEVEL: ${ZBX_DEBUGLEVEL}
      ZBX_JAVAGATEWAY: zabbix-java-gateway
      ZBX_WEBSERVICEURL: http://zabbix-web-service:10053
      TZ: ${TZ}
    volumes:
      - /data/zbx7/zabbix/alertscripts:/usr/lib/zabbix/alertscripts:ro
      - /data/zbx7/zabbix/externalscripts:/usr/lib/zabbix/externalscripts:ro
      - /data/zbx7/zabbix/modules:/var/lib/zabbix/modules:ro
      - /data/zbx7/zabbix/snmptraps:/var/lib/zabbix/snmptraps:rw
      - /data/zbx7/logs/zabbix-server:/var/log/zabbix:rw
    ports:
      - "10051:10051"
    networks:
      - zbx7-net

  # =========================
  # Zabbix Web (Nginx)
  # =========================
  zabbix-web:
    image: zabbix/zabbix-web-nginx-mysql:7.0.22-ol
    container_name: zbx7-web
    restart: unless-stopped
    depends_on:
      mysql:
        condition: service_healthy
      zabbix-server:
        condition: service_started
    environment:
      DB_SERVER_HOST: mysql
      MYSQL_DATABASE: ${ZBX_DB_NAME}
      MYSQL_USER: ${ZBX_DB_USER}
      MYSQL_PASSWORD: ${ZBX_DB_PASS}
      ZBX_SERVER_HOST: zabbix-server
      PHP_TZ: ${TZ}
      TZ: ${TZ}
    volumes:
      - /data/zbx7/logs/nginx:/var/log/nginx:rw
    ports:
      - "18080:8080"
      # HTTPS 可选
      # - "18443:8443"
    networks:
      - zbx7-net

  # =========================
  # Zabbix Web Service(仅 amd64)
  # 报表 / Dashboard 截图 / PDF
  # =========================
  zabbix-web-service:
    image: zabbix/zabbix-web-service:7.0.22-ol
    container_name: zbx7-web-service
    restart: unless-stopped
    environment:
      ZBX_ALLOWEDIP: 0.0.0.0/0
      TZ: ${TZ}
    volumes:
      - /data/zbx7/logs/web-service:/var/log/zabbix:rw
    networks:
      - zbx7-net
    # 内部端口 10053,不需要对外暴露

  # =========================
  # Zabbix Java Gateway
  # =========================
  zabbix-java-gateway:
    image: zabbix/zabbix-java-gateway:7.0.22-ol
    container_name: zbx7-java-gateway
    restart: unless-stopped
    environment:
      TZ: ${TZ}
    networks:
      - zbx7-net

  # =========================
  # Zabbix Agent2
  # =========================
  zabbix-agent2:
    image: zabbix/zabbix-agent2:7.0.22-ol
    container_name: zbx7-agent2
    restart: unless-stopped
    environment:
      ZBX_SERVER_HOST: zabbix-server
      ZBX_HOSTNAME: ${AGENT_HOSTNAME}
      TZ: ${TZ}
    networks:
      - zbx7-net

  # =========================
  # Zabbix Proxy (MySQL)
  # =========================
  zabbix-proxy:
    image: zabbix/zabbix-proxy-mysql:7.0.22-ol
    container_name: zbx7-proxy
    restart: unless-stopped
    depends_on:
      mysql:
        condition: service_healthy
      zabbix-server:
        condition: service_started
    environment:
      ZBX_SERVER_HOST: zabbix-server
      DB_SERVER_HOST: mysql
      MYSQL_DATABASE: ${ZBX_PROXY_DB_NAME}
      MYSQL_USER: ${ZBX_PROXY_DB_USER}
      MYSQL_PASSWORD: ${ZBX_PROXY_DB_PASS}
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      ZBX_HOSTNAME: ${PROXY_HOSTNAME}
      TZ: ${TZ}
    volumes:
      - /data/zbx7/logs/zabbix-proxy:/var/log/zabbix:rw
    networks:
      - zbx7-net

networks:
  zbx7-net:
    name: zbx7-net
    driver: bridge

说明:Zabbix 前端镜像通过环境变量连接 DB 与 Zabbix Server 的方式,在官方容器说明中是标准用法。
Zabbix Server 镜像会检查数据库并初始化 schema 的启动流程,也在官方容器说明中有描述。

[root@bxddg compose]# cat .env


# 时区(北京)
TZ=Asia/Shanghai

# ======================
# MySQL 主库(Server/Web)
# ======================
MYSQL_ROOT_PASSWORD=ChangeMe_StrongRootPass!

ZBX_DB_NAME=zabbix
ZBX_DB_USER=zabbix
ZBX_DB_PASS=ChangeMe_StrongZbxPass!

# ======================
# Proxy 独立数据库
# ======================
ZBX_PROXY_DB_NAME=zabbix_proxy
ZBX_PROXY_DB_USER=zbxproxy
ZBX_PROXY_DB_PASS=ChangeMe_StrongProxyPass!

# ======================
# Zabbix 行为参数
# ======================
ZBX_DEBUGLEVEL=3

# Agent / Proxy 标识
AGENT_HOSTNAME=zbx7-agent2
PROXY_HOSTNAME=zbx7-proxy

启动:

cd /data/zbx7/compose
docker-compose config      # 展开变量,检查语法(非常推荐)
docker-compose up -d
docker-compose ps
docker-compose logs zabbix-server | tail -50

访问:

  • http://麒麟服务器IP:18080


10、报错处理

10.1、针对OCI 329的错误

卸载podmac

卸载成功后再次部署如下所示

查看镜像如下所示

停止zabbix相关的docker服务如下所示

再次启动如下所示

10.2、针对ipv4转发的错误

查看当前状态

sysctl net.ipv4.ip_forward

输出含义:

net.ipv4.ip_forward = 0 ❌ 关闭

net.ipv4.ip_forward = 1 ✅ 开启

临时开启(立即生效,但重启失效)

适合测试 / 排障:

sysctl -w net.ipv4.ip_forward=1

或者:

echo 1 > /proc/sys/net/ipv4/ip_forward

再确认:

sysctl net.ipv4.ip_forward

永久开启(生产环境必须做)

✅ 推荐方式(标准、可审计)

编辑配置文件:

vim /etc/sysctl.conf

添加或修改这一行:

net.ipv4.ip_forward = 1

加载生效:

sysctl -p

再次执行可发现没有报错

10.3、Zabbix的web访问不通,并且报错

更持久化目录提权

chmod -R 777 /data/zbx7/
cd /data/compose
docker-compose down
docker-compose up -d

提权后重新compose 验证,登录页面如下所示,默认账号密码为Admin/zabbix

10.4、Zabbix端自身监控不可用

docker inspect zbx7-agent2 --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'

修改实际监控的zabbix-server的客户端的地址为实际容器内地址

修改完后不可用状态就会变绿

10.5、Zabbix Agent不可用

在agent上修改Server地址为实际的Server 服务端采集的地址

grep -E '^(Server|ServerActive|ListenIP|Hostname|ListenPort)' /etc/zabbix/zabbix_agent2.conf

如下所示,如果网络环境较为复杂,可以将地址改为

通过日志可以发现,如果网络较为复杂, Server端有多个地址,可以修改agent的配置文件为实际地址或者全0地址Server=0.0.0.0/0

tail -n 200 /var/log/zabbix/zabbix_agent2.log

11、 “包/镜像”逐个讲清楚:它们各负责什么、怎么互相调用?

你在归档时拉的每个镜像,其实都对应一段清晰的职责边界(这就是企业可控的根本):

  • mysql:8.0

    • 数据底座。Zabbix Server、Web 前端都要访问它。

  • zabbix-server-mysql

    • 核心引擎:

      • 接收 Agent 数据

      • 计算触发器

      • 生成事件与告警

      • 写入 MySQL

  • zabbix-web-nginx-mysql

    • 管理入口:

      • 读写配置(主机/模板/触发器/媒介/动作)

      • 展示图表、问题、告警

      • 通过 API 与 Server 交互

  • zabbix-agent2

    • 数据采集:

      • 主动/被动向 Server/Proxy 发送数据

      • 本机指标采集,减少“手写脚本”依赖

一句话总结调用链:
Web(管理)→ Server(计算)→ DB(存储)→ Web(展示)
Agent(采集)→ Server(汇聚)→ DB(沉淀)


12、数据库备份:把“可恢复”做成制度,而不是祈祷

Zabbix 运行久了,真正值钱的是:

  • 监控配置

  • 历史数据(视需求)

  • 趋势数据(容量规划、故障追溯)

12.1、 备份策略建议

  • 每日:备份配置 + 当日增量(逻辑备份)

  • 每周:全量逻辑备份

  • 每月:配合归档(加密、离线保存、留存周期)

12.2、 一键备份脚本(mysqldump)

保存为 /data/zbx7/mysql/backup/backup_zabbix.sh

#!/usr/bin/env bash
set -euo pipefail

TS="$(date +%F_%H%M%S)"
OUT="/backup/zabbix_${TS}.sql.gz"

docker exec zbx7-mysql sh -lc \
  'mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" --single-transaction --routines --events --triggers zabbix | gzip -c' \
  > "${OUT}"

# 清理 14 天前备份
find /backup -type f -name "zabbix_*.sql.gz" -mtime +14 -delete

echo "[OK] backup -> ${OUT}"

赋权:

chmod +x /data/zbx7/mysql/backup/backup_zabbix.sh

执行一次验证:

/data/zbx7/mysql/backup/backup_zabbix.sh
ls -lh /data/zbx7/mysql/backup/

12.3 恢复演练(比备份更重要)

gunzip -c zabbix_YYYY-MM-DD_HHMMSS.sql.gz | \
docker exec -i zbx7-mysql sh -lc 'mysql -uroot -p"$MYSQL_ROOT_PASSWORD" zabbix'

建议把“恢复演练”:每季度至少一次
因为没有演练的备份,等于没有备份。


13. 安全与加固:麒麟内网场景尤其要做

  1. Webmin/SSH/管理网段隔离(你体系里常见的红网/商密网/互联网分区思路同样适用)

  2. Zabbix Web 只对管理网开放 18080/18443

  3. 11051/11050 只对业务网段开放(或仅 Proxy 网段)

  4. 不把 MySQL 映射到宿主机端口(除非你明确要远程维护)

  5. 账号:默认 Admin 立即改名/改口令;启用 MFA(Zabbix 7.0 有原生 MFA 能力是一个重要卖点)。



Comment