📞 IT 峰哥团队 · 企业信息化落地服务
IT 峰哥深耕企业 IT 基础设施领域多年,专注为各类型企业提供网络安全规划、设备选型、上网行为管理、超融合部署、文档加密、考勤门禁、视频监控等信息化项目整包落地服务。从方案设计、设备选型、上门实施到后期运维,全程跟进。
承接规模:小微企业 / 成长型企业 / 中大型企业,均提供定制化方案
服务范围:防火墙、上网行为、AP+AC、域控、NAS、超融合、文档加密、人脸考勤、视频监控、机房动环等
合作流程:需求沟通 → 方案设计 → 设备选型 → 落地实施 → 持续运维
📱 17712677007(微信同号)
📞 24 小时全天候响应 · 紧急项目优先安排

一、为什么选择 Zabbix + 外置 MySQL 这个组合
Zabbix 是目前企业级开源监控领域事实上的”瑞士军刀”——从 1998 年诞生至今,已经成为全球数十万企业 IT 基础设施监控的事实标准。根据 DB-Engines 等业内公开排名,Zabbix 长期稳居”网络监控”细分类别第一,覆盖网络设备、服务器、应用程序、服务、数据库、虚拟化、容器、云资源、IoT 等几乎所有可观测性场景。
Zabbix 官方同时支持 MySQL/MariaDB、PostgreSQL、SQLite、Oracle、IBM DB2 五大数据库后端。**默认安装路径**是使用 Zabbix 自带的 SQLite 或本机 MySQL——开发测试、几十台小规模监控完全够用。但当监控规模上升到 1000+ 主机、数万监控项、秒级采集时,**把数据库从 Zabbix Server 拆出去做”外置”** 几乎是企业生产的必选路径。
外置数据库的核心收益有四点:
- 性能隔离:Zabbix Server 的轮询、trap 接收、告警计算、LLD(低层发现)会大量消耗 CPU/MySQL 连接数。拆出去后,Zabbix Server 进程专心做监控逻辑,MySQL 进程专心做数据存储与查询,互不抢资源。
- 容量扩展:Zabbix 的历史数据(history/trends)增长极快——按每主机 100 个监控项、每 60 秒采集一次算,一天约 1440 万条记录,一年下来趋势表可达 10GB+。外置 MySQL 后,磁盘、内存、备份策略都可以独立扩容,不受 Zabbix Server 主机限制。
- 高可用与灾备:外置 MySQL 可以做主从复制、双主、MGR、Galera Cluster、共享存储等高可用方案。Zabbix Server 主机故障时,重建一台接入现有 MySQL 集群即可恢复;MySQL 故障时也能用主从切换保住历史数据。
- 运维解耦:DBA 团队接管数据库(备份、慢查询优化、主从延迟监控、版本升级),监控团队专心 Zabbix 配置、模板、告警逻辑。专业化分工让两边都更高效。
本文以 Zabbix 7.4(2024 年发布的当前稳定主线)+ MySQL 8.0(当前主流 LTS)+ RHEL 9 / Rocky Linux 9 / AlmaLinux 9 这一当前最主流的 RHEL 衍生发行版为示例,完整演示”外置 MySQL”的安装、配置、调优、常见故障排查全过程。所有路径与命令均经过官方源验证,具体版本号以 Zabbix 官方下载页与 MySQL 官方仓库最新发布为准。
二、Zabbix 7.4 的核心组件与架构
在开始安装之前,先把 Zabbix 的核心组件画清楚,能避免后面配置时搞混”这个进程跑在哪台机器”。
| 组件 | 作用 | 默认端口 | 部署位置 |
|---|---|---|---|
| Zabbix Server | 主进程,轮询/Trap 接收、告警计算、历史数据写入 | 10051 (Server 监听 Agent 主动模式) | 外置 MySQL 时单台独立部署 |
| Zabbix Agent / Agent2 | 部署在被监控主机,采集本地指标 | 10050 | 每台被监控端 |
| Zabbix Proxy | 分布式代理,汇总远程分支网络后回传 Server | 10051 | 可选,分支/弱网/跨网段场景 |
| Zabbix Web (Frontend) | PHP Web UI,配置 + 看板 + 告警展示 | 8080 (默认,可改 80/443) | 与 Server 同机或独立 Nginx+PHP |
| MySQL/MariaDB | 配置库、用户库、历史/趋势数据存储 | 3306 | 本文重点:与 Zabbix Server 拆开部署 |
| Zabbix Sender | 主动推送数据到 Server/Proxy | — | 脚本/批处理用 |
| Zabbix Get | 主动拉取监控项值测试 | — | 运维调试 |
Zabbix 7.4 相比 7.0/6.0 LTS 有几项关键升级:
- 原生 HTTP/HTTPS Agent:监控项类型直接支持 HTTP,无需外部脚本,对 REST API 监控更友好。
- Zabbix 7.4 LTS 性能优化:历史数据并行写入器(history writer)从 1 个增加到 4 个,告警队列、LLD 速度大幅提升。
- Items 同步采集:7.4 引入了同步采集模式(poller 同步处理),降低延迟、提高实时性。
- 模板体系升级:官方模板从 100+ 增加到 300+,覆盖云原生(K8s、AWS、Azure)、数据库(PG/MySQL/Oracle/Mongo)、中间件(Nginx/Redis/Kafka)、网络(Juniper/Arista/Cisco/Huawei)的开箱即用监控。
外置 MySQL 的标准部署结构是:Zabbix Server 主机一台(4C8G 起)+ MySQL 主机一台(4C8G+ 起步,按监控规模扩容)。开发测试可以两台合一,生产环境强烈建议分开。
三、安装前必查清单
在执行任何命令之前,先对照下面 6 项确认环境就绪,缺一项都可能导致半路返工。
- 操作系统:RHEL 9.x / Rocky Linux 9.x / AlmaLinux 9.x 任一,社区主流 64-bit。Ubuntu 22.04 LTS/24.04 LTS 路径类似但包名和路径不同(apt vs dnf),本文以 dnf 路径为主。
- 主机互通与时间同步:Zabbix Server 与 MySQL 数据库服务器之间 3306 端口互通;两台机器 NTP/chrony 时间同步,偏差控制在 10 秒内(Zabbix 内部用时间戳计算数据点)。
- 防火墙放行:Zabbix Server 入站 10051(接收 Agent 主动模式)+ 8080/443(Web UI 访问);MySQL 主机入站 3306 仅对 Zabbix Server IP 开放;Agent 主机入站 10050。
- SELinux 状态:RHEL 9 默认 enforcing,建议保持并按需放行 Zabbix 规则(详见第七章),不要图省事直接关 SELinux。
- 主机名规划:给 Zabbix Server 一个固定主机名(如
zabbix-prod-01),MySQL 主机一个固定名(如mysql-zabbix-01),/etc/hosts里互相加解析(DNS 不可用时),避免 Zabbix Server 找不到 MySQL 主机。 - YUM/DNF 仓库就绪:MySQL 8.0 官方仓库(mysql80-community-release-el9-X.noarch.rpm)已装;Zabbix 仓库通过 dnf config-manager 添加(详见第四章),所有主机能联网访问
repo.zabbix.com与repo.mysql.com。
所有项确认后,下一步进入 MySQL 服务器的安装与配置。
四、外置 MySQL 8.0 数据库安装(独立主机)
先装数据库,目的是让 Zabbix Server 安装时就能指向一个已经就绪的 MySQL 实例。
4.1 安装 MySQL 8.0 社区版
# 卸载系统自带的 MariaDB(如有)
dnf remove -y mariadb* mysql* 2>/dev/null
dnf module disable -y mysql mariadb
# 装 MySQL 8.0 官方仓库
dnf install -y https://repo.mysql.com/mysql80-community-release-el9-1.noarch.rpm
# 注意:MySQL 8.4 / 8.0 仓库名是 mysql80,yum 仓库即使 MySQL 8.4 也是 mysql80
# 不同小版本升级:dnf install -y https://repo.mysql.com/mysql84-community-release-el9-1.noarch.rpm
# 装 MySQL Server 与客户端工具
dnf install -y mysql-community-server mysql-community-client
# 启动 + 开机自启
systemctl enable --now mysqld
# 查看临时 root 密码
grep "temporary password" /var/log/mysqld.log | awk '{print $NF}'
首次启动会生成临时 root 密码,从 /var/log/mysqld.log 里 grep password 拿到。第一次登录必须用临时密码 + 立即修改。
4.2 安全加固(mysql_secure_installation)
mysql_secure_installation
# 交互式回答:
# - Change root password? → Y(设复杂密码,至少 12 位,大小写+数字+符号)
# - Remove anonymous users? → Y
# - Disallow root login remotely? → Y(远程用应用账号,root 仅本机)
# - Remove test database? → Y
# - Reload privilege tables now? → Y
4.3 创建 Zabbix 专用数据库与账号
mysql -u root -p
-- 创建字符集为 utf8mb4 的数据库(Zabbix 要求 utf8mb4_bin 排序规则)
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
-- 单独账号、最小权限、限制来源 IP(仅允许 Zabbix Server 内网 IP)
CREATE USER 'zabbix'@'10.0.1.%' IDENTIFIED BY 'ZbxStr0ngP@ssw0rd_2026';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'10.0.1.%';
-- 如果 Server 跑在多台(如双机热备),按需加更多用户
CREATE USER 'zabbix'@'10.0.1.21' IDENTIFIED BY 'ZbxStr0ngP@ssw0rd_2026';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'10.0.1.21';
FLUSH PRIVILEGES;
-- 关键:Zabbix 7.4 导入表结构前必须开启 log_bin_trust_function_creators
SET GLOBAL log_bin_trust_function_creators = 1;
EXIT;
**生产环境强烈建议**:把 SET GLOBAL log_bin_trust_function_creators = 1 写入 MySQL 配置文件 /etc/my.cnf.d/zabbix.cnf,重启后生效,避免每次手设。
4.4 MySQL 关键参数调优(Zabbix 场景)
MySQL 默认参数是面向 OLTP 通用场景的,对 Zabbix 这种”大量写 + 周期性大查询(看板、报表)”的工作负载不够好。推荐在 /etc/my.cnf.d/zabbix-tuning.cnf 里加:
[mysqld]
# 字符集与时区
character-set-server = utf8mb4
collation-server = utf8mb4_bin
default-time-zone = '+08:00'
# InnoDB 缓冲池(推荐 50-70% 物理内存;64GB 机器可设 24-32G)
innodb_buffer_pool_size = 16G
innodb_buffer_pool_instances = 8
# 日志与刷盘
innodb_log_file_size = 2G
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 2
sync_binlog = 0
# 连接与线程
max_connections = 500
thread_cache_size = 50
table_open_cache = 4000
# 临时表与排序
tmp_table_size = 256M
max_heap_table_size = 256M
# 慢查询
slow_query_log = 1
long_query_time = 2
# 二进制日志(高可用 + 时点恢复)
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 14
binlog_format = ROW
log_bin_trust_function_creators = 1
# 性能模式(可选,调试用)
performance_schema = ON
重启 MySQL 让配置生效:systemctl restart mysqld。**innodb_buffer_pool_size 是 Zabbix 数据库性能的第一关键参数**,监控规模越大(历史数据越多),这个值越要调高。
五、Zabbix 7.4 Server 主机安装(连接外置 MySQL)
MySQL 就绪后,开始装 Zabbix Server 本体。本节操作都在 Zabbix Server 主机执行。
5.1 添加 Zabbix 7.4 官方仓库
Zabbix 7.4 官方对 RHEL 系发行版(含 Rocky Linux 9 / AlmaLinux 9 / Oracle Linux 9)的标准仓库路径是 repo.zabbix.com/zabbix/7.4/stable/rocky/9/。直接配 baseurl 是 Zabbix 官方文档长期推荐方式,比下载 release RPM 更可控:
# 装 dnf-utils(提供 config-manager 命令)
dnf install -y dnf-utils
# 添加 Zabbix 7.4 仓库(EL9 路径,同时适用 RHEL 9 / Rocky 9 / Alma 9)
dnf config-manager --add-repo https://repo.zabbix.com/zabbix/7.4/stable/rocky/9/x86_64/zabbix.repo
# 验证仓库(应能看到 zabbix, zabbix-non-supported 两个仓库)
dnf repolist | grep zabbix
如果 zabbix.repo 文件下载下来是空或内容不完整,可手写:
cat > /etc/yum.repos.d/zabbix.repo <<'EOF'
[zabbix]
name=Zabbix 7.4 Official Repository (EL9)
baseurl=https://repo.zabbix.com/zabbix/7.4/stable/rocky/9/x86_64
enabled=1
gpgcheck=0
gpgkey=https://repo.zabbix.com/zabbix/7.4/stable/rocky/9/x86_64/RPM-GPG-KEY-ZABBIX
EOF
dnf clean all
dnf repolist | grep zabbix
**注意**:写 gpgcheck=0 是临时方案(很多 GPG key 路径有版本差异)。生产环境应把 Zabbix 官方 GPG key 装到 /etc/pki/rpm-gpg/ 再改回 gpgcheck=1。
5.2 安装 Zabbix Server + Frontend + Agent2
dnf install -y zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2
# 依赖组件(EL9 缺 php-fpm 和部分 PHP 扩展时手动补)
dnf install -y php-fpm php-mysqlnd php-gd php-bcmath php-xml php-mbstring php-ldap
上面 5 个包分别是:
- zabbix-server-mysql:Zabbix Server 主进程 + MySQL 驱动
- zabbix-web-mysql:PHP 前端(依赖 MySQL 驱动)
- zabbix-nginx-conf:Nginx 站点配置文件(监听 8080)
- zabbix-sql-scripts:Zabbix 数据库初始表结构 SQL(server.sql.gz)
- zabbix-agent2:本机 Agent(Zabbix Server 也装一个用于自监控)
5.3 导入 Zabbix 初始表结构到外置 MySQL
关键步骤——表结构要导入到**外置 MySQL 主机**的 zabbix 库,不是本机:
# server.sql.gz 在 zabbix-sql-scripts 包里
ls -la /usr/share/zabbix-sql-scripts/mysql/server.sql.gz
# 推到 MySQL 主机解包导入(用 ssh + pipe 流式导入,更省空间)
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --protocol=tcp -h 10.0.1.20 -u zabbix -p zabbix
# 按提示输入 zabbix 账号密码
# 注意:必须用 --protocol=tcp 强制 TCP 连接(避免走 socket 误连本机)
导入过程可能持续 1-5 分钟(取决于磁盘 IO),完成后验证:
mysql -h 10.0.1.20 -u zabbix -p zabbix -e "SHOW TABLES;" | wc -l
# 应输出 200+ 张表(Zabbix 7.4 默认约 200 张)
mysql -h 10.0.1.20 -u zabbix -p zabbix -e "SELECT COUNT(*) FROM users;"
# 应输出非零(默认 Admin/zabbix 用户)
5.4 配置 Zabbix Server 连接外置 MySQL
编辑 /etc/zabbix/zabbix_server.conf,关键是 DB* 四行:
# 外置 MySQL 主机 IP(绝对不能用 localhost,会走 socket)
DBHost=10.0.1.20
DBName=zabbix
DBUser=zabbix
DBPassword=ZbxStr0ngP@ssw0rd_2026
DBSocket=/var/lib/mysql/mysql.sock # 本机无 MySQL 时注释掉
# 性能调优(按监控规模调整)
StartPollers=20
StartTrappers=10
StartPingers=10
StartDiscoverers=5
StartHistoryPollers=10
StartEscalators=5
# 缓存
CacheSize=128M
HistoryCacheSize=64M
TrendCacheSize=32M
ValueCacheSize=64M
# 超时
Timeout=30
**关键陷阱**:DBHost=localhost 与 DBHost=127.0.0.1 行为不同——前者走 Unix Socket,后者走 TCP。**外置 MySQL 必须用 IP + 强制 TCP**,写 127.0.0.1 或本机 IP 都不对。
5.5 配置 PHP 与 Nginx(Frontend)
# 编辑 /etc/php-fpm.d/zabbix.conf(包 zabbix-nginx-conf 自带)
# 关键参数:
php_value[date.timezone] = Asia/Shanghai
php_value[memory_limit] = 256M
php_value[post_max_size] = 32M
php_value[upload_max_filesize] = 16M
php_value[max_execution_time] = 300
# Nginx 站点(/etc/nginx/conf.d/zabbix.conf)
# 默认监听 8080;如果 80/443 已被占需改 listen 行
# 关键修改(按实际网络):
server {
listen 8080;
server_name zabbix.example.com;
root /usr/share/zabbix/ui;
...
}
5.6 启动服务 + 验证
# SELinux 放行(保持 enforcing 状态)
setsebool -P httpd_can_connect_zabbix on
setsebool -P httpd_can_network_connect_db on
setsebool -P zabbix_can_network on
# 启动
systemctl enable --now zabbix-server zabbix-agent2 nginx php-fpm
# 验证 Server 启动日志(关键看 "database is not configured" 是否消失)
tail -f /var/log/zabbix/zabbix_server.log
# 看到 "server #0 started [main process]" + 多个 poller/trapper started = OK
# 验证 Web 端口
ss -tlnp | grep -E '8080|10051|10050'
5.7 防火墙放行
firewall-cmd --permanent --add-port=10051/tcp # Zabbix Server 监听
firewall-cmd --permanent --add-port=10050/tcp # Agent 监听(本机装 Agent)
firewall-cmd --permanent --add-port=8080/tcp # Web UI
firewall-cmd --permanent --add-port=3306/tcp # MySQL(仅对 Server IP 限源)
firewall-cmd --reload
# MySQL 主机更安全做法:rich-rule 限制源 IP
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.0.1.21/32 port port=3306 protocol=tcp accept'
firewall-cmd --reload
六、首次访问 Web UI 与初始化配置
浏览器访问 http://ZABBIX_SERVER_IP:8080/ 进入安装向导。
- Welcome → 选语言(中文 zh_CN)→ 下一步
- Check of pre-requisites → 所有项必须 OK;PHP 时区、扩展、参数不符合会在这里标红。常见缺:
bcmath、mbstring、ldap、gd,dnf install补上重启 php-fpm 即可。 - Configure DB connection:
- Database type: MySQL
- Database host: 10.0.1.20(外置 MySQL IP)
- Database port: 3306
- Database name: zabbix
- User: zabbix
- Password: 数据库密码
- Zabbix server details:
- Host: localhost(指 Zabbix Server 进程本身)
- Port: 10051
- Name: 自定义(如
Zabbix-Prod-01)
- Pre-installation summary → 确认无误 → Next step
- Install → 完成 → 跳到登录页
默认账号 Admin / zabbix(Admin 大写 A),首次登录强制改密码。**生产环境第一步**:立即改密码、关闭仪表盘的"不安全账户"提醒、配置 SSL 证书(改 Nginx 监听 443 + certbot 申请 Let's Encrypt 证书)。
七、Linux / Windows Agent 安装与批量部署
Zabbix Server 自身只能监控本机。监控其他主机必须装 Agent。
7.1 Linux 主机 Agent 部署
# 装仓库(与 Server 同样的方法)
dnf config-manager --add-repo https://repo.zabbix.com/zabbix/7.4/stable/rocky/9/x86_64/zabbix.repo
# 装 Agent2
dnf install -y zabbix-agent2
# 编辑配置 /etc/zabbix/zabbix_agent2.conf
# 关键三行:
Server=10.0.1.21 # Zabbix Server IP(被动模式白名单)
ServerActive=10.0.1.21 # Zabbix Server IP(主动模式上报目标)
Hostname=web-prod-01 # 主机名(必须与 Web UI "主机名"完全一致)
# 启动
systemctl enable --now zabbix-agent2
firewall-cmd --permanent --add-port=10050/tcp
firewall-cmd --reload
**批量部署建议**:用 Ansible 推送(写一个 role 改 Server/ServerActive/Hostname 三行 + 启动服务),百台机器 10 分钟搞定。SaltStack、Puppet、Chef 同理。
7.2 Windows 主机 Agent 部署
从 Zabbix 官方下载页下载 Zabbix Agent 2 MSI 安装包(Windows MSI),在 AD 域环境用 GPO 静默安装:
msiexec /i zabbix-agent2-7.4.0-windows-amd64-openssl.msi ^
/qn ^
SERVER=10.0.1.21 ^
SERVERACTIVE=10.0.1.21 ^
HOSTNAME=%COMPUTERNAME% ^
ENABLEPATH=1
**注意**:MSI 默认装在 C:\Program Files\Zabbix Agent 2\,配置在 C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf,服务名 Zabbix Agent 2。装完立即放行防火墙 10050 端口(netsh advfirewall firewall add rule name="Zabbix Agent" dir=in action=allow protocol=TCP localport=10050)。
7.3 SNMP 监控网络设备
交换机、路由器、防火墙、打印机等无 Agent 能力的设备,用 SNMP v2c/v3 监控:
# 在 Zabbix Server 上启用 snmp poller
# 编辑 /etc/zabbix/zabbix_server.conf
StartSNMPTrapper=1
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
# 装 snmp 工具
dnf install -y net-snmp-utils
# 测试 SNMP v2c 连通性
snmpwalk -v 2c -c public 10.0.2.1 sysName
# 返回 sysName.0 = STRING: SW-CORE-01 = OK
# Web UI 添加主机:SNMP interface 填 IP,SNMP community 填 public
**生产建议**:SNMP v2c 用 ACL 限制来源 IP + 复杂 community 字符串(如 ZBX_R0_R3@d0nly);高安全场景上 SNMP v3(authPriv:SHA + AES)。
八、模板、LLD、自动发现——Zabbix 真正的威力
装好 Server + Agent 只是"地基"。Zabbix 真正发挥价值是模板(Template)、低层发现(LLD)、自动注册(Auto Registration)这套机制。
8.1 官方模板(开箱即用)
Zabbix 7.4 自带 300+ 官方模板,覆盖:
| 类别 | 代表模板 | 关键指标 |
|---|---|---|
| Linux | Linux by Zabbix agent / Linux SNMP | CPU/内存/磁盘/网卡/进程 |
| Windows | Windows by Zabbix agent | 同上 + 服务/事件日志/性能计数器 |
| 网络设备 | Template Net Cisco / Huawei / H3C / Juniper SNMP | 端口流量/光功率/CPU/内存/温度/风扇 |
| 数据库 | MySQL by Zabbix agent / PostgreSQL / MSSQL / Oracle | QPS/TPS/连接/慢查询/锁等待/Buffer Pool |
| 中间件 | Nginx / Apache / Tomcat / Redis / Kafka / RabbitMQ | 连接数/请求数/延迟/内存/队列堆积 |
| 虚拟化 | VMware vSphere / Hyper-V / KVM / Proxmox | VM CPU/内存/磁盘/网络 + ESXi 主机 |
| 云资源 | AWS EC2/RDS/S3 / Azure VM / 阿里云 ECS/RDS | 实例状态/磁盘/网络/计费指标 |
| 容器 | Docker / Kubernetes | 容器/Pod/Node/Service 资源 |
**实操建议**:所有主机先挂"Linux by Zabbix agent"或"Windows by Zabbix agent"基线模板,再按业务挂专用模板。基线模板改 Trigger 阈值(避免默认阈值过敏感产生告警风暴)。
8.2 自动发现 + 自动注册
100+ 主机的手动添加是噩梦。Zabbix 提供两种自动化机制:
- 网络发现(Network Discovery):Zabbix Server 主动扫网段(ICMP / SNMP / Zabbix Agent),发现新主机后自动加到指定 Host Group 并 Link 模板。适合网络设备多、IP 段固定的场景。
- 主动 Agent 自动注册(Active Agent Auto-Registration):新机器装完 Agent 自动向 Server 注册,Server 按规则自动加监控。适合云主机、批量扩容场景。
**自动注册规则示例**(Web UI → Administration → Actions → Autoregistration actions):
- Host metadata 包含
Linux→ 加到 "Linux servers" 组,Link "Template OS Linux by Zabbix agent" - Host metadata 包含
Windows→ 加到 "Windows servers" 组,Link "Template OS Windows by Zabbix agent" - Host name 包含
db-→ 加到 "Databases" 组,Link MySQL/PG 模板
8.3 LLD(低层发现)动态监控
LLD 是 Zabbix 杀手锏——发现网卡的多个接口、磁盘的多分区、进程的多实例,按发现的实体自动创建监控项、触发器、图形。无需预先知道主机有几块网卡、几个分区。
示例:监控 Linux 主机所有网卡流量,LLD 自动发现 eth0/eth1/bond0,按发现的接口分别创建 net.if.in[ifName] / net.if.out[ifName] 监控项。**LLD 的发现脚本(discovery rule)可以自己写**,业内常见做法是基于 fdisk / lsblk / ip link / ss 等命令的 shell 脚本。
九、外置 MySQL 性能优化与维护
Zabbix 监控规模 1000+ 主机后,MySQL 性能成为系统瓶颈。常见优化点:
9.1 Housekeeper(Zabbix 自带数据清理)
# 编辑 /etc/zabbix/zabbix_server.conf
# 关闭 Zabbix 自带 housekeeper,改用 MySQL 事件定时清理
DisableHousekeeping=1
# 用 MySQL Event Scheduler(写入 /etc/my.cnf.d/zabbix-housekeeper.cnf)
event_scheduler = ON
MySQL Event 里写 SQL:
CREATE EVENT zabbix_housekeep_history
ON SCHEDULE EVERY 1 HOUR
STARTS CURRENT_TIMESTAMP
DO
DELETE FROM history WHERE clock < UNIX_TIMESTAMP() - INTERVAL 7 DAY;
DELETE FROM history_str WHERE clock < UNIX_TIMESTAMP() - INTERVAL 7 DAY;
-- ... 其他 history_*, trends_* 表同理
**MySQL Event 删除比 Zabbix Housekeeper 快 5-10 倍**,因为 Zabbix Housekeeper 每 1 小时只删 4 批次(受 HousekeepingFrequency 控制),而 MySQL Event 一次性大 SQL 更高效。
9.2 分区表(超大场景)
监控项 ≥ 10 万 / 主机 ≥ 5000 的超大规模场景,给 history/trends 表做按天分区(PARTITION BY RANGE),老分区直接 DROP(秒级删除 100GB 数据)。Zabbix 官方提供 partition_all.sql 脚本(/usr/share/zabbix-sql-scripts/mysql/ 或 Zabbix 官方 Git)。
9.3 慢查询与索引
# 开启慢查询(MySQL 主机)
SET GLOBAL slow_query_log = 1;
SET GLOBAL long_query_time = 2;
# 看慢查询
mysqldumpslow -s t /var/log/mysql/mysql-slow.log | head -20
# Zabbix 关键查询的索引(trends 表 clock + itemid 联合索引,history_* 表 clock 索引)
# 大部分索引 Zabbix 默认已建好,极端情况手动加:
ALTER TABLE history ADD INDEX idx_clock_itemid (clock, itemid);
9.4 MySQL 主从(高可用)
外置 MySQL 最大的价值是能上主从:
# 主库 /etc/my.cnf
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
gtid_mode = ON
enforce_gtid_consistency = ON
# 从库 /etc/my.cnf
[mysqld]
server-id = 2
relay_log = /var/log/mysql/mysql-relay.log
gtid_mode = ON
enforce_gtid_consistency = ON
read_only = ON
# 从库配置复制
CHANGE MASTER TO
MASTER_HOST='10.0.1.20',
MASTER_USER='repl_user',
MASTER_PASSWORD='ReplStr0ngP@ss',
MASTER_AUTO_POSITION=1;
START SLAVE;
SHOW SLAVE STATUS\G
# 看到 Slave_IO_Running: Yes + Slave_SQL_Running: Yes = OK
**Zabbix Server 仍指向主库**(读写都走主库,因为 Zabbix 写入是主要负载)。从库可用于备份、慢查询、BI 报表等离线场景,避免影响 Zabbix 实时性能。
9.5 备份策略
# 全量备份(每日凌晨)
mysqldump --single-transaction --quick --routines --triggers --events \
-h 10.0.1.20 -u backup -p zabbix | gzip > /backup/zabbix_$(date +%F).sql.gz
# 备份账号(zabbix 库读权限)
CREATE USER 'backup'@'10.0.1.%' IDENTIFIED BY 'BkpStr0ngP@ss';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON zabbix.* TO 'backup'@'10.0.1.%';
# 保留策略:每日全量保留 7 天 + 每周日全量保留 4 周 + 每月 1 号全量保留 12 月
十、常见问题与排错清单
Zabbix + 外置 MySQL 部署中最常踩的 10 个坑,按"出现频率 × 排查难度"排序:
- zabbix_server.log 报 "connection to database 'zabbix' failed: Can't connect to MySQL server":99% 是
DBHost写错(写 localhost / 127.0.0.1 走 socket;外置必须写 IP)。DBPassword含特殊字符时用单引号包。检查/var/log/zabbix/zabbix_server.log+mysql -h $DBHost -u $DBUser -p手动测连通性。 - Zabbix 前端报 "Access denied for user 'zabbix'@'10.0.1.21'":MySQL 账号
'zabbix'@'10.0.1.%'子网掩码范围没包含 Server IP,或 Server IP 变了。重新CREATE USER或UPDATE mysql.user SET Host='新IP' WHERE User='zabbix';。 - Zabbix Server 启动慢(5-10 分钟):MySQL 表结构没正确导入(漏
log_bin_trust_function_creators = 1触发器创建失败)。看/var/log/mysqld.log找 ERROR,重新zcat server.sql.gz | mysql ...导入。 - Web UI 报 PHP 时区错误:
/etc/php-fpm.d/zabbix.conf缺date.timezone,加php_value[date.timezone] = Asia/Shanghai后systemctl restart php-fpm。 - Agent 连不上 Server:
Server=...写错;防火墙拦截 10051/10050;Server 上StartTrappers太小(并发连接数撑爆)。tail -f /var/log/zabbix/zabbix_agent2.log看实际错误。 - 主机显示灰色(ZBX 图标灰):Agent 没数据。检查
zabbix_get -s 主机IP -k agent.ping是否返回 1;Agent 防火墙;SNMP 设备的snmpget测 community。 - MySQL 磁盘满:
history表爆。立即跑 Housekeeper 删老数据;同时把趋势数据保留期从 365 天缩到 90 天;考虑分区表方案。 - 告警风暴(一晚 1 万+ 告警):默认 Trigger 阈值太敏感(CPU 90% 在某些业务时段是常态)。调阈值、加维护期 (Maintenance)、用
{TRIGGER.SEVERITY}=DISASTER过滤低优先级告警。 - Zabbix Server 内存爆:
CacheSize、HistoryCacheSize、ValueCacheSize三个缓存总和超物理内存 50%。看zabbix_server.log报 "out of memory" 调小,或加机器内存。 - LLD 发现不到 / 监控项 "Not supported":
zabbix_get -s 主机IP -k discovery.key在 Server 上测试;LLD 脚本权限(chmod +x、AllowRoot=1);超时(Timeout=30调大)。
**终极排错三件套**:(1) 看 zabbix_server.log(主进程) (2) 看 zabbix_agent2.log(Agent 端) (3) zabbix_get / zabbix_sender 命令行手动测。九成问题在这三处能定位。
十一、Zabbix 7.4 选型与替代方案对比
Zabbix 不是唯一选择,对比业内主要竞品:
| 维度 | Zabbix 7.4 | Prometheus + Grafana | Nagios XI | Pandorafms | PRTG |
|---|---|---|---|---|---|
| License | GPL v2 | Apache 2.0 | 商业 + 核心免费 | Terracotta(商业)/ 核心开源 | 商业 |
| 学习曲线 | 中 | 陡(YAML + PromQL) | 陡 | 中 | 低(GUI 友好) |
| Agent 支持 | Zabbix Agent / Agent2 / SNMP / IPMI / JMX / HTTP | node_exporter / 各种 exporter | Nagios Plugins(数量 3000+) | 自研 Agent / SNMP / WMI | Windows: WMI / 大量内置 sensor |
| 数据存储 | 关系型数据库(MySQL/PG/Oracle/DB2) | 时序库 TSDB(本地/WAL/Mimir/Thanos) | MySQL + 文件 | MySQL | 自研(Windows 本机) |
| 模板生态 | 300+ 官方 | 200+ exporter + dashboard | 3000+ 第三方插件 | 中等 | 内置 sensor 极多 |
| 适合规模 | 中小 → 大型企业(全场景) | 云原生 / 微服务 / K8s | 传统基础设施 | 中型企业 | 中小型企业(≤ 2500 sensor) |
| 分布式 | Zabbix Proxy / HA Cluster | 联邦集群 / Cortex / Thanos | NRDP / Mod-Gearman | Satlelite Server | 不支持(集群版) |
| 告警 | Trigger + 脚本 + 升级 + Tag | Alertmanager(告警分组/路由/抑制) | Event handlers | Alert + 模板 | 内置通知系统 |
| 中国本地化 | 中文 UI + 中文文档 + 社区 | 社区翻译 | 无中文官方 | 西班牙厂商 | 德语为主 |
**选型建议**:
- 传统企业(生产 + 网络 + 数据库 + 中间件):Zabbix 7.4 是首选,模板最全、文档最丰富、Agent 最成熟。
- 云原生 / K8s / 微服务:Prometheus + Grafana 更适合(pull 模型天然适合短生命周期容器)。
- Windows-only 小型企业:PRTG 部署最快(
exe双击装完),但 2500 sensor 限制 + 商业授权贵。 - 已有 Nagios 投资:继续用 + 增量上 Zabbix,新项目直接 Zabbix。
十二、写在最后
外置 MySQL 看似只是"换个地方装数据库",但实际涉及性能、容量、高可用、备份、DBA 协作的整套架构设计。本文演示的安装路径是"最小可用"版本——足够 500-2000 主机规模跑得稳;超过 2000 主机建议结合 MySQL 主从/Proxy/HA Cluster、分区表、独立时序库(如 TimescaleDB)等进一步优化。
Zabbix 7.4 的成熟度已经被全球数十万企业验证,不要低估它也"只是"开源——其功能完整度、社区活跃度、文档质量在监控领域长期是事实标准之一。无论你最终选 Zabbix、Prometheus 还是 PRGT,先想清楚"我要监控什么 + 告警流程怎么走 + 历史数据保留多久"这三个问题,再决定具体方案,会少走很多弯路。
如果你正在做 Zabbix 部署或 MySQL 高可用方案设计,遇到具体卡点(性能调优、告警规则、模板开发、跨网段部署等),欢迎联系 IT 峰哥团队。我们覆盖企业信息化全场景(防火墙 / 上网行为 / 超融合 / 文档加密 / 考勤门禁 / 视频监控 / 动环监控),各类规模企业信息化建设均承接,可为你提供从方案设计到落地运维的端到端服务。
🚀 IT峰哥软件库
企业级 IT 监控运维工具 + 系统软件,免费下载|安全可靠|持续更新。覆盖 Zabbix / Prometheus / 数据库 / 中间件 / 备份恢复 / 远程运维全场景。
👉 企业级 IT 监控与运维工具
覆盖 Zabbix / Prometheus / Grafana / Nagios / 数据库 / 中间件 / 备份恢复等企业级监控运维软件资源。