首页 / 资讯中心 / 文章详情

CentOS 7.9安装Zabbix 6.0全攻略:从依赖配置到告警验证

CentOS 7.9安装Zabbix 6.0全攻略:从依赖配置到告警验证 ★ FEATURED ARTICLE
简介CentOS 7.9 中通过源码编译部署 Zabbix 6.0 LTS 的完整实操文档面向需要自建监控平台的运维工程师与初学者。资源为单文件 docx 文档约 257KB目前已有 4195 人浏览学习内容紧凑便于本地查阅。文档以 Zabbix Server 6.0.12 和 Agent 6.0.12 为主线先梳理软件版本与安装方式再分步介绍关闭 SELinux、安装依赖、Nginx 1.20.2 源码编译、PHP 7.4.30 部署、MySQL 8.0 数据库准备及 Zabbix 服务配置启动同时给出 nginx.conf 中站点目录、PHP 解析、隐藏 Nginx 版本、zabbix_server.conf 数据库连接、nginx 开机自启和 Web 访问验证等关键细节并在最后说明启动 zabbix_server、zabbix_agent 及通过 Web 访问后台的方式命令和配置片段均可直接复制使用遇到编译参数、权限或服务启动问题时也能按文档逐项排查。整体步骤从环境准备到后台访问形成闭环适合作为首次部署 Zabbix 的参考文档能帮助读者减少安装踩坑快速完成监控平台的基础搭建。1. CentOS 7.9 装 Zabbix 6.0先过三关再谈监控在 CentOS 7.9 上装 Zabbix 6.0 LTS 版真正的难点从来不是安装命令本身而是先把系统自带的软件版本骗过 Zabbix 的前置检查。CentOS 7.9 默认带的是 PHP 5.4 和 MariaDB 5.5而 Zabbix 6.0 LTS 官方要求 PHP 7.2~8.1、数据库用 MariaDB 10.5 以上。这套组合拳打下来大部分安装失败都发生在仓库配置阶段——装到一半 yum 解析依赖失败报一堆 php-bcmath、php-mbstring 找不到。这篇笔记按我实际部署的路径来写从仓库选型、数据库初始化、Server 安装到前端避坑最后用 Agent 自监控验证一条完整告警链路。适合刚从 Zabbix 5.0 升级上来、或者第一次在 CentOS 7 上碰 Zabbix 6.0 的运维和开发同学。2. 环境准备PHP 升到 7.4 的三个仓库步骤2.1 为什么默认源装不出 Zabbix 6.0CentOS 7.9 的 base 源里PHP 停留在 5.4这是 2012 年的版本MariaDB 停留在 5.5连 utf8mb4 的索引长度都撑不住。Zabbix 6.0 LTS 的前端界面基于 PHP 7.2 开发用 5.4 跑起来会直接挂Server 端建表时用的字符集和索引格式MariaDB 5.5 也支持不了。所以配置 Zabbix 官方仓库之前操作系统自身的软件源必须先补齐。很多教程把这一步省了默认你机器上已经装好了 LAMP 环境结果新手照做到yum install zabbix-web-mysql这一步就开始翻车。实际上Zabbix 6.0 在 RHEL/CentOS 7 上官方推荐用 REMI 源提供 PHP再用 MariaDB 官方源提供 10.5 版本的数据库。这两个源配好Zabbix 安装包才能正确解析依赖。不要试图用源码编译 PHP 7.4 来绕过仓库问题那会让后续每个 php 扩展都要手动编维护成本极高。yum 源方案虽然不是最快的但它是生产环境里最稳、最可重复的一条路。2.2 配置 EPEL 与 REMI 仓库PHP 7.4 的获取路径# 1. EPEL 是 REMI 的前置依赖先装 EPEL yum install -y epel-release # 2. 安装 REMI 仓库发布 rpm rpm -Uvh https://rpms.remirepo.net/enterprise/remi-release-7.rpm # 3. 启用 remi-php74这一步是关键 yum-config-manager --enable remi-php74 # 4. 清理缓存并确认 PHP 版本 yum clean all yum makecache php -v这里有个顺序问题必须先装 EPEL 再装 REMI因为 REMI 包依赖 EPEL 里的依赖项。yum-config-manager如果提示命令不存在说明yum-utils没装先执行yum install -y yum-utils再回来。REMI 源默认启用的是remi-safe它保持系统原有的 PHP 版本不变必须显式执行--enable remi-php74才会让 yum 从 PHP 7.4 的仓库里拉包。执行完php -v应该看到 PHP 7.4.x 的输出。如果显示的还是 5.4多半是remi-php74没有成功启用用yum repolist enabled | grep remi检查一下。同时只启用一个 PHP 版本仓库就够了。remi-php74和remi-php80同时开着yum 会因为同名包多版本问题报依赖冲突到时候排查起来又是一头雾水。Zabbix 6.0 支持 PHP 8.0但我个人偏好 7.4官方维护周期完整第三方扩展兼容性也已经过大量生产验证。2.3 安装 Zabbix 官方仓库版本号要对齐 6.0 LTS# 下载 Zabbix 6.0 LTS 对应的 RHEL 7 rpm 发布包 rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm # 清理并重建缓存让 Zabbix 源里的包信息生效 yum clean all yum makecache这个 rpm 装完后/etc/yum.repos.d/下会出现 zabbix.repo里面默认启用了 zabbix 主源。到repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/目录下如果看到更新的 release 包版本优先用更新的。版本号里6.0-4表示这是 6.0 LTS 分支的第 4 个发布包对应 Zabbix 6.0.4 左右的软件版本。装完用yum repolist enabled | grep zabbix确认源已经生效。如果之前机器上配置过 Zabbix 5.0 或其他版本的源一定要先把旧的 repo 文件删掉再装 6.0 的包。两个版本的源同时存在时yum 会同时看到多个 zabbix-server-mysql 候选包版本对比逻辑会变得不可控这是很多诡异报错的来源。3. 数据库部署用 MariaDB 10.5 换掉系统自带的 5.53.1 Zabbix 6.0 对数据库的硬性要求Zabbix 6.0 LTS 官方支持的数据库范围包括 MySQL 8.0.x 和 MariaDB 10.5.00 及以上版本。CentOS 7.9 基础源里提供的是 MariaDB 5.5这是一个跨了两个大版本的差距。MariaDB 5.5 的问题不只是版本老关键在于它默认的索引结构对 utf8mb4 字符集支持不完整。Zabbix 6.0 的初始 schema 里大量使用了 utf8mb4 字符集和较长的索引键在 5.5 上建表会直接报Specified key was too long。即使你绕过建表错误后续监控数据量上来索引和查询性能也会成为瓶颈。另外要注意CentOS 7 基础源里mysql-server这个包名实际上是 MariaDB 5.5 的重命名包。也就是说你执行yum install mysql-server装出来的还是老版本 MariaDB并没有绕开问题。正确路径是配置 MariaDB 官方软件源直接安装 10.5 版本。这一步做对了后面导入 schema 才不会有字符集和索引相关的坑。3.2 用 MariaDB 官方源安装 10.5# 配置 MariaDB 10.5 的 yum 源 cat /etc/yum.repos.d/mariadb.repo EOF [mariadb] name MariaDB baseurl https://yum.mariadb.org/10.5/centos7-amd64 gpgkey https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck 1 EOF # 安装并启动注意包名是大写 M yum install -y MariaDB-server MariaDB-client systemctl enable --now mariadb这里的包名有个非常阴险的细节官方源里的包名是MariaDB-server首字母大写。如果你手快敲成小写的mariadb-serveryum 会忽略刚配置的官方源从系统 base 源拉回 5.5 版本——因为 base 源里那个小写包名存在。装完记得用mariadb --version确认版本号是 10.5.x这一步翻车率相当高属于那种「装完了、启动了、建库报错才发现版本不对」的血泪教训。如果yum install时提示 GPG key 导入失败可以先执行rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB再重试。baseurl使用 https 时证书有问题的话可以换成 http但不建议关闭 gpgcheck 来绕过那不是解决问题的办法。3.3 初始化并创建 Zabbix 库utf8mb4 是硬要求# 安全初始化设置 root 密码、删除匿名用户、禁用 root 远程登录 mysql_secure_installation # 用 root 登录创建数据库和专用账号 mysql -uroot -p -- 以下是 SQL 语句逐条执行 CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; CREATE USER zabbixlocalhost IDENTIFIED BY zabbix_pass_2024; GRANT ALL PRIVILEGES ON zabbix.* TO zabbixlocalhost; FLUSH PRIVILEGES;数据库字符集必须是 utf8mb4排序规则用 utf8mb4_bin。Zabbix 6.0 的create.sql.gz里所有表结构默认就是 utf8mb4如果建库用了 utf8导入时会在部分表上因为索引字节超限报错。这个问题一旦发生改库的字符集不是一条 SQL 能搞定的所以开头就选对。zabbix用户只用localhost就够了Zabbix Server 和前端都在本机。如果以后要拆开部署再把 host 改成需要的网段。密码方面建议先避开$、#、单引号这些特殊字符否则后面配置文件里会遇到转义问题这一点在第五章单独展开。建完库后可以顺手验证一下字符集mysql -uzabbix -pzabbix_pass_2024 zabbix -e SELECT character_set_database, collation_database;输出应该是 utf8mb4 和 utf8mb4_bin。如果这里不对先别往下走回到建库语句重新执行。4. Zabbix Server 安装schema 导入与三处配置4.1 安装 zabbix-server-mysql 与 zabbix-web-mysqlyum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agentzabbix-server-mysql是 Server 主体负责数据采集、触发器计算和告警zabbix-web-mysql是前端界面依赖 php-fpm 和一批 PHP 扩展zabbix-agent是装在监控机上的客户端这里一起装是为了后面用自监控验证。安装过程中 yum 会自动从 remi-php74 拉取 PHP 7.4 及相关模块不需要手动逐个安装 php-bcmath、php-mbstring 这些依赖。如果之前没有正确启用 remi-php74命令执行到一半会报依赖错误Requires: php-bcmath之类。这时候别急着到处找 rpm 手动装先确认 2.2 节的步骤是否全部完成。另外注意区分zabbix-web和zabbix-web-mysql前者只是前端框架不带数据库驱动装完连安装向导都走不完后者的依赖关系才是完整的。装完后检查/etc/httpd/conf.d/zabbix.conf是否存在。这个文件把 Zabbix 前端挂到了 httpd 上并且通过 php-fpm 处理 PHP 请求。同时确认php-fpm服务已安装systemctl status php-fpm应该是 active 状态。CentOS 7 上 Zabbix 6.0 不用 mod_php前端流量是 httpd → php-fpm 的模式。4.2 导入初始 schema用 zcat 管道而不是先解压zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -pzabbix_pass_2024 zabbix这一条命令把初始表结构导入到 zabbix 库。官方压缩包里的 SQL 文件直接用 zcat 解压并管道给 mysql 客户端是标准做法。要注意zabbix这个库名出现在命令末尾表示导入目标库。如果之前建库时把库名写错这里导入进去的就是另一个库表结构会落在错误位置。导入过程如果报Access denied先确认 mysql 用户确实是zabbix且密码正确如果报Specified key was too long回去检查第 3.3 节建库字符集。导入完成后立刻验证表数量mysql -uzabbix -pzabbix_pass_2024 zabbix -e SHOW TABLES; | wc -l正常情况下表数量超过 100 张。如果数字很小比如只有十几张说明导入中途出错了重新执行一次导入命令即可。这个命令是幂等的吗不完全是重复导入会因为表已存在而报错所以第一次导入时最好盯一眼终端输出有没有异常。建议导入前先确认没有旧表残留mysql -uzabbix -p zabbix -e DROP DATABASE zabbix; CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;保证一个干净的导入环境。4.3 修改 server 配置并启动三处必改项# 编辑 /etc/zabbix/zabbix_server.conf # 把注释掉的这三行打开并修改 DBNamezabbix DBUserzabbix DBPasswordzabbix_pass_2024 # 启动并设置开机自启 systemctl enable --now zabbix-server # 重启 httpd 和 php-fpm让前端生效 systemctl restart httpd php-fpmzabbix_server.conf是 Server 的核心配置。默认情况下 DBName 和 DBUser 已经有值但 DBPassword 是空的不设置的话 Server 根本无法连接数据库启动会失败。注意这个配置文件有自己的解析规则密码不要加引号引号会被当成密码内容的一部分导致认证失败。启动后第一件事是看日志尾部tail -f /var/log/zabbix/zabbix_server.log看到starting Zabbix Server和server started才算真正跑起来。最常见的问题是cannot connect to database这时候优先检查 DBPassword 是否和建用户时一致其次用mysql -uzabbix -p密码 zabbix -e SELECT 1;手动验证连接。日志里如果出现端口占用一般是之前装过旧版 Zabbix需要先停掉旧服务再启动。5. 避坑实战前端白屏、SELinux 和密码里的五个陷阱5.1 PHP 参数不足300 秒执行时间到底改哪个文件现象浏览器访问http://服务器IP/zabbix进入安装向导后第一步 PHP 参数检查出现红色提示max_execution_time、memory_limit等数值不达标。原因Zabbix 6.0 在 CentOS 7 上使用的是 php-fpm 模式PHP 的配置分散在多个 pool 文件里。Zabbix 前端对应的配置在/etc/php-fpm.d/zabbix.conf而不是全局的/etc/php.ini。修改全局配置对这个 pool 不一定生效因为 pool 里的php_value指令优先级更高。vim /etc/php-fpm.d/zabbix.conf # 确认或修改以下值 php_value[max_execution_time] 300 php_value[max_input_time] 300 php_value[memory_limit] 128M php_value[post_max_size] 16M systemctl restart php-fpm这几个参数的含义max_execution_time300是前端生成报表和图表时允许的最长执行时间监控页面加载大量数据经常超过默认的 30 秒memory_limit128M是渲染图形时 PHP 进程的内存上限太小会白屏post_max_size16M是前端批量导入配置、执行批量操作时允许的请求体上限。改完必须重启 php-fpmreload 不一定能加载 pool 配置变更。5.2 SELinux 放行关键布尔值必须开启现象前端能打开安装向导顺利走完但登录进去后页面提示Zabbix server is not running而systemctl status zabbix-server明明显示 active。或者前端某些页面加载持续转圈。原因CentOS 7.9 默认 SELinux 处于 enforcing 状态。httpd 进程被 SELinux 策略拦截无法连接 Zabbix Server 监听的 10051 端口。Zabbix 前端和后端之间需要通过本机网络通信这条链路被策略挡死。# 精确放行 httpd 连接 zabbix 的链路 setsebool -P httpd_can_connect_zabbix 1 # 验证布尔值已生效 getsebool httpd_can_connect_zabbix-P参数让修改永久生效重启后不会回退。遇到这个问题时不要一上来就setenforce 0关闭整个 SELinux生产环境合规性会受影响。用布尔值精确放行就够了这也是 Zabbix 官方手册在 RHEL 7 上给出的标准做法。5.3 时区未设置白屏 502 和告警时间偏移的元凶现象安装向导填完最后一步提交后页面白屏或者 php-fpm 日志里出现大量 timezone 相关的 warning。即使装完了告警通知里的时间也比实际时间慢了 8 小时。原因zabbix.conf里date.timezone没有设置PHP 7.4 在时区缺失时会输出警告Zabbix 前端部分页面在 UTC 默认时区下表现异常。告警时间偏移则是时区没有同步到 Asia/Shanghai 的直接结果。vim /etc/php-fpm.d/zabbix.conf # 添加一行 php_value[date.timezone] Asia/Shanghai systemctl restart php-fpm这个文件是 Zabbix 前端独立的 pool 配置只改这里不会影响机器上其他 PHP 项目。date.timezone设置后前端的告警时间、图表时间轴都会统一到北京时间。如果公司服务器统一使用 UTC这里也可以改成 UTC但建议和业务监控的展示习惯保持一致。5.4 数据库密码带特殊字符前端连不上命令行却能连现象web 安装向导最后一步数据库连接报错但用 mysql 命令行、用完全相同的密码能正常登录。原因前端安装向导会把数据库配置写入/etc/zabbix/web/zabbix.conf.php这个文件是 PHP 代码。密码如果包含单引号会直接破坏$DB[PASSWORD] xxx;这行语句的语法如果包含$符号在 PHP 双引号字符串里会被当作变量解析实际连接的密码就变了。解决思路有两个最省事的是建库用户时密码只用字母、数字和下划线避开所有特殊字符如果业务密码策略不允许就需要手动编辑zabbix.conf.php对单引号做转义。改完后用php -l /etc/zabbix/web/zabbix.conf.php检查语法输出No syntax errors detected才算通过。注意这个文件包含明文密码权限保持 644 即可不要改成 777。5.5 防火墙端口三个端口一次放行现象本机访问前端没问题但局域网内其他机器访问不了被监控机上报数据失败zabbix_get探测超时。原因CentOS 7.9 默认启用了 firewalld只放行了 ssh 端口。Zabbix 涉及的端口一个都没开放。firewall-cmd --permanent --add-port80/tcp # 前端页面 firewall-cmd --permanent --add-port10051/tcp # zabbix-server 监听 firewall-cmd --permanent --add-port10050/tcp # zabbix-agent 监听 firewall-cmd --reload端口分工要理清楚10051 是 Zabbix Server 接收 Agent 上报数据的端口10050 是 Agent 暴露给 Server 拉取数据的端口。在 Zabbix Server 这台机器上80 和 10051 是必须的10050 是为了以后从这台 Server 主动采集其他 Agent 数据时入站通畅。被监控机自己也要放行 10050否则 Server 无法被动采集。如果机器上用的不是 firewalld 而是 iptables放行规则要写到 iptables 里但 CentOS 7 默认场景基本都是 firewalld优先从这里查起。添加完端口后用firewall-cmd --list-all确认规则已加载。6. Agent 自监控验证用一条 zabbix_get 证明安装成功6.1 安装并配置 Agent先本地验证被动采集yum install -y zabbix-agent zabbix-get vim /etc/zabbix/zabbix_agentd.conf # Server127.0.0.1 被动模式允许谁从这里拉数据 # ServerActive127.0.0.1 主动模式agent 主动上报给谁 # Hostnamezabbix-server 主机名前端添加主机时要对应 systemctl enable --now zabbix-agent # 验证被动采集是否正常 zabbix_get -s 127.0.0.1 -k system.hostnamezabbix_get通不通是判断 Agent 装没装对的黄金标准。它主动向 Agent 发起一次数据查询绕过前端界面直接验证采集链路。返回结果如果是主机名说明 Agent 配置正确返回空或者超时先看Server有没有写成 127.0.0.1再看 agent 日志/var/log/zabbix/zabbix_agentd.log。Server和ServerActive的区别在于前者是被动模式对方 IP 白名单后者是主动模式的连接目标。自监控场景两个都写 127.0.0.1 就够了。6.2 前端添加主机并关联模板等数据比什么都靠谱登录前端界面进入 Data collection → Hosts → Create host。主机名填 zabbix-server要和 Agent 配置里的 Hostname 对应接口选 AgentIP 填 127.0.0.1端口 10050。Templates 里搜索Linux by Zabbix agent关联上这个模板。模板会自动给主机挂载 CPU、内存、磁盘等一组基础监控项。保存后等一到两个采集周期默认是 30 秒到 1 分钟然后去 Latest data 里看是否有数据进来。一条数据都没有说明 Server 到 Agent 的采集链路有问题回头看 Server 日志有数据但个别项是空的说明模板里对应监控项没有取到值多为权限或依赖问题。等到 Latest data 开始出数据整个安装链路才算真正闭环。6.3 告警通路验证用脚本方式造一条最短链路我习惯用 Script 告警媒介做告警通路测试比配置邮件快得多。进 Alerts → Media types新建一个 Script 类型媒介脚本放在/usr/lib/zabbix/alertscripts/下。写一个最简单的 shell 脚本往临时文件里追加一行时间和标题#!/bin/bash echo $(date) $1 $2 /tmp/zabbix_alert_test.log chmod x /usr/lib/zabbix/alertscripts/test_alert.sh然后给用户添加这个告警媒介手动关闭一个自带触发器比如 system 模板里的某个项或者直接新建一个表达式为 1 的触发器强制触发告警。等一两分钟去/tmp/zabbix_alert_test.log看有没有内容。这一条链路验证的是触发器 → 告警媒介 → 执行脚本是否通畅。我吃过一次亏上线第二周才发现告警一直没发出去因为媒介配置里用户关联漏了。从那以后每次装完 Zabbix第一件事就是跑一次最简脚本告警确认链路通了再接邮件通知。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站