资讯动态

CentOS 7.9 安装 Zabbix 6.0 LTS:从数据库到 Agent2 完整避坑指南

发布时间:2026/10/16 18:48:04 来源:尧图企业网站定制
简介面向需要在 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 包省事且可追溯。# 安装 EPELphp 和部分依赖可能用到 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 CollectionsZabbix 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] nameMariaDB baseurlhttp://yum.mariadb.org/10.5/centos7-amd64 gpgkeyhttps://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck1 enabled1 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_installation2.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 zabbixlocalhost IDENTIFIED BY zabbix_pass_2024; CREATE USER zabbix127.0.0.1 IDENTIFIED BY zabbix_pass_2024; GRANT ALL PRIVILEGES ON zabbix.* TO zabbixlocalhost; GRANT ALL PRIVILEGES ON zabbix.* TO zabbix127.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-php74Zabbix 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 导入初始 schemaZabbix 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重点关注这几个参数DBHost127.0.0.1 DBNamezabbix DBUserzabbix DBPasswordzabbix_pass_2024DBHost 建议写成 127.0.0.1 而不是 localhost。原因和前面提到的一样localhost 走 socket127.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/Shanghai3.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防火墙如果开着需要放行三个端口80Web 前端、10050Agent 被动数据、10051Server 接收主动数据。注意 10051 是 Server 的监听端口10050 是 Agent 的监听端口这两个经常搞混。firewall-cmd --permanent --add-port80/tcp firewall-cmd --permanent --add-port10050/tcp firewall-cmd --permanent --add-port10051/tcp firewall-cmd --reloadSELinux 也是一个隐形杀手。如果之前设置过 enforcinghttpd 连 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.confZabbix Server 起来后还需要让 Agent 连上来。Zabbix 6.0 默认推荐 Agent2它把原来的 agent 和补充插件合到一起支持主动和被动两种模式。编辑/etc/zabbix/zabbix_agent2.conf# 允许哪个 Server 来拉取被动数据多个用逗号分隔 Server192.168.10.20 # 主动模式下向哪个 Server 上报填 Zabbix Server 的 IP ServerActive192.168.10.20 # 主机名必须与前端添加主机时的名称保持一致 Hostnameweb-01 # Agent2 监听端口默认 10050 ListenPort10050三个参数里最容易错的是Hostname。前端创建主机时填的名字如果和这个不一致被动检查还能拉到数据因为按 IP 匹配但主动检查会全部显示不支持。另一个容易翻车的地方是Server写成了 Zabbix Server 的主机名而不是 IPDNS 解析有问题时会导致 Server 拉取数据超时。改完配置后重启 Agent2systemctl 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再做前端配置省下了大量半夜排障的时间。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑