Zabbix 部署与监控
一、Zabbix 概述
Zabbix 是一款企业级开源分布式监控解决方案,具备强大的 IT 资源监控能力,可全面覆盖网络参数(如带宽、延迟)、服务器硬件状态(CPU、内存、磁盘)、数据库运行指标(连接数、查询效率)及各类应用服务(Web、中间件等)。其提供灵活的告警机制、直观的数据可视化仪表盘与自定义报表功能,适配从小型工作室到大型企业的各类组织架构。该软件基于 GNU GPL v2 开源许可证,可免费商用,核心组件包含 Zabbix Server(核心调度与处理中心)、数据库存储(用于存储监控数据)、Web 管理界面(可视化操作入口)、Proxy(分布式监控代理,减轻服务端压力)和 Agent(部署在被监控端的数据采集组件);支持轮询(主动采集数据)与捕获(被动接收数据)两种核心数据收集方式,架构可根据监控规模灵活扩展。
二、环境准备
(一)服务器信息
| 主机名 | IP 地址 | 功能 |
|---|---|---|
| zabbix-server | 192.168.108.50 | 部署 Zabbix 服务端 |
| mysql001 | 192.168.108.51 | 作为被监控端(数据库服务器) |
(二)基础依赖
本次部署基于 LNMP 架构(Linux + Nginx + MariaDB + PHP),需提前安装对应组件及依赖包:Web 服务选用 Nginx(负责接收前端请求并转发给 PHP),数据库选用 MariaDB 10.6(存储 Zabbix 监控数据、配置信息等),后端脚本解析选用 PHP 7.2(支持 Zabbix 前端页面动态交互),同时需安装 php-mysqlnd、pcre-devel 等关联依赖包,确保各组件协同工作。
三、核心实验步骤
(一)服务端部署(zabbix-server 主机)
- 安装 Nginx
创建 yum 源:执行 vim /etc/yum.repos.d/nginx.repo命令新建 repo 文件,在文件中添加 nginx 官方源配置(可直接复制官方提供的 CentOS 系统源配置内容),保存退出后执行 yum clean all && yum makecache 刷新 yum 缓存,确保源配置生效。
- 安装并启动:
yum install nginx -y,systemctl start nginx,systemctl enable nginx。
防火墙配置:因 Zabbix 前端通过 HTTP 协议访问,需在防火墙中开放 HTTP 服务端口(80 端口),执行 firewall-cmd --add-service=http --zone=public --permanent 命令添加永久开放规则(--permanent 确保重启防火墙后规则不丢失),再执行 firewall-cmd --reload 重载防火墙使规则立即生效;若服务器已禁用防火墙,可跳过此步骤。
- 安装 MariaDB
配置 yum 源:执行 vim /etc/yum.repos.d/mariadb.repo 新建 repo 文件,添加阿里云提供的 MariaDB 10.6 源配置(阿里云源稳定性更高,适合国内环境),保存后执行 yum clean all && yum makecache 刷新缓存,避免因源问题导致安装失败。
- 安装并启动:
yum install mariadb-server mariadb -y,systemctl enable mariadb --now。
初始化数据库:执行 mysql -u root 登录 MariaDB(默认无密码),先执行 DELETE FROM mysql.user WHERE user=''; 删除空用户(提升数据库安全性),再执行 SET PASSWORD FOR root@localhost = PASSWORD('root123'); 设置 root 密码为 root123,最后执行 FLUSH PRIVILEGES; 刷新权限使配置生效,执行exit 退出数据库。
- 安装与配置 PHP
配置依赖源:先执行 yum install epel-release -y 安装 epel 源,再将 epel 源替换为华为云镜像(执行 sed 命令批量替换,提升国内环境下载速度);随后安装 webtatic 源(PHP 7.2 依赖此源),执行 rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm 完成安装,最后刷新 yum 缓存。
安装 PHP 及扩展:执行 yum install php72w php72w-fpm php72w-mysqlnd php72w-gd php72w-xml php72w-mbstring php72w-ldap -y,其中 php72w-fpm 是 PHP 进程管理组件,php72w-mysqlnd 用于 PHP 与 MySQL 数据库连接,其余为 Zabbix 前端所需的扩展依赖包,确保完整安装。
修改核心配置:① 编辑 /etc/php-fpm.d/www.conf 文件,将文件中默认的 user 和 group 从 apache 改为 nginx(确保与 Nginx 运行用户一致,避免权限问题);② 编辑 /etc/php.ini 文件,设置 short_open_tag = On(启用 PHP 短标签)、date.timezone = Asia/Shanghai(设置时区为上海,避免时间同步问题)、max_execution_time = 300(设置 PHP 脚本最大执行时间为 300 秒,适配 Zabbix 前端操作)、post_max_size = 16M(设置 POST 数据最大尺寸),保存后退出。
- 启动服务:
systemctl enable php-fpm --now,重启 Nginx:systemctl restart nginx。
环境测试:在 Nginx 根目录(默认 /usr/share/nginx/html/)下执行 echo "<?php phpinfo(); ?>" > info.php 创建测试文件,然后在本地浏览器访问 http://192.168.108.50/info.php,若能正常显示 PHP 信息页面且包含 MySQL 相关模块,则说明 PHP 环境及数据库连接依赖配置正常。
- 创建 Zabbix 数据库
创建数据库:执行 mysql -u root -p 登录数据库(输入之前设置的密码 root123),执行 CREATE DATABASE zabbix character set utf8 collate utf8_bin; 创建 Zabbix 专用数据库,其中 character set utf8 和 collate utf8_bin 确保数据库支持中文编码且区分大小写,适配 Zabbix 数据存储需求。
授权用户:执行 GRANT all privileges ON zabbix.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix123'; ,授予 zabbix 用户对 zabbix 数据库的所有权限(% 表示允许从任意主机连接,适合分布式部署场景),密码设为 zabbix123;随后执行 FLUSH PRIVILEGES; 刷新权限,执行exit 退出数据库。
- 安装 Zabbix Server
准备安装环境:先将下载的 Zabbix 6.0 源码包(如 zabbix-6.0.6.tar.gz)上传至服务器 /usr/local/src 目录,执行 tar -zxvf zabbix-6.0.6.tar.gz 解压;然后安装编译依赖包,执行 yum install mysql-devel pcre-devel openssl-devel libevent-devel gcc gcc-c++ -y,其中 gcc、gcc-c++ 是编译工具,其余为 Zabbix 依赖的开发库。
- 创建 zabbix 用户:
useradd -s /sbin/nologin -M zabbix。
编译与安装:进入解压后的 Zabbix 目录(cd zabbix-6.0.6),执行配置命令 ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl,其中 --prefix 指定安装目录,--enable-server 启用服务端功能,--with-mysql 关联 MySQL 数据库,--with-net-snmp 支持 SNMP 监控,--with-libcurl 支持 curl 相关功能;配置完成后执行 make && make install 进行编译安装(此过程耗时较长,需耐心等待)。
配置服务端核心文件:执行 vim /usr/local/zabbix/etc/zabbix_server.conf 编辑配置文件,重点修改以下参数:LogFile=/var/log/zabbix/zabbix_server.log(指定日志文件路径,便于问题排查)、DBPassword=zabbix123(设置之前创建的 zabbix 数据库密码)、DBUser=zabbix(指定数据库连接用户)、DBName=zabbix(指定连接的数据库名);修改完成后,执行 mkdir -p /var/log/zabbix && chown zabbix:zabbix /var/log/zabbix 创建日志目录并授权。
配置系统服务:执行 vim /usr/lib/systemd/system/zabbix-server.service 创建系统服务文件,添加服务配置(包含 [Unit]、[Service]、[Install] 三大模块,指定服务启动用户、执行路径、重启策略等);保存后执行 systemctl daemon-reload 重载系统服务,再执行 systemctl enable --now zabbix-server 启动并设置开机自启;最后执行 netstat -tulnp | grep 10051 验证 10051 端口(Zabbix 服务端默认端口)是否处于监听状态,确认服务启动正常。
- 部署 Zabbix 前端
部署前端文件:进入 Zabbix 源码包的 ui 目录(cd /usr/local/src/zabbix-6.0.6/ui),执行 cp -r * /usr/share/nginx/html/ 将前端所有文件复制到 Nginx 根目录(确保用户可通过 IP 直接访问);若需自定义访问路径,可创建子目录(如 /usr/share/nginx/html/zabbix)并复制文件,后续需同步修改 Nginx 配置。
- 授权:
chown -R nginx:nginx /usr/share/nginx/html/。
网页向导配置:在本地浏览器访问 http://192.168.108.50 进入 Zabbix 前端安装向导,按步骤完成配置:① 检查前置条件(确保所有依赖项均显示"OK");② 配置数据库连接(输入数据库类型 MySQL、数据库地址 127.0.0.1、数据库名 zabbix、用户名 zabbix、密码 zabbix123);③ 设置 Zabbix 服务端信息(默认即可);④ 确认配置并完成安装;安装成功后,使用默认账号 Admin(密码 zabbix)登录前端管理界面。
(二)被监控端部署(mysql001 主机)
关闭安全限制:执行systemctl stop firewalld && systemctl disable firewalld 停止并禁用防火墙(避免拦截 Agent 与服务端的通信);执行 setenforce 0 临时关闭 SELinux(实时生效),同时编辑 /etc/selinux/config 文件,将 SELINUX 改为 disabled(永久关闭,需重启服务器生效),彻底避免 SELinux 对监控通信的限制。
安装 Agent2:先配置 Zabbix 官方 yum 源(执行 rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm),刷新 yum 缓存后,执行 yum install zabbix-agent2 -y 安装 Agent2(Agent2 是 Zabbix 6.0 主推的客户端,基于 Go 语言开发,稳定性和扩展性更优)。
配置 Agent2:执行 vim /etc/zabbix/zabbix_agent2.conf 编辑配置文件,核心修改参数:① Server=192.168.108.50(指定 Zabbix 服务端 IP,允许该 IP 向 Agent 采集数据);② ServerActive=192.168.108.50(指定 Agent 主动向服务端上报数据的地址);③ Hostname=mysql001(设置主机名,需与服务端配置的主机名一致,否则无法正常关联);保存配置文件后退出。
启动并验证 Agent2:执行 systemctl enable --now zabbix-agent2 启动服务并设置开机自启;执行netstat -tulnp | grep 10050 验证 10050 端口(Agent2 默认端口)是否监听;同时可在服务端执行 / usr/local/zabbix/bin/zabbix_get -s 192.168.108.51 -p 10050 -k " system.uname ",若能返回被监控端系统信息,说明 Agent2 与服务端通信正常。
(三)Zabbix 监控配置
添加被监控主机:使用 Admin 账号登录 Zabbix 前端,依次点击【配置】-【主机】-【创建主机】,在弹出的页面中配置:① 主机名称:mysql001(需与 Agent2 配置的 Hostname 一致);② 可见名称:可自定义(如 MySQL 数据库服务器);③ 群组:选择或创建合适的主机群组(如 Databases);④ 接口:添加 Agent 接口,IP 地址填写 192.168.108.51,端口保持 10050,点击【添加】完成主机基础配置。
关联监控模板:在创建好的 mysql001 主机编辑页面,切换到【模板】选项卡,点击【选择】,在模板列表中搜索并选中【Template DB MySQL】(Zabbix 内置的 MySQL 监控模板,包含常用的 MySQL 监控项、触发器),点击【添加】-【更新】完成模板关联;模板关联后,服务端会自动通过 Agent2 采集被监控端 MySQL 的相关指标。
- 配置邮件告警
配置邮件客户端:执行 yum install mailx -y 安装 mailx 邮件发送工具;编辑 / etc/mail.rc 文件,在文件末尾添加 QQ 邮箱配置:set from=xxx@qq.com(发件人邮箱)、set smtp=smtps://smtp.qq.com:465(QQ 邮箱 SMTP 服务器地址及端口)、set smtp-auth-user=xxx@qq.com(发件人邮箱账号)、set smtp-auth-password=xxx(邮箱授权码,需在 QQ 邮箱设置中开启 SMTP 服务并获取)、set smtp-auth=login(认证方式)、set ssl-verify=ignore(忽略 SSL 验证),保存后执行 echo "测试邮件" | mailx -s "测试" xxx@163.com 验证邮件发送功能是否正常。
信任 SSL 证书:因 QQ 邮箱 SMTP 采用 SSL 加密,需获取其 SSL 证书并添加信任,执行 echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/pki/tls/certs/qq.crt 提取证书,再执行update-ca-trust extract 更新系统证书信任列表,避免发送邮件时出现证书验证错误。
编写告警脚本:进入 Zabbix 告警脚本目录(cd /usr/lib/zabbix/alertscripts),执行 vim mailx.sh 编写脚本,脚本内容为接收 Zabbix 传递的参数(收件人、主题、消息内容)并通过 mailx 发送邮件;脚本编写完成后,执行 chmod +x mailx.sh 赋予执行权限,同时执行chown zabbix:zabbix mailx.sh 确保 Zabbix 用户可执行;可手动执行 ./mailx.sh 收件人邮箱 测试主题 测试内容 验证脚本可用性。
配置报警媒介类型:在 Zabbix 前端依次点击【管理】-【报警媒介类型】-【创建媒体类型】,配置参数:① 名称:自定义(如 Mailx-QQ 邮箱);② 类型:脚本;③ 脚本名称:mailx.sh;④ 脚本参数:依次添加 {ALERT.SENDTO}(收件人)、{ALERT.SUBJECT}(主题)、{ALERT.MESSAGE}(消息内容);点击【测试】,输入测试收件人邮箱,验证告警媒介是否能正常发送邮件,测试通过后点击【添加】保存。
绑定用户媒介:依次点击【管理】-【用户】,编辑 Admin 用户,切换到【报警媒介】选项卡,点击【添加】,选择之前创建的报警媒介类型(Mailx-QQ 邮箱),填写接收告警的邮箱地址,设置告警级别(如勾选所有级别),点击【添加】-【更新】完成绑定,确保告警信息能发送到指定邮箱。
创建告警动作:依次点击【配置】-【动作】-【创建动作】,配置:① 名称:自定义(如 MySQL 故障告警);② 触发条件:默认或自定义(如当触发器状态为"问题"时触发);③ 操作:添加操作,选择发送到的用户(Admin)及报警媒介,设置消息格式(可包含主机名、触发器名称、故障时间等信息);④ 恢复操作:添加恢复操作,发送故障恢复消息;配置完成后点击【添加】保存,确保触发故障时能自动执行告警动作。
(四)功能测试
模拟故障场景:在被监控端(mysql001 主机)执行 systemctl stop mysqld 停止 MySQL 服务,模拟 MySQL 数据库故障;此时 Zabbix 监控模板中的触发器(如 MySQL 服务状态监控触发器)会检测到服务异常,触发告警动作。
查看告警信息:等待 1-2 分钟(触发器有默认延迟时间),登录 Zabbix 前端,依次点击【监测】-【仪表板】或【监测】-【问题】,可查看 mysql001 主机的 MySQL 服务故障告警信息,显示故障主机、触发器名称、故障级别等详情。
验证告警邮件:查看之前绑定的告警接收邮箱,应能收到 Zabbix 发送的告警邮件,邮件内容包含故障详情;随后在被监控端执行 systemctl start mysqld 启动 MySQL 服务,等待片刻后,会收到故障恢复邮件,说明告警功能完全正常。