☰
CentOS 7 上 Zabbix 6.0 LTS 安装配置实战详解
2026/10/13 17:33:01 网站建设 项目流程

做运维这些年,一说起监控系统,Zabbix 绝对是绕不开的那个名字。特别是手头管着几十上百台 CentOS 7 服务器,老板半夜打电话问你“网站怎么挂了”的时候,有一套能提前告警、能看历史趋势、能定位故障的监控平台,比什么都实在。这篇文章就从实际部署角度出发,完整走一遍 Zabbix 在 CentOS 7 上的介绍、安装和配置流程,把那些文档里不写、但实操中一定会遇到的坑都摆出来。

我之前在某公司负责运维时,接手的那套监控就是用 Zabbix 搭的,从 3.x 一路升到 6.x,对它又爱又恨。爱的是它功能全、文档多、社区活跃,恨的是初次装的时候走了太多弯路。所以这次把整套流程梳理出来,从选型到装完跑通,再到监控第一台机器,尽量写得能“照着抄”。不管你是刚接触监控的新手,还是准备从别的监控工具切到 Zabbix 的老手,这篇都值得你花半小时看完。

1. 为什么是 Zabbix:监控方案选型与核心价值

1.1 服务器监控到底解决什么问题

先聊一个听起来“虚”但实际很要命的问题:你部署监控系统,到底是为了什么?我的理解是三层:第一层是“出事了能第一时间知道”,这叫告警;第二层是“出事后能快速定位是不是资源瓶颈”,这叫数据可视化;第三层是“往长远看,知道什么时候该扩容、哪些业务在吃资源”,这叫容量规划。没有监控,这三件事全靠猜,而猜是最不靠谱的运维方式。

Zabbix 这个老牌开源监控工具,最擅长的就是“传统 IT 基础设施监控”——服务器 CPU、内存、磁盘、网络流量,数据库、中间件、交换机、防火墙,这些用它都能管。它采用的是“采集-存储-告警-展示”的完整闭环:Agent 或各类协议采集数据,把数据存进数据库,通过触发器规则判断异常并发出告警,最后通过 Web 界面把历史数据画成图表。这个链路是完整且成熟的。

1.2 Zabbix 与 Prometheus、Nagios 等方案的取舍

做技术选型的时候,肯定会有人问:现在 Prometheus 不是很火吗,为什么还选 Zabbix?这个要分场景说。

维度ZabbixPrometheusNagios
偏向场景传统 IDC、虚拟机、网络设备、操作系统级监控云原生、Kubernetes、微服务、短生命周期任务老牌主机服务监控
数据模型关系型数据库存储,历史数据落库时序数据库,Pull 模型拉取指标插件式脚本采集
告警体系触发器+动作+通知媒介,成熟强大Alertmanager,规则配置灵活插件告警,传统但稳定
部署复杂度服务端较重,组件多,但文档齐全组件轻量,但生态组件繁杂简单直接
上手成本中,Web 配置项多但直观中高,PromQL 需要学习低,但现代化功能弱

以我的经验,如果你的环境是“云原生已经在跑、服务都是容器化的”,那 Prometheus 确实是好选择,它的服务发现机制对动态环境太友好了。但如果你的服务器还是大量 CentOS 7、Windows Server 这些传统形态,要监控的不只是应用还有硬件层、网络层,Zabbix 的开箱即用、模板丰富、Agent 自动注册这些优势非常明显。况且 Zabbix 6.0 LTS 版本已经原生支持了 Prometheus 数据源接入,两者是可以互补的,没必要非得分个你死我活。

1.3 Zabbix 6.0 LTS 版本怎么选

Zabbix 的版本策略是分 LTS(长期支持)和 Standard(标准支持)。对生产环境,无脑选 LTS,因为你会获得更长的安全更新和维护期。目前 CentOS 7 上推荐部署 6.0 LTS,它要求 PHP 7.2 以上,对 CentOS 7 默认自带的 PHP 5.4 来说是个门槛,这个后面会重点说解决办法。

另外需要注意:Zabbix 7.0 虽然也发布了,但对操作系统有了新要求,部分组件在 CentOS 7 上兼容性不如 6.x 稳。我做生产部署时选择 6.0 LTS 还有一层原因:官方仓库对 RHEL/CentOS 7 的 6.0 包支持周期非常充分,升级路线也清晰,后续如果要迁到 7.x 或更高版本,有官方升级路径。

2. 安装前必读:架构组件与关键环境准备

2.1 Zabbix 核心组件构成

Zabbix 不是单机软件,它由几个角色共同协作。搞懂架构再动手装,出错时才知道去哪排查。

  • Zabbix Server:核心进程,负责数据收集、触发器计算、告警发送。
  • Zabbix Agent:部署在被监控主机上的客户端,主动或被动采集指标发给 Server。
  • Zabbix Proxy(可选):分布式架构中的中间层,分担 Server 压力、跨网段采集。
  • Web 前端:PHP 写的管理界面,用来配置、看图表、管理告警。
  • 数据库:存放所有配置、历史数据、事件记录,是整套系统的“大脑”。

对单机入门场景,最小架构就是:一台装 LAMP(Linux + Apache + MySQL/MariaDB + PHP)的 Server 机,再加上各被监控机上装 Agent。我们这次的部署目标就是把这套最小闭环跑起来。

2.2 CentOS 7 环境初始化准备

在开始任何安装之前,先把系统基础打牢。我习惯按这个顺序做:

# 更新系统软件包,注意 CentOS 7 官方源已经进入 EOL 阶段 # 建议先切换至 vault 镜像源或本地区镜像源,再执行 update yum clean all && yum makecache yum update -y # 关闭 SELinux 或将策略调整为宽松模式(生产环境建议按需配置,此处演示用宽松模式) setenforce 0 sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config # 配置时间同步,监控对时间极为敏感 yum install -y chrony systemctl enable chronyd && systemctl start chronyd

这几个步骤看似简单,却直接影响后面 Zabbix 的运行质量。SELinux 不调好,Web 界面大概率出现“Permission denied”,时间不同步则告警乱报、历史数据错乱,这都是在实际环境里踩过的坑。生产环境中建议不要粗暴关闭 SELinux,而是调整 specific 布尔值,后面我会在常见问题部分给出专门的处理方式。

2.3 数据库与 PHP 环境的选择逻辑

CentOS 7 的默认仓库里,MariaDB 版本是 5.5,PHP 版本是 5.4,这两个都太老了。Zabbix 6.0 要求 PHP 7.2 以上、数据库支持 MySQL 8.0 / MariaDB 10.5+。所以安装前要先把这两个软件源的问题解决。

我当时图省事,直接装了官方默认的 MariaDB 5.5,结果 Zabbix 服务端启动后数据写入频繁报错,最后不得不升级数据库。这里给大家两个可行方案:

  • 用 MySQL 官方源安装 MySQL 8.0(稳但略重)。
  • 用软件集合源升级到 MariaDB 10.5(我推荐这个,兼容性好,社区资源也多)。

PHP 方面,Zabbix 官方仓库会提示你缺少依赖,常见的补救方案是启用第三方软件源安装 PHP 7.4 或 8.0。这个后文会详细展开。

3. Zabbix Server 服务端完整安装实录

3.1 配置 Yum 源与基础软件安装

Zabbix 官方为 CentOS 7 提供了专用的 Yum 仓库,安装步骤非常简单,关键在于选对版本号。以 6.0 LTS 为例:

# 安装 Zabbix 官方仓库(Release 包) 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

这里有个小细节:repo.zabbix.com 的访问速度在国内可能不太理想,如果下载很慢,建议先把这个 URL 下载下来的 rpm 文件传到服务器上,再用本地的代理源替换,或者使用镜像站加速。不要因为一个小下载卡掉整个部署节奏。

接下来安装 Server、前端和 Agent:

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

这一步会把 Nginx 或 Apache 也一并装进来。如果你想让 Web 前端跑在 Nginx 上,需要额外安装zabbix-web-nginx并配置 PHP-FPM;如果想用 Apache,默认开箱即用。我个人习惯用 Nginx,但为了降低门槛,本文默认用 Apache 方案,装完不需要额外配虚拟主机。

3.2 解决 PHP 版本与依赖问题

前面几次踩坑,最痛的就是 PHP 版本不够,导致zabbix-web-mysql装完后启动 PHP 时直接报“PHP Parse error”。CentOS 7 自带的 PHP 5.4,如果你没有启用别的软件源,安装 Zabbix 前端包时甚至可能直接提示依赖无法满足。

我的做法是:先启用一个第三方软件集合源,把 PHP 升级到 7.4,再继续。具体步骤:

# 安装软件集合的 yum 源配置包 yum install -y centos-release-scl # 安装 PHP 7.4 及相关扩展 yum install -y rh-php74 rh-php74-php-fpm rh-php74-php-mysqlnd rh-php74-php-gd rh-php74-php-bcmath rh-php74-php-xml rh-php74-php-mbstring

启用之后需要把它链接到系统默认的/usr/bin/php,或者调整 Web 服务的 PHP 配置指向新版本。Apache 环境下还需要把 PHP-FPM 的 socket 配置改到版本对应的路径。这一步网上教程写得少,但几乎 80% 卡在安装阶段的人都是因为它。装完记得验证一下:

php -v # 必须显示 PHP 7.4.x 而不是 5.4.x

3.3 数据库初始化与 Zabbix Server 配置

数据库层面,我们用 MariaDB 10.5 举例,先建好 Zabbix 需要的库和账号:

yum install -y mariadb-server systemctl start mariadb && systemctl enable mariadb mysql_secure_installation # 登录 MySQL 执行以下 SQL mysql -uroot -p CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'YourPassword'; GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost'; FLUSH PRIVILEGES; QUIT

然后导入 Zabbix 官方提供的初始表结构。这里有个顺序问题:必须先建库建用户,再导入 schema,然后再启动 Zabbix Server。Zabbix 6.0 的 schema 文件在/usr/share/doc/zabbix-sql-scripts/mysql/或/usr/share/zabbix-sql-scripts/mysql/下,具体位置因版本略有不同,用find找一下:

find /usr/share -name "*.sql" -path "*zabbix*" 2>/dev/null # 导入表结构(注意顺序:schema.sql 在前) zcat /usr/share/doc/zabbix-sql-scripts/mysql/schema.sql.gz | mysql -uzabbix -p'YourPassword' zabbix

导入完成后,编辑 Zabbix Server 主配置文件:

vi /etc/zabbix/zabbix_server.conf

需要重点核对以下参数:

DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=YourPassword

启动并设置开机自启:

systemctl restart zabbix-server systemctl enable zabbix-server

此时可以用systemctl status zabbix-server确认服务有没有起来。如果卡住,多半是数据库连接失败、schema 导入不完整,或者数据库版本太低,这三个原因按概率从高到低排查。

3.4 配置 Web 前端并完成界面初始化

Apache 场景下,Zabbix Web 默认会被放到/etc/httpd/conf.d/zabbix.conf这个虚拟目录里。确保 Apache 和 PHP-FPM 都处于启动状态:

systemctl start httpd && systemctl enable httpd systemctl start rh-php74-php-fpm || systemctl start php-fpm

然后在浏览器访问http://服务器IP/zabbix,进入安装向导。这个向导会检查 PHP 环境、数据库连接等前置条件,挨个满足即可。其中最重要的三个检查项是:

  • PHP 版本不低于 7.2
  • date.timezone已设置(例如Asia/Shanghai)
  • php_value memory_limit至少 128M

如果检查页有红色告警项,按提示改/etc/php.ini或 zabbix 前端的对应 php 配置,修改后重启 httpd 和 php-fpm。

初始化完成后,默认登录账号是Admin,默认密码是zabbix,第一次登录务必修改。到这里,Zabbix 服务端最基本的“能用”状态就算达成了。

4. 被监控主机接入:Agent 部署与自动发现实战

4.1 Agent 安装与密钥配置

监控平台如果只装了服务端,那是空架子,真正的核心是把被监控主机接入进来。以另一台 CentOS 7 作为被控机为例,安装 Agent:

rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm yum install -y zabbix-agent

编辑/etc/zabbix/zabbix_agentd.conf,核心修改三处:

Server=ZabbixServer的IP地址 # 被动模式下允许连接的 Server 地址,多个用逗号分隔 ServerActive=ZabbixServer的IP地址 # 主动模式下 Server 的地址 Hostname=被监控主机的名称 # 必须与 Web 控制台添加主机时的名称保持一致

这里最容易出错的是 Hostname 不匹配。Zabbix 是通过主机名来识别 Agent 上报的数据的,如果 Web 里写的是web-server-01,Agent 配置里写的是web01,那 Server 端就会报“Received empty response from Zabbix Agent”。启动前先检查:

zabbix_agentd -t -p 10050

然后启动:

systemctl restart zabbix-agent && systemctl enable zabbix-agent

防火墙记得放行端口,Agent 默认监听 10050:

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

4.2 在 Web 控制台添加主机与模板

登录 Zabbix Web,进入“数据采集”菜单下的“主机”,点击“创建主机”。名称要和 Agent 端 Hostname 完全一致,然后填入 Agent 的 IP 地址,端口保持 10050 默认。

接着选择一个模板,这是 Zabbix 的高效之处。比如想监控 Linux 基础指标,就选Linux by Zabbix agent active或Linux by Zabbix agent,它会自动关联一大堆监控项、触发器和图形。你可以先不加模板、直接点“添加”,加完再点主机名进去,在“模板”标签页搜索并链接模板。

添加完等待一分钟左右,如果一切正常,图标会从灰色变成绿色,表示数据已经开始采集了。此时去“监测”->“最新数据”,搜索 CPU,就能看到实时的 CPU 占用、负载、核心数等数据。

4.3 网络设备监控与无 Agent 场景扩展

Zabbix 不只是能监控装 Agent 的 Linux/Windows,还支持通过 SNMP、JMX、IPMI 等协议监控网络设备、Java 应用、物理服务器硬件状态。比如交换机、路由器,只需要在设备上开启 SNMP,然后在 Zabbix 里添加主机时选择“SNMP”接口、填上团体名或 v3 认证信息,再关联对应的网络设备模板即可。

这种“多协议支持”的能力是 Zabbix 在传统运维环境里特别能打的原因。我接手的监控环境里,有一大半网络设备、UPS 都是靠 SNMP 接入的,没有 Agent 也能完整监控端口流量、CPU、内存,这个灵活度是很多新兴监控工具不具备的。

5. 监控告警配置:让平台真正“有用”的关键一步

5.1 触发器是什么,为什么它是告警的“大脑”

监控数据采集上来,只是第一步。如果没有触发器(Trigger),这些数据只能是躺在数据库里的数字,无法在异常时通知你。触发器本质上是一个逻辑表达式,例如:

{web-server-01:system.cpu.util[,iowait].avg(5m)} > 10

这个表达式表示:主机 web-server-01 最近 5 分钟的平均 IO 等待时间超过 10% 就触发告警。Zabbix 的模板里已经预置了大量合理的触发条件,但实际使用中建议根据业务场景调整阈值,因为默认模板往往偏保守。

我在实际使用中建议遵循“分级告警”原则:把严重级别分成信息、警告、一般严重、严重、灾难等,不同级别配置不同的通知策略。比如磁盘使用率 80% 时发警告、90% 时发严重,这样就不会因为所有告警都是一个级别,导致深夜被无关紧要的告警轰炸。

5.2 配置邮件通知与告警动作

告警要真正通知到人,必须配置“动作”。在“告警”->“动作”里创建新动作,指定触发条件(比如“触发器严重级别 >= 警告”),然后指定操作:发送通知给哪些用户、通过什么媒介、内容模板是什么。

邮件通知是最常用的。先配置“告警媒介类型”里的邮箱 SMTP 参数:

  • SMTP 服务器、端口、加密方式
  • 发件人邮箱地址
  • 认证账号密码

然后创建用户,在用户的“告警媒介”里添加刚配好的邮件媒介,并指定接收邮箱。这样就完成了“触发器被触发 -> 通过动作找到用户 -> 用邮件媒介发信”的链路。

我在生产环境里还接入了钉钉/企业微信的机器人 webhook,这个 Zabbix 6.0 支持得很好,自定义脚本或内置的 Webhook 类型都能实现。如果你不想被邮件淹没,建议至少接一个 IM 通知渠道,这样告警响应速度会快很多。

5.3 聚合图形与仪表盘的设计心得

告警解决了“发现问题”,仪表盘解决的是“看清问题”。Zabbix 自带“仪表盘”功能,可以自由拖拽组件,把多台主机的核心指标、最近的故障主机列表、告警统计放到同一个页面。我通常会搭三个仪表盘:

  • 总览盘:整个机房的故障主机数量、告警级别分布、核心交换机流量。
  • 业务盘:按业务线分主机组,展示每个业务组的关键指标。
  • 容量盘:展示剩余磁盘空间最低的 Top10、CPU 内存使用率最高的 Top10,用于提前规划扩容。

设计仪表盘有个理念:一张图上的信息量不是越多越好。好的仪表盘应该是 30 秒就能判断“有没有问题、问题在哪里”,而不是像数据库查询结果一样密密麻麻。

6. 常见问题与排查技巧实录

6.1 主机图标变红:数据采集失败怎么查

遇到主机状态变红,先别慌,按链路排查:

# 第一步:确认端口通不通 telnet 被监控IP 10050 # 第二步:在被监控机上手动执行测试 zabbix_agentd -t system.cpu.util[,iowait] # 第三步:看 Server 端日志 tail -f /var/log/zabbix/zabbix_server.log

最常见的三个原因是:防火墙没放行 10050、Hostname 不一致、Agent 服务没起或配置格式错误。其中 Hostname 不一致最隐蔽,因为 Server 日志里只显示“received empty response”并且没有说明原因。把 Agent 的Hostname和 Web 控制台的主机名完全对齐,90% 的问题能解决。

6.2 数据乱码与时区问题

监测页面的图表横轴时间不对、告警时间与本地时间差 8 小时,这是老问题了。根因有两个层面:

一是 PHP 时区。修改/etc/php.ini:

date.timezone = Asia/Shanghai

二是数据库时区。确认 MySQL/MariaDB 的全局时区:

SELECT @@global.time_zone, @@session.time_zone;

如果显示 SYSTEM 但系统时间不正确,需要同步操作系统时区:

timedatectl set-timezone Asia/Shanghai

修改完后,Zabbix Server、Apache、PHP-FPM、数据库全部重启一遍,让所有组件读取新配置。有时候前端配置里也有时区选项,在“用户”->“用户设置”里也要检查。

6.3 数据库连接数被打满的处理

监控平台跑久了,会发现历史数据越积越多,数据库连接频繁报“Too many connections”。Zabbix Server 默认可能开几百个数据库连接,配合 PHP 前端和 housekeeper 进程,很容易把 MariaDB 默认的 151 连接数顶满。

我当时的处理方法是:

# /etc/my.cnf.d/zabbix.cnf 或对应数据库配置 max_connections = 500

同时优化 Zabbix Server 配置:

StartPollers = 20 StartTrappers = 10 StartDBSyncers = 4 CacheSize = 128M HistoryCacheSize = 64M TrendCacheSize = 64M

注意不要盲目把 Poller 数调高,它受服务器 CPU 核数和数据库性能限制。先看zabbix_server.log里有没有 “server busy” 的信息,再逐步调整。对数据量大的场景,还要记得配置分区表、定期清理历史数据,或者直接考虑 TiDB 之类的大规模后端方案,但那是后话了。

6.4 SELinux 与防火墙策略对安装的影响

CentOS 7 默认是 SELinux 开启状态,在安装 Zabbix 时如果不处理,会遇到各种稀奇古怪的权限问题。比如能打开 Web 登录页,但一提交数据库配置就报权限错误;或者 Agent 能启动但 Server 收不到数据。我的建议分两档:

  • 非生产环境演示:直接setenforce 0,并在/etc/selinux/config里持久化设为 permissive。
  • 生产环境:保持 enforcing,但开启 Web 服务与外部网络交互的布尔值:
setsebool -P httpd_can_network_connect 1 setsebool -P httpd_can_connect_zabbix 1

防火墙除了前面提到的 10050,还要放行 Web 端口(80/443)和 Zabbix Server 的监听端口 10051。如果你用 Nginx,可能还要额外放行 8443 或自定义端口。每次放行后记得:

firewall-cmd --complete-reload

7. 几个实际部署中的进阶心得

安装部署只是开始,真正让 Zabbix 发挥价值,还需要一些“经验调优”。说说我这几年攒下来的几个个人习惯。

第一,一定要用好“主机组”。刚开始图省事把所有主机都放在 “Linux servers” 一个组里,结果告警动作、权限管理都变得无比混乱。按业务线、机房、环境维度划分主机组,后续配置模板、批量操作、用户授权都会顺畅很多。

第二,模板不是越多越好。有人为了“全面监控”,一台主机链接了十几个模板,数据采集爆发式增长,数据库压力变大,图表页面打开明显变慢。合理的方式是:基础资源模板(CPU、内存、磁盘、网络)+ 专属应用模板(如 Nginx、MySQL),按需添加。

第三,定期做“告警压测”。我会在每次调整完触发器或告警动作后,手动制造一次故障,比如把磁盘临时写满、停掉一个服务进程,验证通知链路是不是真的能通。不要等到生产事故发生时才发现邮件没发出来。

第四,备份策略不能忘。Zabbix 的配置和历史数据都在数据库里,我最开始以为备份了配置文件就万事大吉,直到一次数据库损坏,丢了大半年的历史报表。现在每周全量备份一次数据库,每日增量备份,备份文件同步到异地存储。重装一台 Zabbix 到恢复可用,两小时内必须完成。

最后再分享一个小技巧:Zabbix 6.0 的 API 非常强大,你可以用脚本调用 API 实现主机自动批量添加、模板批量绑定,甚至和自建的资产系统对接。我后来做了个简单的 CMDB 同步脚本,新机器上线后自动注册到 Zabbix,再也不用手动一台台加主机了。这个扩展方向很值得研究,能让 Zabbix 从“能用”变成“好用”。

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

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

立即咨询