☰
CentOS 7部署Zabbix监控平台:从环境准备到自定义告警的完整指南
2026/9/29 5:54:31 网站建设 项目流程

把第一台被监控主机接进Zabbix的时候,我才真正意识到一个问题:网络工程做完,不是以“能ping通”为终点。链路通了,设备CPU动不动飙到90%你未必知道;磁盘写满了,HTTP服务明明挂了,端口却可能还活着;关键业务进程半夜退出,等到第二天用户投诉才发现。Zabbix这种监控平台就是用来填这些盲区的。它能把服务器、网络设备、虚拟机、中间件的运行状态全部收进一套系统里,历史数据、实时告警、可视化大屏一次搞定。这篇内容围绕CentOS 7上的Zabbix安装部署来写,全程保姆级操作,从环境准备、Server端搭建、数据库初始化、Web向导设置中文,到接入第一台被监控主机、自定义监控项和触发器,尽量做到每一步都能照着敲、照着点,不走弯路。

1. Zabbix到底在监控什么:先看网工的现实需求

1.1 网络层通了,不等于业务层健康

做网络工程的兄弟应该都有过这种经历:用户报“网站打不开”,你跑过去telnet一下地址和端口,发现80端口是通的,于是判断“网络没问题”。但在运维监控的视角里,这个判断过于乐观了。端口通只能说明TCP握手能建立,nginx进程是不是真的在工作、后端接口是不是在超时、磁盘剩余空间是不是已经见底,这些都不是一次端口探测能看出来的。

Zabbix解决的就是这个层面的问题。它通过在被监控主机上安装agent,周期性地采集CPU使用率、内存剩余量、磁盘占用、系统负载、进程数量、端口状态等数据,再统一交给Zabbix Server处理。Server把数据写进数据库,Web前端再从数据库里把数据读出来展示成图表和告警。所以看到的不再是一个冷冰冰的“通或不通”,而是一条完整的性能曲线,是某个时间点前后系统到底发生了什么变化。

Zabbix能监控的东西也远远不止Linux服务器。常见的交换机、路由器只要支持SNMP协议,就能被Zabbix纳管;Windows主机、VMware虚拟机、数据库、中间件、Docker容器这些也都有对应的采集方式。尤其是做网络工程的朋友,如果项目里涉及到一整套机房环境,用Zabbix把服务器和网络设备统一纳管,比手动写脚本、人工巡检要靠谱得多。

1.2 为什么选Zabbix而不是Prometheus、Cacti

很多刚开始接触监控的同学会问:现在Prometheus不是挺火吗,为什么还要学Zabbix?

我个人的答案很简单:场景不一样。Prometheus是一套面向云原生、容器和微服务场景设计的监控体系,它的数据模型、服务发现机制在Kubernetes环境下确实很顺手,但如果回到传统机房、一堆物理服务器和网络设备,Zabbix的开箱模板和经验积累反而更实在。Cacti我也用过,画流量图很漂亮,但配置相对古老,告警能力和模板生态不如Zabbix成熟。

从学习成本来看,Zabbix的体系是“Agent采集 + Server处理 + Web展示”,概念并不复杂。更关键的是,它的官方文档和社区资料非常多,遇到问题基本都能搜到答案。对网络工程专业的毕业设计、实验环境搭建,或者中小型机房的运维场景来说,Zabbix是一个性价比很高的选择。

监控平台擅长场景上手难度网络设备支持
Zabbix传统服务器、虚拟机、SNMP网络设备中等很成熟
Prometheus容器、云原生、微服务中等偏上一般,需exporter配合
Cacti流量图、历史曲线简单较好,但告警偏弱

2. CentOS 7环境准备:装之前先把这些坑填了

2.1 系统安装阶段的三个建议

CentOS 7的系统安装本身不复杂,但为了后面Zabbix跑得稳,有几点值得在装系统阶段就注意。

第一,选最小化安装,不要装图形界面。Zabbix的Web界面是通过浏览器访问的,服务器端不需要桌面环境。少装一个GNOME或者KDE,能省下大量磁盘和内存,也让系统更干净、更不容易出问题。

第二,磁盘分区尽量给数据库预留空间。Zabbix所有的历史数据、趋势数据都存放在数据库里,时间越长数据越大。如果是在虚拟机上做实验,默认分区没问题;但如果后续要长期使用,建议把/var/lib/mysql单独挂一个分区,容量给足,避免后面磁盘满了再折腾。

第三,网络要配置成静态IP。实验环境里如果DHCP分配的地址变了,Web访问和Agent连接都会跟着出问题。安装时直接写死IP、掩码、网关和DNS,后面省心很多。虚拟机的网络模式建议用桥接或者NAT都行,只要保证宿主机和虚拟机之间能互相访问。

2.2 防火墙、SELinux和时区:三个最容易忽略的拦路虎

CentOS 7默认开启了firewalld和SELinux,这两兄弟会在Zabbix安装过程中制造各种莫名其妙的障碍。比如Zabbix Server启动后监听10051端口,结果防火墙没放行,Web端根本连不上;SELinux如果处于enforcing状态,PHP可能无法正常写session文件,前端页面会出现各种权限报错。

实验环境里我建议直接关闭防火墙和SELinux,操作也很简单:

systemctl stop firewalld systemctl disable firewalld sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config setenforce 0

关闭SELinux后可以用getenforce确认当前状态,显示Permissive或Disabled就对了。这里多说一句:生产环境不建议这样简单粗暴地关掉,而是应该按最小权限原则放行对应端口和策略;但如果是学习、实验和内部测试,关闭防火墙和SELinux能排除掉大量干扰项,让你更专注于Zabbix本身。

时区问题也容易被忽略。如果服务器时区不是Asia/Shanghai,后面Zabbix图形上的时间会差8个小时,排查起来还以为数据有问题。顺手统一设置一下:

timedatectl set-timezone Asia/Shanghai

2.3 添加Zabbix官方软件源和MariaDB软件源

CentOS 7默认的yum源里没有Zabbix,所以第一步要把Zabbix官方的软件源装进去。这里以Zabbix 6.0 LTS为例,版本比较新、支持周期长,网上资料也多。

rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm yum clean all

数据库方面,CentOS 7自带的是MariaDB 5.5,这个版本跑Zabbix 6.0会比较吃力,所以我更推荐直接装MariaDB 10.5。用阿里云的镜像源来装,速度相对有保障:

cat > /etc/yum.repos.d/mariadb.repo <<'EOF' [mariadb] name=mariadb baseurl=https://mirrors.aliyun.com/mariadb/yum/10.5/centos7-amd64 gpgcheck=0 EOF yum install -y MariaDB-server MariaDB-client

这里解释一下为什么不用系统自带的mariadb。Zabbix 6.0官方对数据库版本有要求,MySQL 5.5这种老版本在字符集、SQL模式和一些查询语法上容易出兼容问题。我们装Zabbix是想让它稳定跑起来,不是给自己埋雷。用10.5版本,兼容性就没什么好担心的了。

3. 安装Zabbix Server和数据库:核心组件的完整落地

3.1 组件在系统里的对应关系

Zabbix整套系统不是单个软件包,而是由几个组件配合工作的。安装的时候不建议凭感觉乱装,先把它们的角色理清楚:

组件作用对应软件包
Zabbix Server核心服务,负责数据采集调度、告警判断zabbix-server-mysql
数据库存储配置、历史数据、趋势数据MariaDB Server
Web前端浏览器访问的可视化界面zabbix-web-mysql
Zabbix Agent部署在被监控主机上,采集本机数据zabbix-agent
初始数据脚本创建Zabbix所需的表结构和预置模板zabbix-sql-scripts

上一节我们已经添加了Zabbix软件源,接下来直接安装这些组件:

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

这个安装过程会自动把httpd、PHP以及相关扩展一并装好。装完之后可以先看一下/etc/httpd/conf.d/zabbix.conf和/usr/share/zabbix目录,确认Web前端文件已经就位。

3.2 安装MariaDB并完成基本安全初始化

MariaDB装好后,先启动服务并设置开机自启:

systemctl start mariadb systemctl enable mariadb

接下来执行mysql_secure_installation做安全初始化。这是一个交互式命令,会一步步问你是否设置root密码、删除匿名用户、禁止root远程登录、删除test数据库等。实际操作时这样填:

  • Enter current password for root:直接回车,初始密码为空
  • Switch to unix_socket authentication:选n
  • Change the root password:选y,然后输入两遍你想设置的数据库root密码
  • Remove anonymous users:选y
  • Disallow root login remotely:选y
  • Remove test database and access to it:选y
  • Reload privilege tables now:选y

安全初始化做完,数据库的root密码就设置好了,后面登录数据库都要用这个密码,建议找个地方记好。

3.3 创建Zabbix数据库和专用账号

接下来用root登录数据库,创建一个名为zabbix的数据库和一个专用账号。这里不要直接用root账号去跑Zabbix应用,权限太大了,分开管理更安全。

mysql -uroot -p

进入MySQL命令行后执行:

create database zabbix character set utf8mb4 collate utf8mb4_bin; create user 'zabbix'@'localhost' identified by 'Zabbix@123'; grant all privileges on zabbix.* to 'zabbix'@'localhost'; flush privileges; quit;

密码Zabbix@123只是示例,实际使用建议换一个强度够的密码。用utf8mb4字符集是为了让中文数据存进去不乱码,这个细节在后面的中文界面设置里很重要。

3.4 导入Zabbix初始数据

数据库和账号创建好之后,要把Zabbix自带的初始数据导入到zabbix库里。这些数据里包括所有预置模板、用户权限、默认监控项、图形配置等,不导入的话,Web界面进去基本是空壳。

zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p'Zabbix@123' zabbix

执行过程中如果没有任何报错输出,就说明导入成功了。导入时间根据机器性能不同,一般几十秒到几分钟都有可能。导入完成后可以用mysql -uzabbix -p'Zabbix@123' -e "use zabbix; show tables;"确认一下,如果能看到几十张表,就说明数据进去了。

3.5 配置Server端并启动

Zabbix Server的配置文件是/etc/zabbix/zabbix_server.conf,默认监听端口10051。我们需要告诉它数据库的密码,否则Server连不上数据库,启动也会失败。

用vim打开配置文件:

vim /etc/zabbix/zabbix_server.conf

找到# DBPassword=这一行,取消注释并填上刚才设置的数据库密码:

DBPassword=Zabbix@123

如果数据库不在本机,还需要改DBHost;像我们这样数据库和Server装在同一台机器上,默认的localhost就行。保存退出后启动服务:

systemctl restart zabbix-server systemctl enable zabbix-server

启动后可以看一下日志确认没有报错:

tail -f /var/log/zabbix/zabbix_server.log

看到类似server #0 started [main process]的输出,说明Server已经正常工作了。

3.6 PHP与httpd的时区调整

Zabbix Web前端跑在Apache上,PHP默认的时区不是上海时间,如果不改,后面图形和告警时间都会偏。用vim编辑/etc/httpd/conf.d/zabbix.conf:

vim /etc/httpd/conf.d/zabbix.conf

文件里有几行被注释掉的PHP配置,找到php_value date.timezone Europe/Riga,把前面的#去掉,并将时区改成Asia/Shanghai:

php_value date.timezone Asia/Shanghai

保存后重启httpd和php-fpm,让配置生效:

systemctl restart httpd php-fpm

如果你的环境里没有php-fpm这个服务,说明走的是mod_php方式,只重启httpd即可,不影响结果。

4. Web安装向导与中文界面:保姆级就是这一步不让你卡住

4.1 浏览器进入安装向导

在宿主机浏览器里输入http://你的CentOS7服务器IP/zabbix,就能看到Zabbix的Web安装向导。第一次进入时第一步是欢迎页和语言选择,这里就可以直接选“简体中文”,后面的向导会以中文显示,这是一开始设置中文最简单的机会。

整个安装向导一共分为六步,分别是:语言选择、PHP前置检查、数据库连接、Zabbix服务器详情、配置摘要、安装完成。正常情况下,只要前面的组件安装没有漏,前置检查那一步所有项目都会是OK。

4.2 数据库连接页面容易踩的坑

安装向导走到数据库连接这一步,需要填写的信息如下:

  • 数据库类型:MySQL
  • 数据库主机:localhost
  • 数据库端口:0(表示使用默认端口3306)
  • 数据库名称:zabbix
  • 数据库用户:zabbix
  • 数据库密码:你设置的数据库密码,示例里是Zabbix@123

这里最常见的问题是“无法连接数据库”。遇到这种情况,先检查MariaDB服务是否在运行,然后确认zabbix用户是不是localhost,再看密码有没有填对。注意在向导里数据库主机不要填成127.0.0.1再加空格,这种低级错误排查起来很浪费时间。

填写正确后点击下一步,Zabbix会连接数据库并写入初始配置,整个过程很快。

4.3 登录后把界面切到简体中文

安装完成后,向导会提示用默认账号登录:用户名Admin,密码zabbix。第一次登录系统会提醒你修改密码,建议顺手改掉。

默认登录后界面可能是英文的。点击右上角的用户头像或者“Admin”字样,进入“用户设置”,在“Language”下拉框里选择“简体中文 (zh_CN)”,然后保存。界面会立刻切换成中文,菜单、提示、图形标题都会变成中文。

如果你在安装向导第一步就已经选了简体中文,登录后通常直接就是中文界面,这一节的内容可以跳过。但有一些海外模板或者自定义仪表盘里的名称仍然是英文,那是模板本身的问题,和界面语言无关。

4.4 中文界面字形显示成方块的根治

中文界面切好后,有一个问题马上就会暴露出来:监控图形里的中文标题、图例全部显示成方块或者乱码。原因很简单,Zabbix默认的绘图字体是DejaVuSans,这套字体里根本没有中文字形,图形渲染的时候找不到对应字符,就画成了方块。

解决办法是给Zabbix换一个中文字体。首选开源字体文泉驿微米黑,直接yum安装:

yum install -y wqy-microhei-fonts

字体装好后,找到字体文件的位置:

find /usr/share/fonts -name '*wqy*'

然后备份Zabbix默认的字体文件,再把中文字体覆盖过去:

mv /usr/share/zabbix/assets/fonts/DejaVuSans.ttf /usr/share/zabbix/assets/fonts/DejaVuSans.ttf.bak cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/zabbix/assets/fonts/DejaVuSans.ttf

操作完成后,重启httpd和php-fpm,再回到Zabbix刷新监控图形页面,中文就能正常显示了。一些教程里会教你去改defines.inc.php里的ZBX_FONT_NAME,原理是一样的,但需要额外注意字体文件后缀的问题,对新手来说直接用覆盖法反而最省事。

5. 添加第一台被监控主机:Agent端安装与接入

5.1 Agent安装和三项关键配置

Zabbix Server安装时已经顺带装了zabbix-agent,我们可以先把本机接入监控,用最直观的方式跑通整个“采集-入库-展示”链路。

编辑agent配置文件/etc/zabbix/zabbix_agentd.conf:

vim /etc/zabbix/zabbix_agentd.conf

核心配置有以下三项:

  • Server=127.0.0.1:允许哪些Zabbix Server来被动拉取数据。这里填Server的IP,本机就填127.0.0.1,也可以填完整IP。
  • ServerActive=127.0.0.1:Agent主动向哪个Server上报数据。同样是Server的IP。
  • Hostname=zabbix-server:Agent的主机名。这个必须在Zabbix Web端添加主机时保持一致,否则数据对不上。

保存后启动agent:

systemctl restart zabbix-agent systemctl enable zabbix-agent

如果你要监控另一台独立主机,流程也很简单:在那台机器上先安装Zabbix官方源,再yum install -y zabbix-agent,然后同样修改这三项配置,重启服务。有一点要注意,生产环境中如果开启了防火墙,被监控主机的10050端口需要在防火墙里放行,否则Server连不上Agent。

5.2 Web界面添加主机和模板

回到Zabbix Web界面,点击左侧菜单“配置”下的“主机”,然后点击右上角“创建主机”。这里有几个关键字段:

  • “主机名称”填zabbix-server,这是主机的技术名称,agent配置文件里的Hostname必须和它一致。
  • “可见名称”可以填Zabbix Server或者任意中文名称,这个只是显示用的,不影响数据匹配。
  • “模板”区域搜索Linux by Zabbix agent,点添加。这个模板自带了一套完整的Linux监控项,包括CPU、内存、磁盘、网络、系统负载等,接入后立刻就有数据。
  • “接口”区域点击“添加”,类型选“Agent”,IP地址填127.0.0.1(如果监控其他主机就填对方的IP),端口保持10050。

填写完成后点“添加”保存。回到主机列表,会看到新主机那一行有一个灰色的ZBX图标。稍等几十秒,如果Agent和Server通信正常,图标会变成绿色,代表可用性检查通过。

5.3 验证监控数据真的进来了

主机状态变绿只是第一步,还要确认数据确实在往里进。点击主机名进入详情页,切到“监控项”页签,能看到模板自动带进来的几十个监控项,每个监控项都有最新的值和更新时间。

想看更直观的效果,点击左侧“监测”下的“最新数据”,在主机筛选里选择刚才添加的主机,就能看到CPU使用率、内存剩余、磁盘空间这些实时值在持续刷新。到这里,一条完整的监控链路就走通了。

6. 自定义监控项与触发器:从“能看到”到“能报警”

6.1 用proc.num监控进程数

模板自带的监控项能满足大部分基础需求,但实际环境里总有一些业务进程需要单独盯。Zabbix内置了一个非常实用的键proc.num,用来统计指定名称的进程数量,格式是proc.num[进程名]。

比如我们要监控nginx进程是否存在,就在“配置 -> 主机 -> 监控项”里点“创建监控项”:

  • 名称:Nginx进程数
  • 类型:Zabbix agent
  • 键值:proc.num[nginx]
  • 信息类型:数字(无正负)
  • 更新间隔:30s

这个监控项的返回结果就是一个整数,表示当前系统里匹配“nginx”的进程数量。如果nginx没启动,值就是0。

6.2 用触发器在进程挂掉时产生告警

监控项只是把数据采回来,真正产生告警要靠触发器。触发器的作用是:当某个监控项的数值满足一定条件时,把主机状态从“正常”变成“问题”。

在“配置 -> 主机 -> 触发器”里点“创建触发器”,关键配置如下:

  • 名称:Nginx进程数量异常
  • 严重性:选择“严重”或“警告”
  • 表达式:last(/zabbix-server/proc.num[nginx])<1

表达式里的/zabbix-server/是主机技术名,后面跟的是监控项的键值,<1表示进程数小于1。这样只要nginx进程没了,触发器就会立刻置为“问题”状态。

保存后可以测试一下:启动nginx服务,触发器状态是OK;执行pkill nginx杀掉进程,等一个监控周期,回到“监测 -> 问题”,就能看到这条告警出现了。

6.3 监控一台Nginx服务的完整小演练

把前面几节的步骤串起来,可以在同一台机器上做一个小演练。

先在CentOS 7上安装nginx:

yum install -y nginx systemctl start nginx

确认进程已经跑起来,然后添加proc.num[nginx]监控项,再创建触发器。之后打开“监测 -> 图形”,选择这台主机和“Nginx进程数”监控项,能看到一条稳定的进程数量曲线。最后模拟故障:pkill nginx,过几十秒再刷新图形和问题页,就会看到曲线掉到0,触发器变成“问题”。重新systemctl start nginx,数据恢复,触发器也会自动回到OK。

这一步做完,你对Zabbix的核心工作机制——采集、存储、展示、告警——就有了很完整的认识。后面再接触更复杂的自定义脚本监控项、报警通知,都是在这个骨架上扩展的。

7. 我从部署到现在踩过的坑:报错排查速查

7.1 常见报错与处理对照表

Zabbix部署过程中,新手最容易被几个相似的报错卡住。我把实际操作中遇到过的典型问题和解决办法整理成一张表,排查时可以对照着看。

报错或现象可能原因处理办法
Web前置检查PHP版本过低Zabbix 6.0要求PHP 7.2以上确认Zabbix官方repo的依赖正确安装,不要用系统自带老版本PHP
Cannot connect to the databaseMariaDB未启动、密码错误、zabbix用户不存在检查systemctl status mariadb,用mysql命令手动登录验证
Timeout while connecting to the agentAgent未启动、防火墙挡了10050端口、Server配置错误在Server上执行telnet 被监控IP 10050测试连通性
Get value from agent failedAgent的Hostname和Web端主机名不一致对比/etc/zabbix/zabbix_agentd.conf的Hostname和主机配置
图形中文显示方块缺少中文字体参考第4.4节,安装文泉驿微米黑并覆盖默认字体
图形时间差8小时PHP时区未设置修改/etc/httpd/conf.d/zabbix.conf中的date.timezone为Asia/Shanghai
zabbix_server日志报数据库连接错误DBPassword配置错误或数据库权限不对修改/etc/zabbix/zabbix_server.conf并重启服务
httpd启动失败,端口被占用80端口被其他服务占用用`netstat -tlnp

7.2 三个值得养成的运维小习惯

最后分享三个我实际干活时逐渐养成的习惯,它们能让Zabbix的维护轻松很多。

第一,改任何配置文件之前先备份。Zabbix涉及的配置文件不止一个,zabbix_server.conf、zabbix_agentd.conf、zabbix.conf、defines.inc.php,哪个改动出问题都可能让服务起不来。我习惯每次编辑前执行cp 文件名 文件名.bak,改坏了能立刻回退。

第二,遇到问题先看日志,不要凭感觉反复重启服务。Zabbix服务器端日志在/var/log/zabbix/zabbix_server.log,agent日志在/var/log/zabbix/zabbix_agentd.log,Web报错看/var/log/httpd/error_log。日志里每一行都有时间戳和具体报错内容,照着日志排查比瞎试效率高得多。

第三,装完一套环境后,把服务自启和端口监听状态都确认一遍。systemctl list-dependencies能看到服务的依赖关系,netstat -tlnp可以确认10051、10050、80、3306这几个关键端口是否都在正常监听。端口没起来,后面Connection问题会接踵而至。

Zabbix这套东西,第一次装可能会被各种小问题缠住,但只要完整跑通一遍,后面的运维和二次开发都会顺手很多。

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

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

立即咨询