简介:面向CentOS 7.9环境,完整介绍了Zabbix 6.0 LTS的源码部署全流程,覆盖Nginx 1.20.2编译安装、MySQL 8.0依赖配置、Zabbix Server与Agent的编译安装,以及PHP+FastCGI的衔接等内容,适合Linux运维工程师和监控平台初学者按步骤实操。资源以单个docx文档呈现,体积约257KB,便于离线查看与打印。文档按部署顺序划分为环境准备、Nginx安装与加固、MySQL配置、Zabbix编译及Web接入等模块,每步附有具体命令和参数说明,如关闭SELinux、创建nginx用户组、隐藏Nginx版本号、编写systemd自启服务等,同时给出zabbix_server.conf中数据库连接的配置示例,帮助读者理解组件间的调用关系。目前已有4195人学习下载。无论目标是快速搭建一套可用的Zabbix监控系统,还是复盘源码编译过程中的常见问题与对策,这份笔记都能提供清晰的参考路径。
1. CentOS 7.9 上装 Zabbix 6.0 LTS:一个又老又要稳的监控组合
CentOS 7.9 上安装 Zabbix 6.0 LTS,是我这两年给存量服务器搭监控时做得最多的组合。CentOS 7 本身已经停止维护,但大量线上机器还在 7.9 上稳定跑着,不太可能为了一个监控系统顺手重做操作系统;而 Zabbix 6.0 LTS 的官方标准支持延续到 2027 年,选它意味着未来几年不用反复折腾大版本升级。这篇笔记会从 yum 仓库、MariaDB 数据库、zabbix-server、Web 前端到最后的链路验证,一步一步写到能真正用起来,并把安装过程中最容易翻车的地方单独标出来。适合手里有一台 CentOS 7.9 机器、想快速装出一套长期可用的 Zabbix 6.0 LTS 的运维和开发。
2. 装前准备与官方仓库:先理顺组件清单和依赖方向
动手之前先把两件事确认清楚:系统版本和网络通路。这两个点不出问题,后面的安装才会顺。我见过不少装到一半才发现镜像源失效或者系统架构不对的情况,都是在最前面省了这两条命令。
2.1 确认系统与网络:两条命令排除低级障碍
先确认系统确实是 CentOS 7.9 且是 x86_64 架构。Zabbix 官方 6.0 仓库对 RHEL 7 只提供 x86_64 的 rpm 包,如果机器是 ARM 或者其他架构,后面装仓库包时会直接失败。检查命令如下:
cat /etc/redhat-release uname -m curl -I --connect-timeout 5 https://repo.zabbix.com第一行确认发行版和版本号,第二行确认架构,第三行确认能访问 Zabbix 官方仓库。curl 的-I参数只请求响应头,--connect-timeout 5表示 5 秒连不上就放弃,不会卡在那里。如果公司内网机器访问外网需要代理,先把代理配到 yum 或环境中再继续。对于完全离线内网,提前把 release rpm 和依赖包下载到本地是常见做法,但依赖解析会比较麻烦,建议内网搭建本地 yum 镜像仓库。
2.2 安装官方 release 包并锁定 6.0 仓库
Zabbix 官方提供的 release rpm 会把 yum 仓库地址、GPG 校验配置一次性装好,之后 yum 安装组件时就能直接从官方仓库拉包,不需要手动写 repo 文件:
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm yum clean all yum makecache fast yum repolist | grep zabbixrpm -Uvh中的-U表示升级或安装,-v显示过程,-h输出 hash 进度。release 包命名里的6.0-4是 LTS 系列在 el7 上的发布包版本,如果你的安装环境里官方仓库已经更新了 release 包,以仓库里当前文件名替换即可。执行完yum repolist | grep zabbix后能看到zabbix/6.0的仓库信息,就说明仓库锁定成功了。如果系统 yum 源已经失效(CentOS 7 EOL 后很常见),这一步会看到 mirrorlist 相关报错,那就是 5.5 节里要解决的问题,先往后走。
2.3 核心组件安装:server、web、agent、get 各自负责什么
仓库就绪后,直接安装核心组件。这一步才是真正的重头戏,依赖关系也在这里第一次集中爆发:
yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-get一个一个拆开说。zabbix-server-mysql是服务端主程序,带 MySQL/MariaDB 的存储支持,安装后会在系统里创建 zabbix 用户和/etc/zabbix目录;zabbix-web-mysql是 Web 前端以及 PHP 访问数据库的配置,会拉入 httpd 和 php-fpm;zabbix-agent是采集端,安装在所有需要被监控的机器上,本机也可以装一个用于自监控;zabbix-get是一个命令行工具,用于验证 server 到 agent 的数据通路,后面验证阶段会用到。如果你的机器内存只有 2G,去掉前端只装 server 和 agent 也能跑,但没有界面日常使用不方便,一般不建议。
如果这一步报依赖错误,错误信息通常是Requires: php >= 7.2之类,直接跳到 5.1 节把 remi 仓库加上再回来重试。安装完成后用rpm -qa | grep zabbix检查,确认 4 个包都装上了。注意这里还没到启动阶段,先不要急着systemctl start,数据库还没准备好,启动了也会失败。
3. 数据库选型与初始化:MariaDB 10.5 与 create.sql.gz 的完整链路
Zabbix 6.0 的 server 依赖数据库存储配置、历史数据和告警记录,数据库这步做不对,后面 server 起来也是白起。这一章先说清楚版本门槛,再给完整的初始化流程。
3.1 为什么 6.0 LTS 不接受 CentOS 7 自带的 MariaDB 5.5
CentOS 7.9 自带的是 MariaDB 5.5,这是一个 2012 年左右的版本,而 Zabbix 6.0 LTS 的官方支持列表里早就没有它了。如果直接用系统自带的数据库安装 zabbix-server-mysql,server 启动时会直接报unsupported database version,日志里会明确提示版本不支持。与其到启动那一步再排查,不如在一开始就装一个官方支持列表内的版本。
我的选择是 MariaDB 10.5,而不是 MySQL 8.0。原因有三条:一是 10.5 在 Zabbix 6.0 LTS 的支持列表内,兼容性经过了充分验证;二是 MariaDB 官方提供 yum 仓库配置脚本,版本切换成本低;三是 MariaDB 的内存占用比 MySQL 8.0 小,而存量 CentOS 7 机器普遍配置不高,监控系统本身不宜吃太多资源。如果你所在团队已经统一在用 MySQL 8.0,也可以用,但下面的命令就按 MariaDB 10.5 来写。
3.2 用 MariaDB 官方仓库装 10.5 并建库授权
MariaDB 官方提供了一个仓库配置脚本,可以按指定大版本生成 yum 源,比手动写 repo 文件省事:
curl -LsS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash -s -- --mariadb-server-version=10.5 yum install -y MariaDB-server MariaDB-client systemctl enable --now mariadbcurl 的-L表示跟随重定向,-sS表示安静模式但保留错误输出,管道交给 bash 执行。--mariadb-server-version=10.5会生成指向 10.5 系列的 yum 仓库文件,路径在/etc/yum.repos.d/mariadb.repo。注意 MariaDB 官方仓库的包名区分大小写,是MariaDB-server,不是小写的mariadb-server,yum 对大小写敏感。systemctl enable --now mariadb的意思是开机自启并立即启动,一条命令完成两件事。
启动后建议先跑一遍mysql_secure_installation,这一步会交互式设置 root 密码、移除匿名用户、禁用 root 远程登录,生产环境不要跳过。然后创建 Zabbix 的数据库和用户:
mysql -uroot -p登录后执行:
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; CREATE USER 'zabbix'@'localhost' IDENTIFIED BY '你的密码'; GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost'; FLUSH PRIVILEGES; EXIT;数据库名固定叫zabbix,字符集用 utf8mb4,排序规则 utf8mb4_bin。utf8mb4 能存四字节的 emoji 和生僻字,避免监控项名字或告警内容里有特殊字符时写入报错;utf8mb4_bin 是二进制比较,对 Zabbix 这种以机器读为主的系统更合适。创建用户和授权分两条 SQL 写,是因为 MySQL 8.0 之后不再支持GRANT语句里带IDENTIFIED BY,分两条写法在 MySQL 和 MariaDB 上都兼容。密码先用一个临时强密码,后面在zabbix_server.conf里要填同一个。
3.3 导入官方 Schema:zcat 管道与导入后的验证
数据库和账号准备好后,导入 Zabbix 官方提供的建表脚本。这个脚本在安装 zabbix-server-mysql 包时被放到文档目录里:
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uroot -p zabbixzcat直接解压 .gz 文件并将内容输出到标准输出,管道交给 mysql 客户端导入到 zabbix 库。-p后面会交互式要求输入 root 密码。create.sql.gz 这个文件是压缩的,所以路径里带*通配符,避免不同小版本号导致命令不匹配。导入过程取决于机器性能,几十秒到几分钟都有可能,终端没有输出是正常的,不要因为没动静就断开连接。如果这个路径找不到文件,用rpm -ql zabbix-server-mysql | grep create.sql.gz定位实际位置。
导入完成后做两个验证动作。第一,确认表已经建好:
mysql -uzabbix -p zabbix -e "SHOW TABLES;"看到一百多张表说明导入基本成功。第二,确认 zabbix 账号能真正连上数据库并且能访问这些表,这一步实际模拟了后面 zabbix-server 的连接方式。如果这里报Access denied,回到建用户那一步重新核对密码,不要在 server 启动报错时再回头查。
4. 打通 zabbix-server 与 Web 前端:参数、SELinux、防火墙、时区
数据库就绪后,剩下的就是把 zabbix-server 和 Web 前端跑起来。这一章把配置、系统权限、PHP 时区三个环节一次走完,顺序不要乱。
4.1 zabbix_server.conf 里必须改的三个参数
zabbix-server 的配置文件在/etc/zabbix/zabbix_server.conf。这个文件很长,大部分默认值不用动,真正的必改项就三处:数据库名、数据库用户名、数据库密码。直接查看当前生效值用 grep:
grep -E '^(DBName|DBUser|DBPassword|DBHost)' /etc/zabbix/zabbix_server.conf默认情况下DBName和DBUser已经是zabbix,不需要改,DBPassword是空的,必须填成你在 3.2 节设置的密码。用 vim 打开文件,找到DBPassword=那一行,去掉行首的#注释并补上密码。DBHost保持注释状态即可,Zabbix 会使用本机 socket 连接 MariaDB,比 TCP 方式少一层网络开销。如果数据库在另一台机器,把DBHost改成那台机器的 IP,并确认数据库里创建了对应的远程用户。
这三处改完后先启动看看:
systemctl start zabbix-server tail -f /var/log/zabbix/zabbix_server.log正常启动时日志会继续滚动输出,不再报错。如果日志里出现 database 相关的错误,优先检查数据库版本和密码。注意tail -f会一直盯着文件,看到没有新错误后按 Ctrl+C 退出,不要留着这个进程去干别的。
4.2 SELinux 与防火墙:10051 和 80 的放行姿势
CentOS 7 默认开启了 SELinux,即使防火墙端口全开、服务监听正常,进程之间的网络访问也可能被 SELinux 拦下来。zabbix-server 要访问数据库和 agent,httpd 要回连 zabbix-server,这两条在默认策略里都不是直接放行的,需要手动打开对应布尔值:
setsebool -P zabbix_can_network on setsebool -P httpd_can_connect_zabbix on getsebool -a | grep zabbix-P参数表示写入策略并持久化,重启后依然生效。zabbix_can_network允许 zabbix 相关进程进行网络通信,是 server 访问 agent 和数据库的关键;httpd_can_connect_zabbix允许 Apache 连接 Zabbix server 的 10051 端口,是前端页面能拿到数据的前提。如果对 SELinux 不熟,也可以直接安装官方提供的zabbix-selinux-policy包,系统会自动装载对应的策略,上面两个布尔值再按需开启即可。
防火墙放行按最小权限来做:
firewall-cmd --permanent --add-port=10051/tcp firewall-cmd --permanent --add-service=http firewall-cmd --reload10051 是 zabbix-server 的监听端口,必须对外放行,agent 上报数据都走这个口;http 是 Web 前端用的,如果后续要加 HTTPS 再放 443。同一台机器上的 agent 监听 10050 端口,只是本地自监控的话走 loopback 不需要放行;如果打算从其他机器用zabbix_get来验证本机 agent,也需要放行 10050。
最后把服务拉起来并确认监听状态:
systemctl enable --now zabbix-server zabbix-agent ss -tlnp | grep -E '10051|10050'enable --now同时完成开机自启和立即启动。ss输出里能看到 10051 和 10050 两个LISTEN状态,说明服务侧已经就绪。到这里 server 链路通了,但前端还没配,继续。
4.3 PHP-FPM 时区与安装向导的验证顺序
Zabbix 6.0 在 RHEL 7 上的 Web 前端默认走 Apache + PHP-FPM,PHP 配置单独放在/etc/php-fpm.d/zabbix.conf。安装向导第一步会对 PHP 环境做前置检查,其中最常挂掉的就是时区项,因为官方文件里date.timezone默认被注释掉了。打开文件改这一行:
vim /etc/php-fpm.d/zabbix.conf找到php_value[date.timezone],把前面的分号去掉,值改成Asia/Shanghai:
php_value[date.timezone] = Asia/Shanghai改完重启 PHP-FPM,然后启动 Apache:
systemctl restart php-fpm systemctl enable --now httpd浏览器访问http://服务器IP/zabbix,进入安装向导。第一步检查 PHP 前置条件,时区项应该已经变成 OK;第二步填数据库连接,DB host 留 localhost,DB name 填 zabbix,DB user 填 zabbix,DB password 填你设置的密码;第三步 Zabbix server details 保持默认即可。向导完成后会在/etc/zabbix/web/zabbix.conf.php生成前端配置文件。
登录页默认账号 Admin,密码 zabbix。第一次登录后建议立刻在右上角用户设置里改掉默认密码,并把语言切到 Chinese (zh_CN)。再到 Administration → General 里把时区确认成Asia/Shanghai,否则告警时间和你的手机时间对不上,排查问题时容易产生误导。
5. 安装高频避坑:五个翻车现场的排查与修复
这套组合装多了之后,我基本把这几个坑当成了例行检查项。每一条都是真实遇到过的,按现象、原因、解决的顺序写,方便你对照日志定位。
5.1 PHP 依赖装不上:默认 PHP 5.4 不够用
现象:执行yum install zabbix-web-mysql时,yum 报Requires: php >= 7.2之类的依赖错误,安装直接中止。
原因:CentOS 7 仓库自带的 PHP 是 5.4,远低于 Zabbix 6.0 LTS 要求的 PHP 7.2,而 Zabbix 官方仓库本身不提供 PHP 包,yum 找不到能满足依赖的候选版本。
解决:先安装 EPEL 和 Remi 仓库,让 yum 能解析到新版 PHP,再重试安装:
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -Uvh https://rpms.remirepo.net/enterprise/remi-release-7.rpm yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-getRemi 仓库是 RHEL 系上最常用的 PHP 版本仓库,yum 在解析依赖时会自动从里面选择满足 Zabbix 要求的 PHP 版本。重试前建议先yum clean all清理一次缓存,避免残留的依赖元数据干扰判断。
5.2 数据库版本太旧:server 日志里的 unsupported database
现象:zabbix-server 启动后进程退出,/var/log/zabbix/zabbix_server.log里出现unsupported database version或类似的版本报错。
原因:机器上跑的还是 CentOS 7 自带的 MariaDB 5.5,Zabbix 6.0 官方支持列表里已经没有这个版本,server 拒绝在旧版本上初始化存储结构。
解决:按第 3 章的方法安装 MariaDB 10.5。如果之前已经往旧的 zabbix 数据库里导入过数据,需要先DROP DATABASE zabbix再重新CREATE,因为 5.5 和 10.5 的表结构不保证兼容,直接升级数据库后继续用旧表风险很大。
5.3 SELinux 拦截导致 Agent 不可达:明明端口都放行了
现象:Web 前端里 Zabbix server 主机显示 agent 不可达,但在本机用zabbix_get连 localhost 又能正常返回数据,防火墙端口也已经放行。
原因:这类问题十有八九是 SELinux 拦截。zabbix-server 进程向 agent 发起连接时被 SELinux 策略阻止,而端口放行和监听状态都正常,单单从网络层面很难发现原因。
解决:执行setsebool -P zabbix_can_network on,让 zabbix 相关进程具备网络访问能力。如果前端和后端分离部署,还需要setsebool -P httpd_can_connect_zabbix on。做完用getsebool -a | grep zabbix确认状态,再回到前端看主机是否恢复。
5.4 前端向导报时区红叉:date.timezone 没有被设置
现象:访问/zabbix进入安装向导,第一步 PHP 前置检查里,date time zone一项显示红色 Fail。
原因:Zabbix 6.0 在 RHEL 7 的前端配置文件/etc/php-fpm.d/zabbix.conf里预置了 PHP 参数,但时区默认是注释状态,PHP-FPM 进程以默认 UTC 运行,安装向导据此判定环境不满足要求。
解决:编辑/etc/php-fpm.d/zabbix.conf,将php_value[date.timezone]前的分号去掉并设为Asia/Shanghai,然后systemctl restart php-fpm再刷新页面。注意改完要重启的是 php-fpm,不是 httpd,否则配置不生效。
5.5 CentOS 7.9 的 yum 源失效:先回 vault 再谈安装
现象:装什么都报Could not retrieve mirrorlist或Cannot find a valid baseurl for repo: base,Zabbix 仓库和系统仓库全都拉不到包。
原因:CentOS 7 已停止维护,官方 mirrorlist 服务不再提供 7 的镜像列表,系统基础源(base、updates)进入失效状态。这是 2024 年之后新装 CentOS 7 机器最容易遇到的第一道坎。
解决:把基础源切换到 vault.centos.org 的归档地址:
sed -i 's|^mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/CentOS-Base.repo sed -i 's|^#baseurl=http://mirror.centos.org|baseurl=https://vault.centos.org|g' /etc/yum.repos.d/CentOS-Base.repo yum clean all && yum makecache第一条把mirrorlist=行全部注释掉,第二条把注释状态的baseurl从失效域名切到 vault 归档域名。执行完yum makecache能正常拉取元数据,说明基础源已修复。Zabbix 的官方仓库地址不受 CentOS EOL 影响,仍然可以正常访问。
6. 装完别急着收工:用 zabbix_get 验证链路和两个上线习惯
服务全部都起来、前端也能登录,这时还不算真正完成。很多“装好了”最后被发现是界面通了但数据链路没通,所以我把验证动作固定成了收尾习惯。
先在本机验证 agent 通路:
zabbix_get -s 127.0.0.1 -p 10050 -k agent.ping zabbix_get -s 127.0.0.1 -p 10050 -k system.cpu.load[all,avg1]第一条返回1表示 agent 在线且应答正常;第二条能取到 CPU 负载浮点数,说明数据链路完整。如果返回ZBX_NOTSUPPORTED,先检查 key 的写法和 agent 配置里的 UserParameter 是否匹配。
随后在 Web 前端创建一台主机指向 127.0.0.1,链接Template OS Linux by Zabbix agent,等一两分钟后到 Monitoring → Latest data 里刷新,能看到 CPU、内存等数据落库,这套系统才算真正闭环。
我现在的习惯是,装完这套组合后在“server 起来、前端能登录、还没加业务主机”这个位置打一个虚拟机快照。这个点是重来成本最低的回滚点,比卸载重装快得多。然后把zabbix_server.conf和zabbix.conf里手工改过的参数用 diff 存档到安装记录里,下次新机器直接照着放参数,不用再翻文档对默认值。
监控系统的价值在稳定,不在安装速度。装完花五分钟验证链路,比上线后半夜看告警来得踏实。希望帮到你。
本文还有配套的精品资源,点击获取