CentOS 7 宝塔面板部署 Zabbix 6.0 企业级监控系统实战指南
1. 项目背景与核心价值
最近在帮一个朋友的公司搭建一套监控系统,他们之前用的是几台老旧的服务器,运维全靠人工盯着,经常是业务挂了半小时才有人发现。老板下了死命令,必须上自动化监控。在对比了Nagios、Prometheus和Zabbix之后,我们最终选择了Zabbix 6.0 LTS版本。原因很简单,Zabbix的“开箱即用”特性非常强,自带的模板和自动发现功能,对于没有专职运维团队的中小企业来说,能省下大量的配置时间。而且它的告警机制非常灵活,能通过邮件、微信、钉钉等多种方式触达,符合国内的使用习惯。
不过,传统的Zabbix安装涉及到LNMP环境编译、数据库初始化、源码编译等一系列操作,步骤繁琐,对新手极不友好,任何一个环节出错都可能导致前功尽弃。这时候,宝塔面板的优势就体现出来了。它把复杂的Web服务、数据库、PHP环境的管理变成了可视化的点击操作,极大地降低了运维门槛。所以,这次我决定采用“CentOS 7 + 宝塔面板”这套组合拳来部署Zabbix 6.0。这不仅仅是一个安装教程,更是一套为追求稳定、高效且希望简化运维流程的团队量身定制的实战方案。无论你是刚入行的运维新人,还是需要快速为项目搭建监控平台的开发者,跟着这篇教程走,都能在半小时内搭建起一个功能完备的企业级监控系统。
2. 环境准备与宝塔面板初始化
在开始安装Zabbix之前,我们必须确保基础环境是干净、稳定且配置正确的。很多安装失败的问题,根源都出在环境准备阶段。
2.1 操作系统与基础配置
我们选择CentOS 7.9 Minimal版本作为操作系统。选择Minimal版本是为了保证系统纯净,没有不必要的软件包,减少潜在冲突和安全风险。在安装系统时,有几点需要特别注意:
第一,网络配置。建议在安装时就配置好静态IP,避免后续因IP变动导致的服务访问问题。你可以通过编辑/etc/sysconfig/network-scripts/ifcfg-ens33(网卡名可能不同)文件来设置。
BOOTPROTO=static ONBOOT=yes IPADDR=192.168.1.100 # 你的服务器IP NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8配置完成后,执行systemctl restart network重启网络服务。
第二,关闭SELinux和防火墙。在学习和测试环境,为了排除干扰,我们通常会暂时关闭它们。但请注意,在生产环境中,需要根据安全策略进行更精细的配置。
# 临时关闭SELinux setenforce 0 # 永久关闭(需重启生效) sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 停止并禁用firewalld systemctl stop firewalld systemctl disable firewalld第三,更新系统并安装基础工具。执行yum update -y更新所有包到最新版本,然后安装一些常用的工具,如wget,vim,net-tools:yum install -y wget vim net-tools。
2.2 宝塔面板的安装与核心配置
宝塔面板的安装非常简单,一行命令即可。但安装后的初始配置,才是决定我们后续工作是否顺畅的关键。
通过SSH连接到你的CentOS 7服务器,执行以下命令安装宝塔面板(以CentOS 7为例):
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh安装过程是交互式的,中途会询问你是否同意用户协议,输入y并回车即可。安装完成后,控制台会显示面板的访问地址、用户名和随机生成的密码,务必立即保存这些信息。
首次登录宝塔面板后,系统会弹出推荐安装套件的窗口。这里是我们遇到的第一个关键选择点。Zabbix 6.0对运行环境有明确要求:
- PHP版本要求 >= 7.4.0,且需要一些特定扩展。
- 数据库:MySQL 5.7或更高版本,或者MariaDB 10.5及以上。
- Web服务器:Nginx或Apache均可。
我个人的推荐配置是:LNMP(Nginx 1.20+, MySQL 5.7, PHP 7.4)。理由如下:
- Nginx vs Apache:Nginx在处理静态资源和高并发连接时性能更优,内存占用也更少,更适合作为监控系统的前端。
- MySQL 5.7:这是一个非常稳定且经过广泛验证的版本,完全满足Zabbix 6.0的需求。不必追求最新版,稳定压倒一切。
- PHP 7.4:这是Zabbix 6.0支持的最低PHP版本,也是一个长期支持版本。选择7.4而非8.0,是为了最大限度地保证兼容性,避免一些尚未被Zabbix官方完全适配的新特性导致问题。
在宝塔的软件商店中,选择“一键安装”LNMP套件,并指定上述版本。安装过程可能需要10-20分钟,请耐心等待。
注意:在PHP安装选项中,务必记得勾选Zabbix所需的扩展。虽然宝塔的PHP默认安装了一些常用扩展,但Zabbix必须的
bcmath,gd,gettext,ldap,mbstring,mysqli,openssl,sockets,xml,zip等,最好在安装时一并选中。如果安装时漏了,后续也可以在PHP设置中“安装扩展”来补充,但不如一开始就装好省事。
安装完成后,进入宝塔的“安全”菜单,放行服务器防火墙的10050和10051端口。10051是Zabbix Server的监听端口,10050是Zabbix Agent的端口。如果你打算监控本机,这两个端口都需要。
3. 数据库与PHP环境的专项调优
基础环境装好只是第一步,要让Zabbix跑得稳、性能好,必须对数据库和PHP进行针对性优化。很多教程会跳过这一步,导致安装后监控对象一多,Zabbix Server就卡死或前端报错。
3.1 为Zabbix创建专属数据库与用户
永远不要使用数据库的root用户来运行Zabbix。我们应该为其创建一个独立的数据库和专属用户,这是最基本的安全原则。
进入宝塔面板的“数据库”菜单,点击“添加数据库”。
- 数据库名:
zabbix(或你自定义的名称,但后续配置需一致)。 - 用户名:
zabbix。 - 密码:生成一个强密码并妥善保存。例如,可以使用宝塔的随机密码生成器。
- 权限:选择“所有权限”。
点击“提交”后,数据库就创建好了。但这里有一个隐藏的坑:宝塔面板创建的MySQL默认字符集可能是utf8,而Zabbix 6.0官方推荐使用utf8mb4字符集以支持完整的Unicode(如emoji表情)。虽然utf8在大多数情况下也能工作,但为了绝对兼容,我建议在创建后修改一下。 你可以通过宝塔的“phpMyAdmin”登录,找到刚创建的zabbix数据库,在“操作”选项卡中,将“排序规则”改为utf8mb4_general_ci。
3.2 PHP关键参数调整
Zabbix的前端是用PHP写的,一些默认的PHP配置可能无法满足其需求,会导致前端页面报错或功能异常。
进入宝塔的“软件商店”,找到已安装的PHP 7.4,点击“设置”。
- 禁用函数:找到“禁用函数”列表,删除
proc_open,proc_get_status,shell_exec这三个函数。Zabbix的前端在执行一些检查(如检查服务器状态)时会用到它们。如果不禁用,在“监控中” -> “队列”页面可能会看到报错。 - 配置修改:点击“配置修改”,找到
php.ini文件,需要调整以下参数:
修改后记得重启PHP服务。max_execution_time = 300 # 执行脚本最大时间,防止导入数据时超时 post_max_size = 128M # POST数据最大尺寸,上传模板或镜像时需要 upload_max_filesize = 128M # 上传文件最大尺寸 memory_limit = 256M # 单个脚本可使用的内存 date.timezone = Asia/Shanghai # 设置时区,避免时间显示错误 - 安装必选扩展:在PHP设置的“安装扩展”选项中,检查并确保以下扩展已安装:
bcmath,gd,gettext,ldap,mbstring,mysqli,openssl,sockets,xml,zip。gd库用于生成图形,如果没装,图表将无法显示。
3.3 MySQL性能初步调优
Zabbix的监控数据主要存储在MySQL中,随着时间推移,数据量会非常庞大。默认的MySQL配置在高负载下很快就会成为瓶颈。
进入宝塔的“软件商店”,找到MySQL 5.7,点击“设置”,然后选择“配置修改”。我们主要调整[mysqld]段下的参数:
[mysqld] # 基础设置 innodb_buffer_pool_size = 1G # 关键参数!设置为系统内存的50%-70%。如果服务器内存2G,可以设为1G。 max_connections = 500 # 最大连接数,默认偏低,适当调高。 # 针对Zabbix的优化 innodb_flush_log_at_trx_commit = 2 # 平衡性能与安全。设为2,每秒刷写日志,性能更好。生产环境若要求极高数据安全可设为1。 innodb_log_file_size = 256M # 增大日志文件大小,减少磁盘I/O。 character-set-server = utf8mb4 # 设置默认字符集 collation-server = utf8mb4_general_ci重要提示:
innodb_buffer_pool_size是MySQL最重要的性能调优参数,没有之一。它决定了InnoDB存储引擎可以缓存多少数据和索引在内存中。设置过小会导致大量磁盘I/O,Zabbix会变得奇慢无比。修改后需要重启MySQL才能生效。
4. Zabbix Server与Web前端的部署
环境调优完毕,现在进入核心的安装环节。我们将采用官方源码编译的方式安装,这样能获得最新的特性,并且与我们的自定义环境兼容性最好。
4.1 获取源码与编译安装
首先,通过SSH连接到服务器,切换到合适的目录,例如/usr/local/src。
cd /usr/local/src然后,下载Zabbix 6.0 LTS的源码包。你可以去Zabbix官网查看最新版本,这里以6.0.15为例。
wget https://cdn.zabbix.com/zabbix/sources/stable/6.0/zabbix-6.0.15.tar.gz解压并进入目录:
tar -zxvf zabbix-6.0.15.tar.gz cd zabbix-6.0.15在编译之前,需要安装一些编译依赖包。这一步很容易遗漏,导致configure脚本报错。
yum install -y gcc gcc-c++ make pcre-devel openssl-devel curl-devel net-snmp-devel libevent-devel OpenIPMI-devel libxml2-devel libssh2-devel现在,运行configure脚本进行配置。这里有几个关键参数:
--enable-server:编译Zabbix Server。--enable-agent:编译Zabbix Agent2(新版推荐)。--enable-proxy:如果你需要代理,可以加上。本例不涉及。--with-mysql:指定MySQL支持。--with-net-snmp:支持SNMP监控。--with-libcurl:支持Web监控等。--with-openssl:支持加密通信。--with-libxml2:支持XML解析。--prefix=/usr/local/zabbix:指定安装目录。
执行以下命令:
./configure --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-openssl --with-libxml2 --prefix=/usr/local/zabbix如果一切顺利,你会看到类似“Configuration is done”的提示。如果报错,通常是缺少某个开发包,请根据错误信息安装对应的-devel包。
接着,进行编译和安装。这个过程视服务器性能,可能需要几分钟。
make -j $(nproc) # 使用多核编译加速 make install4.2 导入初始数据库Schema
这是将Zabbix的程序和它的数据存储(MySQL)关联起来的关键一步。
首先,我们需要将Zabbix源码目录中的数据库脚本导入到之前创建的zabbix数据库中。脚本位于database/mysql目录下。
cd /usr/local/src/zabbix-6.0.15/database/mysql按顺序导入三个文件:
mysql -uzabbix -p zabbix < schema.sql mysql -uzabbix -p zabbix < images.sql mysql -uzabbix -p zabbix < data.sql系统会提示你输入之前为zabbix数据库用户设置的密码。
schema.sql:创建数据库表结构。images.sql:导入一些默认的图标图片。data.sql:导入初始配置数据,如用户、报警媒介类型等。
踩坑记录:务必按顺序导入!先
schema,再images,最后data。如果顺序错了,可能会因为外键约束导致导入失败。另外,如果数据量很大(比如从旧版本迁移),导入data.sql可能会很慢,耐心等待即可。
4.3 配置Zabbix Server与Agent
安装完成后,需要配置Zabbix Server和Agent的配置文件。配置文件模板位于源码目录的conf文件夹下,我们需要复制它们到安装目录或/etc下,并进行修改。
复制配置文件:
mkdir -p /etc/zabbix cp /usr/local/src/zabbix-6.0.15/conf/zabbix_server.conf /etc/zabbix/ cp /usr/local/src/zabbix-6.0.15/conf/zabbix_agent2.conf /etc/zabbix/编辑Zabbix Server配置文件/etc/zabbix/zabbix_server.conf,找到并修改以下关键参数:
vim /etc/zabbix/zabbix_server.confLogFile=/var/log/zabbix/zabbix_server.log # 日志文件位置 LogFileSize=0 # 0表示不限制单个日志文件大小,按需设置 PidFile=/var/run/zabbix/zabbix_server.pid SocketDir=/var/run/zabbix DBHost=localhost # 数据库地址 DBName=zabbix # 数据库名 DBUser=zabbix # 数据库用户 DBPassword=YourStrongPasswordHere # 填入之前设置的强密码 DBPort=3306 SNMPTrapperFile=/var/log/snmp_trap/snmptrap.log Timeout=4 AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts ExternalScripts=/usr/local/zabbix/share/zabbix/externalscripts LogSlowQueries=3000 # 记录执行超过3秒的SQL,用于性能排查重中之重:DBPassword一定要修改正确,这是最常见的连接失败原因。
接着,编辑Zabbix Agent2的配置文件/etc/zabbix/zabbix_agent2.conf:
Server=127.0.0.1 # 允许哪些Zabbix Server连接本Agent,127.0.0.1和ServerActive的IP都要加 ServerActive=127.0.0.1 # 主动模式下的Server地址 Hostname=Zabbix server # 本机在Zabbix中的主机名,后续在Web界面创建主机时要一致创建必要的目录并设置权限:
mkdir -p /var/log/zabbix /var/run/zabbix chown -R zabbix:zabbix /var/log/zabbix /var/run/zabbix注意,我们需要创建一个zabbix系统用户来运行服务:
groupadd --system zabbix useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix chown -R zabbix:zabbix /usr/local/zabbix4.4 配置Systemd服务与启动
为了方便管理,我们创建systemd服务单元文件。
创建Zabbix Server服务文件/usr/lib/systemd/system/zabbix-server.service:
[Unit] Description=Zabbix Server After=syslog.target network.target mysqld.service [Service] Type=simple User=zabbix Group=zabbix ExecStart=/usr/local/zabbix/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf ExecReload=/bin/kill -HUP $MAINPID KillMode=control-group Restart=on-failure RestartSec=10s [Install] WantedBy=multi-user.target创建Zabbix Agent2服务文件/usr/lib/systemd/system/zabbix-agent2.service:
[Unit] Description=Zabbix Agent 2 After=syslog.target network.target [Service] Type=simple User=zabbix Group=zabbix ExecStart=/usr/local/zabbix/sbin/zabbix_agent2 -c /etc/zabbix/zabbix_agent2.conf ExecReload=/bin/kill -HUP $MAINPID KillMode=control-group Restart=on-failure RestartSec=10s [Install] WantedBy=multi-user.target重新加载systemd配置,启动服务并设置开机自启:
systemctl daemon-reload systemctl start zabbix-server zabbix-agent2 systemctl enable zabbix-server zabbix-agent2使用systemctl status zabbix-server和systemctl status zabbix-agent2检查服务状态,确认均为“active (running)”。
5. 宝塔面板部署Zabbix Web前端
Zabbix Server在后台运行,我们需要通过Web界面来管理它。我们将利用宝塔面板来轻松部署这个前端。
5.1 创建站点与文件部署
登录宝塔面板,进入“网站”菜单,点击“添加站点”。
- 域名:如果你有域名,可以填写(如
zabbix.yourdomain.com)。如果只是内网测试,可以填写服务器的IP地址,或者创建一个本地hosts解析的域名(如zabbix.local)。这里强烈建议绑定一个域名或使用IP,不要用localhost,因为后续Agent可能要通过这个地址访问前端API。 - 根目录:选择一个路径,例如
/www/wwwroot/zabbix。 - FTP和数据库:都不创建,因为我们之前已经创建好了。
- PHP版本:选择我们之前安装并优化过的PHP 7.4。
点击“提交”创建站点。
接下来,将Zabbix前端的PHP文件复制到站点根目录。前端文件位于源码包的ui目录中。
cd /usr/local/src/zabbix-6.0.15 cp -r ui/* /www/wwwroot/zabbix/然后,需要修改目录权限,让Web服务器(通常是www用户)能够读写一些特定目录。
chown -R www:www /www/wwwroot/zabbix/ cd /www/wwwroot/zabbix chmod -R 755 conf/ # 确保conf目录可读 chmod 777 conf/ # 临时给conf目录写权限,安装向导需要写入配置文件注意:在生产环境中,安装完成后,务必把
conf/目录的权限改回755,并考虑将zabbix.conf.php文件移到Web目录之外,以提高安全性。
5.2 通过Web安装向导完成配置
现在,打开浏览器,访问你为Zabbix设置的站点地址(如http://你的服务器IP)。
- 欢迎页面:检查所有前提条件是否都为“OK”。通常问题会出在PHP参数上,如果前面按照步骤调整了
php.ini和禁用函数,这里应该全部通过。点击“Next step”。 - 数据库配置:
- Database type:
MySQL - Database host:
localhost - Database port:
3306 - Database name:
zabbix(之前创建的数据库名) - User:
zabbix - Password: 填入之前设置的数据库密码。
- 点击“Test connection”测试连接,成功后再点“Next step”。
- Database type:
- 服务器详情:
- Host (Hostname or IP address):
localhost或127.0.0.1 - Port:
10051(Zabbix Server端口) - Name: 给你的Zabbix实例起个名字,如“公司生产监控”。
- 点击“Next step”。
- Host (Hostname or IP address):
- 安装前总结:确认信息无误,点击“Next step”开始安装。
- 安装完成:页面会提示下载配置文件
zabbix.conf.php。你必须点击下载,并将这个文件上传到Zabbix Web目录的conf/子目录下(即/www/wwwroot/zabbix/conf/)。这是很多新手会卡住的地方,不传这个文件,下一步会报错。 - 完成安装:上传配置文件后,点击页面上的“Finish”按钮。如果一切正常,你将跳转到Zabbix的登录页面。默认用户名是
Admin,密码是zabbix。首次登录后,请立即修改Admin用户的密码!
5.3 配置中文界面与基础检查
登录后,你可能会发现界面是英文的。Zabbix 6.0默认不包含中文语言包,但我们可以手动添加。
首先,下载对应版本的中文语言包。可以在GitHub上搜索“zabbix-zh-cn”找到。例如,对于Zabbix 6.0.x,可以下载其release包。
cd /www/wwwroot/zabbix/ # 假设下载的zip包解压后得到一个`locale/zh_CN`目录 # 将中文语言包目录复制到Zabbix的locale目录下 cp -r /path/to/zh_CN ./locale/然后,以Admin用户登录Zabbix前端,点击右上角用户头像 -> “User settings” -> “Language”,选择“Chinese (zh_CN)”,保存即可。
接下来,进行基础检查,确保各个组件工作正常:
- 进入“监控中” -> “仪表板”。默认的“Zabbix服务器”主机应该已经被自动添加并开始收集数据了。等待几分钟,查看是否有数据更新。
- 进入“报表” -> “系统信息”。检查“Zabbix服务器是否运行”是否为“是”,并查看下方各组件(如Zabbix server、Zabbix java gateway等)的状态是否为“已运行”。
- 检查“监控中” -> “最新数据”,过滤主机为“Zabbix server”,应该能看到CPU、内存、磁盘、网络等监控项已经开始收集数据并有数值了。
6. 添加第一台被监控主机与告警配置
监控服务器自身只是开始,我们的目标是监控网络中的其他设备。这里以监控另一台Linux服务器为例。
6.1 在被监控主机安装Zabbix Agent2
在被监控的Linux服务器上(假设也是CentOS 7),安装Zabbix Agent2。步骤与在Server上安装Agent类似,但更简单,因为不需要编译。
添加Zabbix官方仓库并安装:
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 install -y zabbix-agent2 zabbix-agent2-plugin-*安装完成后,编辑Agent2的配置文件/etc/zabbix/zabbix_agent2.conf:
Server=192.168.1.100 # 允许连接的Zabbix Server IP ServerActive=192.168.1.100 # 主动模式下的Server IP Hostname=Linux-Web-Server-01 # 重要!这个主机名将在Zabbix Server中标识此主机启动并启用Agent2服务:
systemctl start zabbix-agent2 systemctl enable zabbix-agent2别忘了在被监控主机的防火墙放行10050端口。
6.2 在Zabbix Web中添加主机
回到Zabbix Server的Web界面。
- 进入“配置” -> “主机”,点击“创建主机”。
- 主机选项卡:
- 主机名称:填写与Agent配置文件中一致的
Hostname,即Linux-Web-Server-01。 - 可见的名称:可以填一个更易读的名字,如“生产Web服务器-01”。
- 群组:选择一个组,例如“Linux servers”。可以点击“新建”创建新组。
- Interfaces:点击“添加”,选择“Agent”,填写被监控主机的IP地址,端口
10050。
- 主机名称:填写与Agent配置文件中一致的
- 模板选项卡:这是Zabbix自动化的精髓。点击“添加”,搜索并选择“Linux by Zabbix agent 2”模板,然后点击“添加”。这个模板包含了监控Linux系统所需的几乎所有监控项、触发器和图形。
- 加密选项卡:如果Server和Agent之间没有配置加密,可以保持默认。
- 点击“添加”完成主机创建。
稍等片刻(Zabbix Agent有主动和被动检查,默认配置下,几分钟内就会有数据),进入“监控中” -> “最新数据”,选择刚添加的主机,你应该能看到系统负载、CPU、内存、磁盘空间、网络流量等数据正在被收集。
6.3 配置邮件告警
监控数据有了,下一步是当出现问题时能及时通知我们。这里以配置最常用的邮件告警为例。
创建报警媒介类型:
- 进入“管理” -> “报警媒介类型”,点击“创建媒体类型”。
- 名称:
Email (SMTP)。 - 类型:选择“电子邮件”。
- SMTP服务器:填写你的SMTP服务器地址,例如
smtp.qq.com(使用QQ邮箱)或smtp.exmail.qq.com(企业邮箱)。 - SMTP服务器端口:
465(SSL) 或587(TLS),具体看你的邮箱服务商要求。 - SMTP HELO:一般填你的域名或留空。
- SMTP电邮:填写发件人邮箱地址,如
monitor@yourdomain.com。 - 连接安全:选择“SSL/TLS”或“STARTTLS”。
- 身份验证:选择“用户名和密码”。
- 用户名称:发件邮箱完整地址。
- 密码:邮箱的SMTP授权码(注意,不是邮箱登录密码!QQ邮箱、163邮箱等都需要在设置中生成专用授权码)。
- 点击“添加”测试邮件发送,填写一个接收邮箱,测试是否能收到。测试成功后保存。
为用户配置报警媒介:
- 进入“管理” -> “用户”,点击用户“Admin”(或你使用的用户)。
- 切换到“报警媒介”选项卡,点击“添加”。
- 类型:选择刚创建的“Email (SMTP)”。
- 收件人:填写接收告警的邮箱地址,如
your-email@example.com。 - 其他选项如“当启用时”、“启用”等保持默认。
- 点击“添加”,然后“更新”用户。
配置触发器与动作:
- 触发器(Trigger)定义了“什么问题”。模板“Linux by Zabbix agent 2”已经预置了很多触发器,例如“CPU负载过高”、“磁盘空间不足”等。你可以直接使用,也可以在“配置”->“主机”->“触发器”里查看和修改。
- 动作(Action)定义了“发生问题后做什么”。进入“配置” -> “动作”,事件源选择“触发器”。系统已经有一个“Report problems to Zabbix administrators”的默认动作。我们可以编辑它或新建一个。
- 在动作的“操作”选项卡,可以定义具体的步骤,例如:
- 步骤1 (持续0秒):发送消息给“Admin”用户,通过“Email (SMTP)”媒介。
- 恢复操作:勾选,当问题恢复时也发送恢复消息。
- 在“条件”选项卡,可以设置动作触发的条件,例如“触发器名称包含”、“主机群组属于”等,以过滤哪些告警需要发邮件。
配置完成后,你可以手动制造一个告警来测试,例如在被监控主机上创建一个占满磁盘空间的大文件,很快你就会收到Zabbix发来的告警邮件。
7. 生产环境进阶优化与故障排查
系统跑起来只是开始,要让它稳定、高效地服务于生产环境,还需要进行一系列优化,并知道如何排查常见问题。
7.1 性能调优与日常维护
随着监控项增多,Zabbix Server对数据库和自身配置的压力会增大。
Zabbix Server配置调优(
/etc/zabbix/zabbix_server.conf):StartPollers=100 # 被动检查的工作进程数。监控项多(超过5000)可适当增加,如200。 StartPollersUnreachable=50 # 检查不可达主机的进程数。 StartTrappers=50 # 处理Agent主动上报、SNMP trap等的工作进程数。 StartPingers=50 # ICMP ping检查的进程数,如果大量主机用ICMP监控,需调高。 StartDiscoverers=10 # 网络发现进程数。 CacheSize=512M # 配置缓存大小,用于存储主机、监控项等元数据。内存充足可调大。 HistoryCacheSize=256M # 历史数据缓存大小。 TrendCacheSize=128M # 趋势数据缓存大小。修改后需重启Zabbix Server:
systemctl restart zabbix-server。调整参数的原则是观察服务器的内存和CPU使用情况,逐步增加。MySQL分区表:Zabbix的历史(
history)和趋势(trends)表会随时间爆炸式增长。强烈建议启用表分区,按天或按月自动删除旧数据。Zabbix自带了一个开箱即用的分区维护脚本zabbix-6.0-lts/create.sqls/partitioning.sql,你可以参考它,或使用社区维护的自动化分区工具(如zabbix-mysql-partitioning脚本)。Housekeeper设置:Zabbix内置的“管家”,用于定期清理旧数据。进入“管理” -> “一般” -> “管家”,可以设置历史数据和趋势数据的保留时长。注意:如果数据量极大,Housekeeper在清理时可能会锁表,影响性能。更推荐使用上述的分区表方案,直接
DROP旧分区,效率极高。监控Zabbix自身:别忘了把Zabbix Server和MySQL也作为主机监控起来,为其添加“Zabbix server”和“MySQL by Zabbix agent 2”模板,监控其队列、缓存命中率、数据库连接数等关键指标。
7.2 常见故障排查指南
即使按照教程一步步来,也可能会遇到问题。以下是几个最常见的问题及排查思路:
Zabbix Web界面提示“Zabbix server is not running”
- 检查服务状态:在服务器上执行
systemctl status zabbix-server,查看是否运行。如果未运行,查看日志/var/log/zabbix/zabbix_server.log。 - 检查数据库连接:日志中常见的错误是“Can‘t connect to MySQL server”。请确认
/etc/zabbix/zabbix_server.conf中的DBPassword是否正确,以及MySQL服务是否正常运行,且zabbix用户是否有远程或本地登录权限(grant all privileges on zabbix.* to 'zabbix'@'localhost' identified by 'password';)。 - 检查端口:执行
netstat -tlnp | grep 10051,看10051端口是否被zabbix_server进程监听。
- 检查服务状态:在服务器上执行
主机显示“ZBX”,状态为“不支持”
- 检查网络连通性:在Zabbix Server上尝试
telnet <被监控主机IP> 10050,看端口是否通。 - 检查Agent配置:确认被监控主机上
/etc/zabbix/zabbix_agent2.conf中的Server和ServerActive指向了正确的Zabbix Server IP,且Hostname与Web界面中添加的主机名完全一致(区分大小写)。 - 检查防火墙:确认被监控主机的防火墙(firewalld/iptables)已放行10050端口。
- 查看Agent日志:在被监控主机上查看
/var/log/zabbix/zabbix_agent2.log,看是否有错误信息。
- 检查网络连通性:在Zabbix Server上尝试
图表没有数据或显示“No data”
- 检查监控项:进入“配置”->“主机”->“监控项”,找到对应的监控项,查看其“状态”是否为“已启用”,最后检查时间是否更新。
- 检查触发器:有时触发器表达式配置错误,会导致数据被忽略。
- 检查数据采集类型:确认是Zabbix Agent主动式还是被动式。在监控项配置中查看“类型”。被动式需要Server去拉取,主动式由Agent上报。确保两边的配置模式匹配。
前端页面访问缓慢或报错
- 检查PHP-FPM资源:在宝塔面板查看PHP 7.4的运行状态,看是否达到最大子进程数(
pm.max_children)。如果并发访问多,可以适当调大这个值,并增加pm.start_servers,pm.min_spare_servers,pm.max_spare_servers。 - 检查数据库慢查询:在Zabbix的“报表”->“系统信息”页面,查看“数据库性能”部分。如果“每秒SQL查询数”很高且“平均查询时间”很长,说明数据库压力大。可以启用MySQL的慢查询日志(在宝塔MySQL设置中)进行分析,并考虑优化前述的Server配置和MySQL配置。
- 检查PHP-FPM资源:在宝塔面板查看PHP 7.4的运行状态,看是否达到最大子进程数(
这套“CentOS 7 + 宝塔 + Zabbix 6.0”的方案,我已在多个从零开始的环境和迁移项目中验证过。它的最大优势在于,用宝塔化解了环境部署的复杂性,让使用者能更专注于Zabbix本身的配置和监控逻辑。对于中小团队,这足以支撑起一个相当规模的监控体系。关键在于,上线后不要设完就忘,定期查看系统信息、优化数据库、根据业务增长调整配置,才能让这套系统长久稳定地为你服务。