☰
CentOS 7.9 安装 Zabbix 6.0 LTS:从数据库到 Agent2 完整避坑指南
2026/10/16 18:47:58 网站建设 项目流程

简介:面向需要在 CentOS 7.9 上部署 Zabbix 6.0 LTS 的系统运维与监控工程师,这份资源以 docx 文档完整记录了从零开始的安装全过程,尤其适合内网环境与源码编译部署场景。全包仅 1 个文件,大小约 257KB,主线覆盖源码编译 Nginx 1.20.2 并隐藏版本信息、通过 yum 安装 MySQL 8.0、再以源码方式编译部署 Zabbix Server 与 Agent,同时包含 SELinux 关闭、nginx.conf 与 zabbix_server.conf 关键参数配置等细节,目前已有 4195 人学习下载。文档按真实操作顺序拆分步骤,给出的命令可直接复制,configure 编译选项与 systemd 自启动 service 文件写法也一并列出,并提醒了 PHP 与 Nginx 衔接、数据库表初始化等易错环节,步骤间层次清晰,便于在部署中快速定位到 Nginx、MySQL、Zabbix 任一部分。相比零散的命令笔记,这份资料更偏向手把手式的完整记录,既能作为内网离线部署的对照手册,也适合初学者在虚拟机上边看边练,遇到问题时可快速回溯对应配置位置。

1. CentOS 7.9 上装 Zabbix 6.0 LTS:第一遍大概率在数据库版本上翻车

拿到一台 CentOS 7.9 的机器,想把 Zabbix 6.0 LTS 装起来,很多人第一反应是直接 yum 一把梭。装完打开浏览器,要么是 502,要么是“Zabbix server is not running”,要么数据库导入直接报语法错误。我拆过这个组合不下十遍,结论是:Zabbix 6.0 LTS 本身没什么门槛,真正的门槛全在 CentOS 7.9 自带的老组件上——MariaDB 5.5、PHP 5.4、SELinux 策略,这三样随便碰上一个就能卡你半天。这篇文章把从仓库配置、数据库更换、Server 安装到 Agent2 接入的完整流程写清楚,重点标注哪些地方必须改、哪些参数容易填错,适合给公司内网做监控选型或者自己搭一套练手的场景。

2. 装前准备:仓库、SCL 与数据库选型是三个决定成败的点

2.1 官方仓库与 SCL:不要手动去下 RPM 包

Zabbix 6.0 在 RHEL/CentOS 7 上的官方安装方式是先装 zabbix-release 包,这个包会把 Zabbix 官方 yum 源写进系统。很多教程会让你直接去网站下载 rpm 然后 rpm -ivh,那也能跑,但后续升级依赖和依赖解析会比较被动。我一般习惯直接用官方 release 包,省事且可追溯。

# 安装 EPEL,php 和部分依赖可能用到 yum install -y epel-release # 添加 Zabbix 6.0 官方源,注意版本号和路径 rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm # 安装 Software Collections,Zabbix 6.0 前端需要 PHP 7.2+ yum install -y centos-release-scl # 清缓存重建,防止源切换不彻底 yum clean all

这里必须说明:CentOS 7.9 自带的 PHP 是 5.4,而 Zabbix 6.0 前端要求 PHP 7.2 以上。官方仓库在 RHEL 7 上是通过 SCL 里的 rh-php74 来解决的。如果你跳过 centos-release-scl,后面装 zabbix-web-mysql 时要么报依赖缺失,要么装上之后 PHP-FPM 根本起不来。我遇到过几次这种情况,最后都是补装 SCL 再重装前端包解决的。

还有一个细节:zabbix-release 包的版本号带-4.el7,如果系统之前装过其他 Zabbix 源,建议先检查一下是否冲突:

rpm -qa | grep zabbix-release # 如果结果不空,先删掉旧包再装新的 rpm -e <旧包名>

2.2 数据库版本:MariaDB 5.5 必须换掉

Zabbix 6.0 官方兼容的是 MySQL 8.0 或 MariaDB 10.5 以上。CentOS 7.9 默认装的是 MariaDB 5.5,这个版本连 Zabbix 6.0 的初始化 SQL 都导不进去,会直接报语法错误。所以在安装 Zabbix 本体之前,必须先解决数据库版本问题。

我多数场景下会选 MariaDB 10.5,因为它在 CentOS 7 上的二进制兼容性比 MySQL 8.0 更顺,不用额外处理 libaio 之类的依赖。

# 移除系统自带的 MariaDB 相关包,注意如果有存量数据先备份 yum remove -y mariadb mariadb-libs # 写 MariaDB 官方 10.5 源 cat > /etc/yum.repos.d/mariadb.repo <<'EOF' [mariadb] name=MariaDB baseurl=http://yum.mariadb.org/10.5/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1 enabled=1 EOF # 安装并启动 yum install -y MariaDB-server MariaDB-client systemctl enable --now mariadb

这里有两个容易踩的点。第一,如果机器上有历史数据,yum remove mariadb会连/var/lib/mysql里的数据文件一起删掉吗?不会,但保险起见先cp -a /var/lib/mysql /var/lib/mysql.bak再说。第二,MariaDB 10.5 官方源在国内部分网络环境下会比较慢,如果实在拉不动,用 MySQL 官方 8.0 源也行,只是 CentOS 7 上还需要yum install -y libaio,多一步操作。

装完之后跑一下安全初始化,至少把 root 密码设上:

mysql_secure_installation

2.3 准备 Zabbix 数据库账号与字符集

数据库版本搞定之后,接下来建库建账号。这里有个非常容易被忽略的坑:MySQL/MariaDB 中localhost和127.0.0.1是两个不同的 host,取决于 skip-name-resolve 配置。如果只授权了localhost,而 Zabbix Server 用 TCP 连 127.0.0.1,会被拒绝访问。我一般干脆两个都建上。

-- 进入数据库 mysql -uroot -p -- 创建数据库,字符集必须用 utf8mb4 CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; -- 创建用户并授权 CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'zabbix_pass_2024'; CREATE USER 'zabbix'@'127.0.0.1' IDENTIFIED BY 'zabbix_pass_2024'; GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost'; GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'127.0.0.1'; FLUSH PRIVILEGES; EXIT;

关于字符集多说一句:Zabbix 6.0 的监控项、触发器、事件数据都包含 emoji 和多字节文本,如果建库时用了默认的 latin1 或 utf8,后面报表或告警里出现中文乱码是很常见的事。utf8mb4 是必选项,不是可选项。utf8mb4_bin排序规则是为了避免大小写折叠导致主机名匹配出幺蛾子。

数据库这里搞定后,回头再确认一件事:systemctl status mariadb是否 active,并且mysql -uzabbix -pzabbix_pass_2024 -h127.0.0.1 zabbix能否登进去。这个连接测试值得做,因为 Zabbix Server 后续连库用的就是这套账号,早发现早解决。

3. 安装 Zabbix Server 与 Web 前端:从 schema 导入到服务启动

3.1 安装三个主要包

数据库就绪后,安装 Zabbix Server、Web 前端和 Agent2。这三个包要一起装,因为 zabbix-web-mysql 会拉入 httpd 和 rh-php74,Zabbix Server 则需要 mysql 驱动。

yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent2

装完会发现系统里多了几个关键路径:/etc/zabbix/下有 zabbix_server.conf 和 zabbix_agent2.conf,/etc/httpd/conf.d/下有 zabbix.conf,/etc/php-fpm.d/下有 zabbix.conf。这些都是安装包自动放好的,不要去网上找乱七八糟的配置文件覆盖,默认路径和权限是经过测试的。

3.2 导入初始 schema

Zabbix Server 本身不建表,需要把官方提供的初始化 SQL 导入数据库。Zabbix 6.0 的初始化脚本在/usr/share/doc/zabbix-sql-scripts/mysql/下,是个 gz 压缩包。

# 解压并导入,注意 -p 后面不要加空格 zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -pzabbix_pass_2024 zabbix

如果这步报错,先别急着搜 SQL 语法问题,回忆一下 2.2 节做的事:数据库版本是不是 10.5+?字符集是不是 utf8mb4?我见过太多人卡在这里,最后发现是 MariaDB 5.5 没换掉。另外导入时建议用mysql -h127.0.0.1而不是mysql -ulocalhost,避免 socket 连接方式与后续 Zabbix Server 的 TCP 连接行为不一致。

导入完成后可以验证一下表数量:

mysql -uzabbix -pzabbix_pass_2024 -h127.0.0.1 zabbix -e "show tables;" | wc -l

正常情况下应该有一百多张表。如果只有十几张,那说明导入中断过,建议 drop database 重建再导一次。

3.3 修改 zabbix_server.conf 与 PHP 时区

初始化数据导入后,Zabbix Server 还需要知道数据库密码才能启动。默认配置文件里 DBPassword 是注释掉的,不填的话 Server 会尝试空密码连接,然后启动失败。

# 编辑服务端配置 vi /etc/zabbix/zabbix_server.conf

重点关注这几个参数:

DBHost=127.0.0.1 DBName=zabbix DBUser=zabbix DBPassword=zabbix_pass_2024

DBHost 建议写成 127.0.0.1 而不是 localhost。原因和前面提到的一样,localhost 走 socket,127.0.0.1 走 TCP,如果 MariaDB 监听在 127.0.0.1:3306,用 localhost 反而可能绕开了授权规则。写完配置后用下面的命令验证:

# 检查配置是否可以解析 zabbix_server -t -c /etc/zabbix/zabbix_server.conf

这条命令会显示配置是否合法,不合法会给出具体报错行,比直接启动再翻日志快得多。

接着改 PHP 时区。Zabbix 前端校验时区设置,不设置或设置错误会在安装页直接红字提示。

vi /etc/php-fpm.d/zabbix.conf

把这一行改成你的时区:

php_value[date.timezone] = Asia/Shanghai

3.4 启动服务与放行防火墙

CentOS 7.9 环境里,需要启动的服务包括 zabbix-server、zabbix-agent2、httpd、rh-php74-php-fpm。这里的坑在于:如果你用systemctl start php-fpm,多半会提示找不到服务,因为 SCL 里的 PHP-FPM 服务名是带 rh-php74 前缀的。

# 启动并设置开机自启 systemctl enable --now zabbix-server zabbix-agent2 httpd rh-php74-php-fpm # 确认状态 systemctl status zabbix-server rh-php74-php-fpm

防火墙如果开着,需要放行三个端口:80(Web 前端)、10050(Agent 被动数据)、10051(Server 接收主动数据)。注意 10051 是 Server 的监听端口,10050 是 Agent 的监听端口,这两个经常搞混。

firewall-cmd --permanent --add-port=80/tcp firewall-cmd --permanent --add-port=10050/tcp firewall-cmd --permanent --add-port=10051/tcp firewall-cmd --reload

SELinux 也是一个隐形杀手。如果之前设置过 enforcing,httpd 连 Zabbix Server 可能被拦截。先临时关闭验证问题,再按需设置策略:

# 先临时关闭 setenforce 0 # 如果确认是 SELinux 问题,永久放行相关策略 setsebool -P httpd_can_connect_zabbix 1 setsebool -P httpd_can_network_connect 1

这里不建议直接把/etc/selinux/config改成 disabled,因为有的公司安全基线要求 SELinux 开启。临时关闭用于排查,最终用 setsebool 放行更稳妥。

4. Agent2 接入与前端初始化:从空页面到看到第一份数据

4.1 配置 zabbix_agent2.conf

Zabbix Server 起来后,还需要让 Agent 连上来。Zabbix 6.0 默认推荐 Agent2,它把原来的 agent 和补充插件合到一起,支持主动和被动两种模式。

编辑/etc/zabbix/zabbix_agent2.conf:

# 允许哪个 Server 来拉取被动数据,多个用逗号分隔 Server=192.168.10.20 # 主动模式下向哪个 Server 上报,填 Zabbix Server 的 IP ServerActive=192.168.10.20 # 主机名,必须与前端添加主机时的名称保持一致 Hostname=web-01 # Agent2 监听端口,默认 10050 ListenPort=10050

三个参数里最容易错的是Hostname。前端创建主机时填的名字如果和这个不一致,被动检查还能拉到数据(因为按 IP 匹配),但主动检查会全部显示不支持。另一个容易翻车的地方是Server=写成了 Zabbix Server 的主机名而不是 IP,DNS 解析有问题时会导致 Server 拉取数据超时。

改完配置后重启 Agent2:

systemctl restart zabbix-agent2 systemctl enable --now zabbix-agent2

检查监听状态:

ss -tlnp | grep 10050

如果这里什么都看不到,说明 Agent2 没起来,去看/var/log/zabbix/zabbix_agent2.log。

4.2 网页向导与中文界面

到这一步,浏览器访问http://<服务器IP>/zabbix,会出现 Zabbix 安装向导。第一步是 PHP 环境检查,正常情况下列表是全绿的。如果哪一项是红的,对照前面 3.3 节检查时区设置和 PHP 模块。

数据库连接页面里:

  • 数据库类型选 MySQL
  • 主机填 127.0.0.1
  • 端口默认 3306
  • 数据库名、用户名、密码填建库时的那套

向导走完后会生成一个zabbix.conf.php配置文件,位置在/etc/zabbix/web/下。如果之后改了数据库密码,需要同步修改这个文件,否则前端能打开但数据全红。

默认账号是Admin,密码是zabbix,登录后第一件事是改密码,这是废话但对生产环境必须强调。接着去把语言切到中文:右上角头像 → User settings → Language 选 Chinese (zh_CN),保存后界面刷新即为中文。如果切了中文后界面出现方块字,检查系统是否有中文字体包,通常yum install -y wqy-microhei-fonts能解决。

4.3 创建主机并验证连通性

前端左侧菜单:数据采集 → 主机 → 创建主机,填写内容如下:

  • 主机名:必须和 Agent2 的 Hostname 一致,比如 web-01
  • 可见名称:可以写中文备注,方便运维识别
  • 模板:搜索 “Linux by Zabbix agent”,选中添加到右侧
  • 接口:IP 填 Agent2 的 IP,端口 10050

保存后主机列表里会出现这台机器,状态变成绿色表示已连接。如果是不支持或红色,先跑一遍命令行验证:

# 安装 zabbix_get 工具 yum install -y zabbix-get # 从 Server 端发起一次被动检查 zabbix_get -s 192.168.10.30 -k agent.ping

这段命令的含义是:Zabbix Server 作为客户端,主动向 192.168.10.30 的 10050 端口发起一次键值为 agent.ping 的查询。返回1说明 Agent 活着且网络通,返回超时或失败则说明 Agent 配置或防火墙有问题。这一步能把问题快速定位在 Server 端还是 Agent 端,不用在前端页面上猜。

5. Zabbix 6.0 安装部署避坑与常见问题排查

5.1 现象:装完获取到的是 Zabbix 5.0 或更老版本

  • 现象:执行yum install zabbix-server-mysql后,版本显示 5.0.x,或者装出来的路径和 6.0 不一样。
  • 原因:系统之前配置过 EPEL、第三方 Zabbix 源,或者 zabbix-release 包安装后 yum 缓存没刷新。
  • 解决:先执行rpm -qa | grep zabbix-release,把旧 release 包删掉,重新rpm -Uvh官方 6.0 的 release 包,再yum clean all && yum makecache。安装前可以用yum list zabbix-server-mysql --showduplicates确认源里的版本号。

5.2 现象:导入 server.sql.gz 报 ERROR 1064 语法错误

  • 现象:zcat ... | mysql执行到一半,屏幕输出ERROR 1064 at line 1: You have an error in your SQL syntax。
  • 原因:数据库版本太低。Zabbix 6.0 的初始化 SQL 用了 JSON、窗口函数等新语法,MariaDB 5.5 和 MySQL 5.7 解析不了。我曾见过有人在 MySQL 5.7 上折腾半天,最后确认是版本不满足要求。
  • 解决:按 2.2 节思路把数据库升到 MariaDB 10.5+ 或 MySQL 8.0,然后drop database zabbix重建库再导入。另外确认建库字符集是 utf8mb4,否则中文数据会变成问号。

5.3 现象:网页打开是 502 或者直接空白

  • 现象:httpd 状态正常,访问/zabbix时页面 502 Bad Gateway 或一片空白。
  • 原因:rh-php74-php-fpm 没起来。SCL 包安装的 PHP-FPM 服务名不是php-fpm,很多人执行systemctl start php-fpm时报错找不到服务,于是以为 PHP 没装,实际是服务名搞错了。
  • 解决:执行systemctl start rh-php74-php-fpm,然后systemctl enable rh-php74-php-fpm。如果还是 502,检查/var/opt/rh/rh-php74/log/php-fpm/error.log,常见问题是时区配置写错了位置,PHP 解析 zabbix.conf 时直接 fatal。

5.4 现象:Agent 显示绿色但监控项一直不支持

  • 现象:主机状态是绿色(已连接),但所有监控项都显示“不支持”,点进去提示 timeout。
  • 原因:Hostname 不一致,或者 ServerActive 填错,也可能是防火墙只放行了 10050 没放行 10051。被动检查走 10050 所以主机显示绿色,但主动检查走 10051 被防火墙拦了。
  • 解决:对比/etc/zabbix/zabbix_agent2.conf里的 Hostname 与前端主机名是否完全一致,包括大小写。检查 ServerActive 是否指向 Zabbix Server IP。最后确认防火墙:10050 是 Agent 监听端口,10051 是 Server 监听端口,Agent 主动上报连的是 Server 的 10051。

5.5 现象:前端提示 Zabbix server is not running

  • 现象:浏览器里显示“Zabbix server is not running: the information displayed may not be current”。
  • 原因:zabbix_server 进程没起来,或者起来了但连不上数据库。最常见的是/etc/zabbix/zabbix_server.conf里DBPassword写错,或者数据库授权了 localhost 但 Server 走 TCP 连 127.0.0.1。
  • 解决:先systemctl status zabbix-server看进程状态,再tail -100 /var/log/zabbix/zabbix_server.log看报错。日志里明确写了database is down或Access denied就按 2.3 节重新检查账号授权。顺便确认 SELinux 是否拦截,可以setenforce 0后重启服务看是否恢复。

6. 验证方法论:用 zabbix_get 和 zabbix_sender 打通端到端链路

Zabbix 装完之后,很多人习惯直接看前端页面的图形和最新数据来判断系统是否可用。但前端展示的数据链路过长,一旦图形区域空白,很难快速定位是 Agent 问题、Server 问题还是数据库问题。我养成了一个习惯:新装环境一律先用命令行工具做端到端验证,再碰前端。

第一层验证是被动检查链路的连通性。从 Zabbix Server 机器上执行:

yum install -y zabbix-get # -s 后面是 Agent 的 IP,-k 是键值 zabbix_get -s 192.168.10.30 -k agent.ping

这条命令如果返回1,说明 Server 能通过 10050 端口拿到 Agent 的响应,网段路由、防火墙、Agent 配置这前三层已经通。如果失败,优先检查ss -tlnp | grep 10050和防火墙规则。

第二层验证是主动模式的完整链路,这一步能确认 Server 接收、数据库写入、前端展示全流程。首先在前端给目标主机创建一个测试 item:

  • 名称:写入链路测试
  • 类型:Zabbix trapper(也就是被动接收方)
  • 键值:demo.item

然后回到 Zabbix Server 所在机器:

yum install -y zabbix-sender zabbix_sender -z 127.0.0.1 -p 10051 -s "web-01" -k "demo.item" -o 9

参数含义:-z指定 Zabbix Server 地址,-p是 Server 监听端口 10051,-s指定主机名,-k是键值,-o是要发送的数值。执行结果显示processed: 1,意味着 Server 已接收并写库。然后前端最新数据里检索demo.item,如果能看到值为 9 的数据点,整条链路全部打通。

这个验证方法有意思的地方在于:它把前端容易表现的“玄学”问题变成可测试对象。前端显示延时或图表空白时,你可以很快判断是采集链路断了还是展示层的问题,不用东翻日志西看状态。从那以后我每次装完 Zabbix,都强制自己先跑一遍 get 和 sender,再做前端配置,省下了大量半夜排障的时间。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询