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-toolsyum 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)。理由如下:

  1. Nginx vs Apache:Nginx在处理静态资源和高并发连接时性能更优,内存占用也更少,更适合作为监控系统的前端。
  2. MySQL 5.7:这是一个非常稳定且经过广泛验证的版本,完全满足Zabbix 6.0的需求。不必追求最新版,稳定压倒一切。
  3. 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设置中“安装扩展”来补充,但不如一开始就装好省事。

安装完成后,进入宝塔的“安全”菜单,放行服务器防火墙的1005010051端口。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,点击“设置”。

  1. 禁用函数:找到“禁用函数”列表,删除proc_open,proc_get_status,shell_exec这三个函数。Zabbix的前端在执行一些检查(如检查服务器状态)时会用到它们。如果不禁用,在“监控中” -> “队列”页面可能会看到报错。
  2. 配置修改:点击“配置修改”,找到php.ini文件,需要调整以下参数:
    max_execution_time = 300 # 执行脚本最大时间,防止导入数据时超时 post_max_size = 128M # POST数据最大尺寸,上传模板或镜像时需要 upload_max_filesize = 128M # 上传文件最大尺寸 memory_limit = 256M # 单个脚本可使用的内存 date.timezone = Asia/Shanghai # 设置时区,避免时间显示错误
    修改后记得重启PHP服务。
  3. 安装必选扩展:在PHP设置的“安装扩展”选项中,检查并确保以下扩展已安装:bcmath,gd,gettext,ldap,mbstring,mysqli,openssl,sockets,xml,zipgd库用于生成图形,如果没装,图表将无法显示。

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 install

4.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.conf
LogFile=/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/zabbix

4.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-serversystemctl 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)。

  1. 欢迎页面:检查所有前提条件是否都为“OK”。通常问题会出在PHP参数上,如果前面按照步骤调整了php.ini和禁用函数,这里应该全部通过。点击“Next step”。
  2. 数据库配置
    • Database type:MySQL
    • Database host:localhost
    • Database port:3306
    • Database name:zabbix(之前创建的数据库名)
    • User:zabbix
    • Password: 填入之前设置的数据库密码。
    • 点击“Test connection”测试连接,成功后再点“Next step”。
  3. 服务器详情
    • Host (Hostname or IP address):localhost127.0.0.1
    • Port:10051(Zabbix Server端口)
    • Name: 给你的Zabbix实例起个名字,如“公司生产监控”。
    • 点击“Next step”。
  4. 安装前总结:确认信息无误,点击“Next step”开始安装。
  5. 安装完成:页面会提示下载配置文件zabbix.conf.php你必须点击下载,并将这个文件上传到Zabbix Web目录的conf/子目录下(即/www/wwwroot/zabbix/conf/)。这是很多新手会卡住的地方,不传这个文件,下一步会报错。
  6. 完成安装:上传配置文件后,点击页面上的“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)”,保存即可。

接下来,进行基础检查,确保各个组件工作正常:

  1. 进入“监控中” -> “仪表板”。默认的“Zabbix服务器”主机应该已经被自动添加并开始收集数据了。等待几分钟,查看是否有数据更新。
  2. 进入“报表” -> “系统信息”。检查“Zabbix服务器是否运行”是否为“是”,并查看下方各组件(如Zabbix server、Zabbix java gateway等)的状态是否为“已运行”。
  3. 检查“监控中” -> “最新数据”,过滤主机为“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界面。

  1. 进入“配置” -> “主机”,点击“创建主机”。
  2. 主机选项卡:
    • 主机名称:填写与Agent配置文件中一致的Hostname,即Linux-Web-Server-01
    • 可见的名称:可以填一个更易读的名字,如“生产Web服务器-01”。
    • 群组:选择一个组,例如“Linux servers”。可以点击“新建”创建新组。
    • Interfaces:点击“添加”,选择“Agent”,填写被监控主机的IP地址,端口10050
  3. 模板选项卡:这是Zabbix自动化的精髓。点击“添加”,搜索并选择“Linux by Zabbix agent 2”模板,然后点击“添加”。这个模板包含了监控Linux系统所需的几乎所有监控项、触发器和图形。
  4. 加密选项卡:如果Server和Agent之间没有配置加密,可以保持默认。
  5. 点击“添加”完成主机创建。

稍等片刻(Zabbix Agent有主动和被动检查,默认配置下,几分钟内就会有数据),进入“监控中” -> “最新数据”,选择刚添加的主机,你应该能看到系统负载、CPU、内存、磁盘空间、网络流量等数据正在被收集。

6.3 配置邮件告警

监控数据有了,下一步是当出现问题时能及时通知我们。这里以配置最常用的邮件告警为例。

  1. 创建报警媒介类型

    • 进入“管理” -> “报警媒介类型”,点击“创建媒体类型”。
    • 名称: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邮箱等都需要在设置中生成专用授权码)。
    • 点击“添加”测试邮件发送,填写一个接收邮箱,测试是否能收到。测试成功后保存。
  2. 为用户配置报警媒介

    • 进入“管理” -> “用户”,点击用户“Admin”(或你使用的用户)。
    • 切换到“报警媒介”选项卡,点击“添加”。
    • 类型:选择刚创建的“Email (SMTP)”。
    • 收件人:填写接收告警的邮箱地址,如your-email@example.com
    • 其他选项如“当启用时”、“启用”等保持默认。
    • 点击“添加”,然后“更新”用户。
  3. 配置触发器与动作

    • 触发器(Trigger)定义了“什么问题”。模板“Linux by Zabbix agent 2”已经预置了很多触发器,例如“CPU负载过高”、“磁盘空间不足”等。你可以直接使用,也可以在“配置”->“主机”->“触发器”里查看和修改。
    • 动作(Action)定义了“发生问题后做什么”。进入“配置” -> “动作”,事件源选择“触发器”。系统已经有一个“Report problems to Zabbix administrators”的默认动作。我们可以编辑它或新建一个。
    • 在动作的“操作”选项卡,可以定义具体的步骤,例如:
      • 步骤1 (持续0秒):发送消息给“Admin”用户,通过“Email (SMTP)”媒介。
      • 恢复操作:勾选,当问题恢复时也发送恢复消息。
    • 在“条件”选项卡,可以设置动作触发的条件,例如“触发器名称包含”、“主机群组属于”等,以过滤哪些告警需要发邮件。

配置完成后,你可以手动制造一个告警来测试,例如在被监控主机上创建一个占满磁盘空间的大文件,很快你就会收到Zabbix发来的告警邮件。

7. 生产环境进阶优化与故障排查

系统跑起来只是开始,要让它稳定、高效地服务于生产环境,还需要进行一系列优化,并知道如何排查常见问题。

7.1 性能调优与日常维护

随着监控项增多,Zabbix Server对数据库和自身配置的压力会增大。

  1. 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使用情况,逐步增加。

  2. MySQL分区表:Zabbix的历史(history)和趋势(trends)表会随时间爆炸式增长。强烈建议启用表分区,按天或按月自动删除旧数据。Zabbix自带了一个开箱即用的分区维护脚本zabbix-6.0-lts/create.sqls/partitioning.sql,你可以参考它,或使用社区维护的自动化分区工具(如zabbix-mysql-partitioning脚本)。

  3. Housekeeper设置:Zabbix内置的“管家”,用于定期清理旧数据。进入“管理” -> “一般” -> “管家”,可以设置历史数据和趋势数据的保留时长。注意:如果数据量极大,Housekeeper在清理时可能会锁表,影响性能。更推荐使用上述的分区表方案,直接DROP旧分区,效率极高。

  4. 监控Zabbix自身:别忘了把Zabbix Server和MySQL也作为主机监控起来,为其添加“Zabbix server”和“MySQL by Zabbix agent 2”模板,监控其队列、缓存命中率、数据库连接数等关键指标。

7.2 常见故障排查指南

即使按照教程一步步来,也可能会遇到问题。以下是几个最常见的问题及排查思路:

  1. 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进程监听。
  2. 主机显示“ZBX”,状态为“不支持”

    • 检查网络连通性:在Zabbix Server上尝试telnet <被监控主机IP> 10050,看端口是否通。
    • 检查Agent配置:确认被监控主机上/etc/zabbix/zabbix_agent2.conf中的ServerServerActive指向了正确的Zabbix Server IP,且Hostname与Web界面中添加的主机名完全一致(区分大小写)。
    • 检查防火墙:确认被监控主机的防火墙(firewalld/iptables)已放行10050端口。
    • 查看Agent日志:在被监控主机上查看/var/log/zabbix/zabbix_agent2.log,看是否有错误信息。
  3. 图表没有数据或显示“No data”

    • 检查监控项:进入“配置”->“主机”->“监控项”,找到对应的监控项,查看其“状态”是否为“已启用”,最后检查时间是否更新。
    • 检查触发器:有时触发器表达式配置错误,会导致数据被忽略。
    • 检查数据采集类型:确认是Zabbix Agent主动式还是被动式。在监控项配置中查看“类型”。被动式需要Server去拉取,主动式由Agent上报。确保两边的配置模式匹配。
  4. 前端页面访问缓慢或报错

    • 检查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配置。

这套“CentOS 7 + 宝塔 + Zabbix 6.0”的方案,我已在多个从零开始的环境和迁移项目中验证过。它的最大优势在于,用宝塔化解了环境部署的复杂性,让使用者能更专注于Zabbix本身的配置和监控逻辑。对于中小团队,这足以支撑起一个相当规模的监控体系。关键在于,上线后不要设完就忘,定期查看系统信息、优化数据库、根据业务增长调整配置,才能让这套系统长久稳定地为你服务。