当前位置:首页>Linux>Rocky Linux 9 容器化部署 Zabbix + Grafana 教程

Rocky Linux 9 容器化部署 Zabbix + Grafana 教程

  • 2026-09-10 23:37:37
Rocky Linux 9 容器化部署 Zabbix + Grafana 教程
本文基于Rocky Linux 9系统,采用 Docker Compose 容器化部署 Zabbix 7.0 + Grafana,全程标注【需自定义密码】 位置,其余命令直接复制执行即可,同时解决部署中常见的镜像拉取、数据库连接、SSL 报错等问题,附带邮件告警配置、Windows/Linux Agent 监控、Grafana 可视化集成,满足生产级基础监控需求。
过程踩了一些坑,整理后记录下来方便后期需要可以直接照抄部署。

一、前期准备:虚拟机配置 + 系统安装

1. 生产级最低硬件配置(按监控规模调整)

2. 虚拟机配置细节(VMware/ESXi)

  • 系统版本:选择Linux → Red Hat Enterprise Linux 9 64位(Rocky Linux 9 兼容)
  • 磁盘配置:控制器类型SCSI → VMware Paravirtual,磁盘模式独立 → 持久,单独划分/data分区(≥20GB)用于 Zabbix 数据持久化
  • 网络配置:网卡VMXNET3,配置静态 IP(避免 DHCP 导致服务异常)
  • 其他:启用硬件虚拟化,禁用 USB、声卡等无用设备节省资源

3. Rocky Linux 9 系统安装(关键分区 + SSH 开启)

  1. 下载镜像:阿里云 Rocky Linux 9.7 Minimal 镜像(Rocky-9.7-x86_64-minimal.iso)
  2. 挂载镜像启动,选择Install Rocky Linux 9,
  3. 语言选中文(简体)
  4. 手动分区
    (核心,避免数据丢失):
    • /boot/efi:200M(efi 格式)
    • /boot:1GB(xfs 格式)
    • swap:4GB(内存≤8GB 设为 1 倍,>8GB 设 8GB)
    • /:15GB(xfs 格式)
    • /data:剩余全部空间(xfs 格式,Zabbix 数据专用)
  5. 网络和主机名:开启网卡 + 配置静态 IP,主机名自定义设zabbix-server
  6. 设置 ROOT 强密码,务必开启 SSH(若安装时未勾选,后续按步骤配置)
  7. 点击「开始安装」,完成后重启虚拟机

4. 补配 SSH(允许 root 远程登录)

若安装时未开启 SSH,登录系统后执行以下命令:

# 编辑SSH配置文件 
vi /etc/ssh/sshd_config 
# 找到行:#PermitRootLogin prohibit-password,按 i键进入编辑模式,删除行首的 #(取消注释)修改为:PermitRootLogin yes 
# 保存退出:Esc → :wq 
systemctl restart sshd  # 重启SSH服务 
systemctl status sshd   # 检查状态(显示active即成功)
配置完成后,可通过 SSH 客户端远程操作服务器,后续命令均在终端执行。

二、系统前置准备(解决依赖 + 关闭防护)

复制一条执行一条,等待执行完成再下一条,注释仅说明作用,无需复制:

sudo dnf update -y  # 更新系统软件包,避免后续安装冲突 
sudo dnf install -y curl policycoreutils-python-utils  # 安装必要依赖工具 sudo systemctl stop firewalld  # 停止防火墙(新手直接关闭,避免端口拦截) sudo systemctl disable firewalld  # 禁止防火墙开机自启 
sudo setenforce 0  # 临时关闭
SELINUX sudo sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config  # 永久关闭SELINUX

三、安装 Docker + Docker Compose(阿里云源,解决官方源连接失败)

步骤 1:清理原有 Docker 源,添加阿里云镜像源

# 清理旧源 

sudo rm -f /etc/yum.repos.d/docker-ce.repo 
# 添加阿里云Docker源 
sudo tee /etc/yum.repos.d/docker-ce.repo <<-'EOF'
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/9/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg 
EOF
步骤 2:安装 Docker 全套组件
sudo dnf clean all && sudo dnf makecache  # 清理缓存并重建 
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 
sudo systemctl start docker  # 启动Docker 
sudo systemctl enable docker  # 开机自启 
docker --version  # 验证安装(输出版本即成功)
步骤 3:配置 Docker 用户组(避免每次输 sudo)
sudo usermod -aG docker $USER
newgrp docker
docker compose version  # 验证Compose安装
四、创建项目目录(数据持久化,容器删除不丢数据)
# 创建分层目录,用于存放各服务配置和数据
mkdir -p ~/zabbix-grafana/{zabbix-db,zabbix-server,zabbix-web,grafana} 
chmod -R 777 ~/zabbix-grafana/  # 设置全权限,避免容器读写报错
cd ~/zabbix-grafana  # 进入项目目录,后续所有操作均在此目录执行
执行后终端路径变为~/zabbix-grafana,继续下一步。

五、创建 docker-compose.yml(核心配置,仅改 4 处密码)

一次性复制全部命令粘贴到终端执行,仅修改标注【需自定义密码】的 4 处,其余固定不变,MySQL 相关 2 处密码必须一致,Grafana 密码单独设置,记好修改后的密码!

cat > docker-compose.yml << EOF
version: '3.8'
services:
# MySQL数据库(Zabbix 7.0适配)
zabbix-db:
image: mysql:8.0
container_name: zabbix-db
environment:
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: Zabbix@123456  # 【需自定义密码】Zabbix数据库用户密码
MYSQL_ROOT_PASSWORD: Root@123456  # 【需自定义密码】MySQL root密
MYSQL_INITDB_SKIP_TZINFO: "1"
MYSQL_CHARACTER_SET_SERVER: utf8mb4
MYSQL_COLLATION_SERVER: utf8mb4_bin
command:
- --default-authentication-plugin=mysql_native_password
- --sql-mode=NO_ENGINE_SUBSTITUTION
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_bin
volumes:
- ./zabbix-db:/var/lib/mysql
restart: unless-stopped
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]
interval: 10s
timeout: 5s
retries: 5
# Zabbix Serve
zabbix-server:
image: zabbix/zabbix-server-mysql:alpine-7.0-latest
container_name: zabbix-server
environment:
DB_SERVER_HOST: "zabbix-db"
MYSQL_DATABASE: "zabbix"
MYSQL_USER: "zabbix"
MYSQL_PASSWORD: Zabbix@123456  # 【需自定义密码】与上面MYSQL_PASSWORD一致
MYSQL_ROOT_PASSWORD: Root@123456  # 【需自定义密码】与上面MYSQL_ROOT_PASSWORD一致
ZBX_TIMEOUT: 30
ZBX_LOGLEVEL: 3
TZ: "Asia/Shanghai"
depends_on:
zabbix-db:
condition: service_healthy
ports:
- "10051:10051"
volumes:
- ./zabbix-server/alertscripts:/usr/lib/zabbix/alertscripts
- ./zabbix-server/externalscripts:/usr/lib/zabbix/externalscripts
restart: unless-stopped
# Zabbix Web 界面
zabbix-web:
image: zabbix/zabbix-web-nginx-mysql:alpine-7.0-latest
 container_name: zabbix-web
environment:
DB_SERVER_HOST: "zabbix-db"
MYSQL_DATABASE: "zabbix"
MYSQL_USER: "zabbix"
MYSQL_PASSWORD: Zabbix@123456  # 【需自定义密码】与上面MYSQL_PASSWORD一致
ZBX_SERVER_HOST: "zabbix-server"
PHP_TZ: "Asia/Shanghai"
TZ: "Asia/Shanghai"
depends_on:
- zabbix-server
ports:
- "8080:8080"
volumes:
- ./zabbix-web:/etc/zabbix/web
restart: unless-stopped
# Grafana 可视化
grafana:
image: grafana/grafana:latest
container_name: grafana
environment:
GF_SECURITY_ADMIN_PASSWORD: Grafana@123456  # 【需自定义密码】Grafana管理员密码
GF_USERS_ALLOW_SIGN_UP: "false"
GF_TIMEZONE: "Asia/Shanghai"
ports:
- "3000:3000"
volumes:
- ./grafana:/var/lib/grafana
depends_on:
- zabbix-server
restart: unless-stopped
EOF
执行后无报错,说明配置文件创建成功
六、启动所有服务(解决镜像拉取失败,附排错)

步骤 1:配置 Docker 镜像源(解决官方源超时)

若直接启动提示镜像拉取失败,先配置国内镜像源:

# 备份原有配置
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak 2>/dev/null || true
# 添加国内镜像源
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
EOF
# 重启Docker并验证
sudo systemctl restart docker
docker info | grep -A 3 "Registry Mirrors"  # 显示镜像源即成功
步骤 2:拉取镜像 + 启动服务
# 手动拉取所有镜像(确保拉取成功)
docker pull mysql:8.0
docker pull zabbix/zabbix-server-mysql:alpine-7.0-latest
docker pull zabbix/zabbix-web-nginx-mysql:alpine-7.0-latest
docker pull grafana/grafana:latest
docker images  # 检查镜像(4个镜像均存在即成功)
# 启动所有服务(后台运行)
docker compose up -d # 查看容器状态(所有容器STATUS为Up即成功) docker compose ps # 检查端口监听(8080/3000/10051端口均LISTEN即成功)
ss -tlnp | grep -E ":(8080|3000|10051)"
常见排错:Zabbix Web 无法访问(SSL + 配置文件缺失)
若访问 Web 界面报错,按以下步骤重建容器 + 手动创建配置文件:
# 停止并删除旧Web容器
docker stop zabbix-web
docker rm zabbix-web
# 重建Web容器(禁用SSL,替换<你的数据库密码>为自定义密码)
docker run -d \ 
--name zabbix-web \
--link zabbix-db:zabbix-db \
--link zabbix-server:zabbix-server \
--network zabbix-grafana_default \
-e PHP_TZ="Asia/Shanghai" \
-e MYSQL_USER="zabbix" \ 
-e MYSQL_PASSWORD="<你的数据库密码>" \
-e MYSQL_DATABASE="zabbix" \
-e DB_SERVER_HOST="zabbix-db" \
-e DB_SERVER_PORT="3306" \
-e ZBX_SERVER_HOST="zabbix-server" \
-e DB_SERVER_SSL="false" \
-e MYSQL_SSL="false" \
-p 8080:8080 \
--restart always \
zabbix/zabbix-web-nginx-mysql:alpine-7.0-latest
# 手动创建Zabbix配置文件(替换<你的数据库密码>)
docker exec -it zabbix-web sh
mkdir -p /usr/share/zabbix/conf
cat > /usr/share/zabbix/conf/zabbix.conf.php << 'EOF'
<?php
global $DB;
$DB['TYPE']     = 'MYSQL';
$DB['SERVER']   = 'zabbix-db';
$DB['PORT']     = '3306';
$DB['DATABASE'] = 'zabbix';
$DB['USER']     = 'zabbix';
$DB['PASSWORD'] = '<你的数据库密码>';
$DB['ENCRYPTION'] = false;
$DB['KEY_FILE']    = '';
$DB['CERT_FILE']   = '';
$DB['CA_FILE']     = '';
$DB['VERIFY_HOST'] = false;
$DB['CIPHER_LIST'] = '';
$ZBX_SERVER      = 'zabbix-server';
$ZBX_SERVER_PORT = '10051';
$ZBX_SERVER_NAME = '';
$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
EOF
exit  # 退出容器
docker restart zabbix-web  # 重启Web容器
curl -I http://localhost:8080  # 测试(返回HTTP/1.1 200即正常)
七、访问 Zabbix + Grafana(默认账号密码,必改默认密码)

将<服务器IP>替换为你的虚拟机 / 服务器静态 IP,在浏览器中访问:

1. Zabbix Web 界面

  • 访问地址:http://<服务器IP>:8080
  • 默认登录信息
    :用户名Admin,密码zabbix(不是自定义密码,登录后立即修改!)
  • 首次登录:进入「用户设置」→「Profile」,将语言改为Chinese (zh_CN),点击「Change password」修改默认密码(记好新密码,Grafana 集成时需要)

2. Grafana 界面

  • 访问地址:http://<服务器IP>:3000
  • 登录信息
    :用户名admin,密码为第四步自定义的 Grafana 密码
  • 首次登录:可直接点击Skip跳过密码修改,或按需修改并记好。

八、Zabbix 核心配置:邮件告警(SMTP)+ Agent 监控

1. 配置邮件告警(以 163/QQ 邮箱为例)

实现监控异常时自动发送邮件通知,步骤如下:

  1. 进入 Zabbix Web →「告警」→「媒介类型」→ 点击「Email」
  2. 勾选「已启用」,配置 SMTP 参数(按邮箱类型选择,以下为通用配置):
  3. 点击「测试」,输入收件邮箱,收到测试邮件即配置成功;
  4. 关联告警到管理员:「用户」→ 选择Admin →「报警媒介」→「添加」,类型选Email,填写收件邮箱,触发时间选1-7,00:00-24:00,保存并更新;
  5. 启用告警动作:「告警」→「动作」→「触发器动作」,启用默认的Report problems to Zabbix administrators,确认「操作」和「恢复操作」均配置为发送到Zabbix administrators用户组。

2. 安装 Agent 监控 Windows/Linux 服务器

Windows 服务器(Agent 7.0)

  1. 下载地址:Zabbix Windows Agent 7.0
  2. 双击安装,填写Zabbix Server IP和主机名(务必唯一);
  3. 安装完成后,在「服务」中启动Zabbix Agent,设置为「自动」启动;
  4. Zabbix Web 添加主机:「配置」→「主机」→「创建主机」,主机名与 Agent 配置一致
  5. 模板选择Template OS Windows by Zabbix agent,添加 Agent 接口(IP 为 Windows 服务器 IP,端口 10050),启用主机。

Linux 服务器

直接通过命令安装 Agent,模板选择Template OS Linux by Zabbix agent,监控服务器本身则额外关联Template Zabbix Server。

关联对应模板:

·Linux 服务器:关联Template OS Linux by Zabbix agent;

·Windows 服务器:关联Template OS Windows by Zabbix agent;

·监控服务器本身:关联Template OS Linux by Zabbix agent+Template Zabbix Server;

九、Grafana 集成 Zabbix(可视化监控数据,一步到位)

实现 Grafana 拉取 Zabbix 监控数据并可视化,核心为安装插件 + 配置数据源 + 导入仪表盘。

步骤 1:安装 Zabbix 官方插件(终端执行)

# 确保在~/zabbix-grafana目录

cd ~/zabbix-grafana # 进入Grafana容器安装插件

docker exec -it grafana grafana-cli plugins install alexanderzobnin-zabbix-app

# 重启Grafana使插件生效

docker restart grafana

# 验证插件安装(显示alexanderzobnin-zabbix-app即成功)

docker exec -it grafana ls /var/lib/grafana/plugins/

步骤 2:配置 Zabbix 数据源(Grafana 浏览器操作)

  1. 登录 Grafana → 左侧「连接」→「添加新连接」→ 搜索zabbix,选择对应的 Zabbix 数据源;
  2. 配置核心参数(务必准确):
    • Name:Zabbix(自定义,方便识别)
    • URL:http://zabbix-web:8080/api_jsonrpc.php(容器内访问地址,固定不变)
    • Username:Admin(Zabbix 用户名)
    • Password:Zabbix 登录后修改的新密码(不是默认密码!)
  3. 拉到页面底部,点击「保存并测试」,提示Zabbix API version 7.0.24即配置成功。

步骤 3:导入 Zabbix 监控仪表盘(一键可视化)

  1. Grafana 左侧「仪表板」→「导入」;
  2. 方式 1:通过 Grafana 官网导入,访问Grafana Dashboards,搜索zabbix,选择适合的仪表盘(数据源为 Zabbix),复制仪表盘 ID,粘贴到 Grafana 导入框,点击「加载」,选择已配置的 Zabbix 数据源,点击「导入」;
  3. 方式 2:导入自定义 JSON 仪表盘(推荐中文版),将 JSON 文件上传到 Grafana,选择 Zabbix 数据源即可。
  4. 仪表盘可以通过Grafana网站搜索

    1. 打开浏览器访问:https://grafana.com/grafana/dashboards/

    2. 在搜索框输入:zabbix

    3. 找到适合的仪表盘(注意看数据源类型必须是 Zabbix)

    4. 复制仪表盘ID

    也可以找网上已知的使用,

    最可靠的是手动导入JSON文件,可以找大佬们做好的中文版的

导入成功后,Grafana 将自动显示 Zabbix 的监控数据(CPU、内存、磁盘、网络等),实现可视化监控。

十、最终验证 + 日常运维常用命令

部署成功标志

  1. Zabbix Web 能正常登录,添加 Agent 后可看到监控数据,邮件告警测试成功;
  2. Grafana 能正常登录,导入仪表盘后可实时查看 Zabbix 可视化数据;
  3. 所有容器状态为Up,8080/3000/10051 端口正常监听。

日常运维常用命令(均在~/zabbix-grafana 目录执行)

docker compose ps  # 查看所有容器状态

docker restart zabbix-server  # 重启Zabbix Server

docker restart grafana  # 重启Grafana

docker logs -f zabbix-server  # 实时查看Zabbix Server日志

docker logs -f zabbix-web  # 实时查看Zabbix Web日志

docker compose down  # 停止所有服务

docker compose up -d  # 启动所有服务

docker exec -it grafana grafana-cli plugins list  # 查看Grafana已安装插件

总结

本文基于 Rocky Linux 9 实现 Zabbix + Grafana 容器化部署,全程命令可直接复制,仅需修改 4 处自定义密码,同时解决了镜像拉取、SSL 报错、配置文件缺失等新手常见问题,附带邮件告警、Agent 监控、Grafana 可视化全流程,满足中小企业生产级基础监控需求。部署完成后,可根据监控规模调整硬件配置,超过 500 台节点建议拆分 Zabbix Proxy,提升监控稳定性。


温馨提示:所有自定义密码建议设置为「字母 + 数字 + 特殊符号」的强密码,定期备份 Zabbix 数据目录(~/zabbix-grafana),避免数据丢失。

最新文章

随机文章