Zabbix 企业级监控系统总结(含完整实施过程)
一、Zabbix 核心概述
1. 核心定位
Zabbix 是一款企业级开源分布式监控解决方案,由 Alexei Vladishev 创建并由 Zabbix SIA 维护,支持监控网络参数、服务器 / 虚拟机 / 应用程序 / 数据库 / 网站等 IT 基础设施的健康状态与完整性,提供灵活告警机制、报表生成和数据可视化功能,适用于从小型组织到大型企业的各类 IT 环境。
2. 核心特性
- 开源免费:基于 GNU GPL v2 许可证,源代码开放可自由分发
- 监控范围广:覆盖硬件、系统、应用、服务、数据库、云平台等全栈资源
- 告警灵活:支持邮件等多种告警方式,可针对几乎任何事件配置快速响应
- 数据可视化:提供丰富报表和仪表盘,支持容量规划
- 部署灵活:支持轮询和捕获两种数据收集方式,支持 Proxy 分布式部署分担负载
- 跨平台支持:兼容多种操作系统和架构
3. 版本生命周期
| 版本类型 | 开发周期 | 全面支持期 | 有限支持期 | 代表版本 |
|---|---|---|---|---|
| LTS(长期支持) | 1.5 年 | 3 年(功能更新 + 安全修复) | 2 年(仅限高危修复) | 7.0 LTS、6.0 LTS |
| 标准版 | 6 个月 | 6 个月 | 至少 6 个月(至下一个标准版发布) | 7.4、7.2 |
二、Zabbix 架构与核心组件
1. 核心组件
| 组件 | 核心职责 | 关键说明 |
|---|---|---|
| Zabbix Server | 核心组件 | 接收 Agent 上报数据,存储配置 / 统计 / 运行数据,触发告警和动作 |
| 数据库存储 | 数据持久化 | 存储所有配置信息和收集的监控数据(支持 MariaDB 等) |
| Web 界面 | 可视化操作入口 | 基于 Web 的管理界面,支持配置、监控、报表查看,与 Server 通常部署在同一主机 |
| Zabbix Proxy | 负载分担(可选) | 代理 Server 收集数据,减轻单 Server 负载,适用于大规模部署 |
| Zabbix Agent | 数据采集终端 | 部署在监控目标上,主动监控本地资源和应用,上报数据;分为 Agent(C 语言,轻量)和 Agent2(Go 语言,支持插件扩展) |
2. 核心数据流与依赖关系
- 数据流逻辑:创建主机 → 配置监控项 → 设置触发器 → 配置动作 → 接收告警
- 依赖架构:基于 LNMP(Linux+Nginx+MariaDB+PHP)部署,需提前搭建基础运行环境
三、完整实施过程(CentOS7 环境)
1. 实验环境准备
| 主机名 | IP 地址 | 操作系统 | 核心功能 | 关键软件 |
|---|---|---|---|---|
| zabbix-server | 192.168.108.50 | CentOS7 | 监控服务器(核心节点) | Nginx、MariaDB、PHP、Zabbix Server |
| mysql001 | 192.168.108.51 | CentOS7 | 被监控节点 | Zabbix Agent2、MariaDB |
2. 分步实施过程(重点步骤 + 命令)
(1)基础环境搭建:LNMP 架构部署(zabbix-server 节点)
① 安装 Nginx
-
创建 YUM 源:
bashvim /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ enabled=1 gpgcheck=0 -
安装并启动服务:
bashyum install nginx -y systemctl start nginx && systemctl enable nginx -
防火墙配置:
bashfirewall-cmd --add-service=http --zone=public --permanent firewall-cmd --reload -
验证:浏览器访问
http://192.168.108.50,显示 Nginx 欢迎页则成功
② 安装 MariaDB(数据库存储)
-
配置 YUM 源(Zabbix6.0 需 MariaDB10.5+):
bashvim /etc/yum.repos.d/mariadb.repo [mariadb] name = MariaDB baseurl = https://mirrors.aliyun.com/mariadb/yum/10.6/centos7-amd64/ enabled = 1 gpgcheck = 0 -
安装并启动:
bashyum -y install mariadb-server mariadb systemctl enable mariadb --now -
初始化数据库(设置 root 密码):
bashmysql DELETE FROM mysql.user WHERE User=''; # 删除空用户 ALTER USER root@localhost IDENTIFIED BY 'root123'; # 设置密码 exit -
验证连接:
bashmysql -uroot -proot123 # 成功登录则正常
③ 安装并配置 PHP
bash
yum -y install epel-release
sed -i "s/#baseurl/baseurl/g" /etc/yum.repos.d/epel.repo
sed -i "s/metalink/#metalink/g" /etc/yum.repos.d/epel.repo
sed -i "s@https\?://download.[a-z]*\.\?[a-z]*/pub@https://repo.huaweicloud.com@g" /etc/yum.repos.d/epel.repo
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
-
安装 PHP 及依赖(Zabbix 要求版本):
bashyum -y install php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-gd php72w-mbstring php72w-pdo php72w-xml php72w-fpm php72w-mysqlnd php72w-opcache php72w-ldap php72w-bcmath -
配置 PHP-FPM(适配 Nginx):
bashvim /etc/php-fpm.d/www.conf user = nginx # 改为nginx用户 group = nginx # 改为nginx组 -
配置 Nginx 支持 PHP:
bashvim /etc/nginx/conf.d/default.conf index index.php index.html index.htm; # 添加index.php # 解开php配置块并修改 location ~ \.php$ { root /usr/share/nginx/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 修正/scripts为$document_root include fastcgi_params; } -
优化 PHP 配置(满足 Zabbix 要求):
bashvim /etc/php.ini short_open_tag = On # 支持短标签 expose_php = Off # 隐藏版本 max_execution_time = 300 # 执行时间 max_input_time = 300 # 接收数据等待时间 memory_limit = 128M # 脚本内存限制 post_max_size = 16M # POST数据大小 upload_max_filesize = 2M # 上传文件大小 always_populate_raw_post_data = -1 # 新增配置 date.timezone = Asia/Shanghai # 时区 -
启动服务并验证:
bashsystemctl enable php-fpm --now systemctl restart nginx # 测试PHP环境 vim /usr/share/nginx/html/info.php <?php phpinfo(); ?> # 浏览器访问http://192.168.108.50/info.php,显示PHP信息则正常 # 测试数据库连接 vim /usr/share/nginx/html/info.php <?php $link=mysqli_connect('127.0.0.1','root','root123'); if ($link) echo "success"; else echo "fail"; ?> # 访问页面显示success则连接正常
(2)Zabbix Server 部署与配置
① 创建 Zabbix 数据库及账号
bash
mysql -uroot -proot123
CREATE DATABASE zabbix character set utf8 collate utf8_bin; # 支持中文排序
GRANT all privileges ON *.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix123';
GRANT all privileges ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY 'zabbix123';
flush privileges;
quit
- 验证数据库连接:修改 info.php 测试 zabbix 账号连接,显示 "Zabbix 数据库连接成功" 则正常
② 导入 Zabbix 数据库脚本
bash
# 解压Zabbix安装包(假设已上传zabbix-6.0.6.tar.gz到/root)
tar zxvf zabbix-6.0.6.tar.gz
cd /root/zabbix-6.0.6/database/mysql/
# 按顺序导入脚本
mysql -uroot -proot123 zabbix < schema.sql
mysql -uroot -proot123 zabbix < images.sql
mysql -uroot -proot123 zabbix < data.sql
mysql -uroot -proot123 zabbix < double.sql
mysql -uroot -proot123 zabbix < history_pk_prepare.sql
# 验证:进入数据库查看表数量(应显示178条)
mysql -uroot -proot123 zabbix -e "show tables;" | wc -l
③ 编译安装 Zabbix Server
-
安装依赖包:
bashyum install -y mysql-devel pcre-devel openssl-devel zlib-devel libxml2-devel net-snmp-devel net-snmp libssh2-devel OpenIPMI-devel libevent-devel openldap-devel libcurl-devel fping gcc gcc-c++ make -
创建 Zabbix 用户:
bashuseradd -s /sbin/nologin -M zabbix -
编译配置:
bashexport CFLAGS="-std=gnu99" # 指定C99标准 cd /root/zabbix-6.0.6/ ./configure --sysconfdir=/etc/zabbix/ --enable-server --with-mysql --with-net-snmp --with-libxml2 --with-ssh2 --with-openipmi --with-zlib --with-libpthread --with-libevent --with-openssl --with-ldap --with-libcurl --with-libpcre make install # 编译安装 -
验证版本:
bashzabbix_server --version # 显示版本信息则安装成功
④ 配置 Zabbix Server
-
修改主配置文件:
bashvim /etc/zabbix/zabbix_server.conf LogFile=/var/log/zabbix_server.log # 日志文件路径 DBPassword=zabbix123 # 数据库密码(与创建的一致) -
创建日志文件并授权:
bashtouch /var/log/zabbix_server.log chown zabbix.zabbix /var/log/zabbix_server.log -
创建系统服务(支持 systemctl 管理):
bashvim /usr/lib/systemd/system/zabbix-server.service [Unit] Description=Zabbix Server with MySQL DB After=syslog.target network.target mysqld.service [Service] Type=simple ExecStart=/usr/local/sbin/zabbix_server User=zabbix [Install] WantedBy=multi-user.target -
启动服务并验证:
bashsystemctl daemon-reload systemctl start zabbix-server && systemctl enable zabbix-server netstat -ntap | grep 10051 # 监听10051端口则正常(Zabbix Server默认端口)
⑤ 部署 Zabbix Web 前端
-
复制前端文件到 Nginx 站点目录:
bashcp -r /root/zabbix-6.0.6/ui/* /usr/share/nginx/html/ chown -R nginx:nginx /usr/share/nginx/html/ # 授权 -
Web 界面配置(浏览器操作):
- 访问
http://192.168.108.50,进入 Zabbix 安装向导 - 步骤 1:必要条件检测(全部通过则继续)
- 步骤 2:配置数据库连接(类型 MySQL,数据库名 zabbix,用户 zabbix,密码 zabbix123)
- 步骤 3:设置 Zabbix 服务器名称、时区等
- 步骤 4:安装前汇总(确认配置无误)
- 步骤 5:安装完成(默认用户名 Admin,密码 zabbix)
- 访问
(3)被监控端配置:Zabbix Agent2 部署(mysql001 节点)
-
环境准备:
bashsystemctl stop firewalld.service # 关闭防火墙 setenforce 0 # 关闭SELinux hostnamectl set-hostname mysql001 # 设置主机名 yum update ca-certificates -y # 更新CA证书 -
安装 Zabbix Agent2:
bashrpm -ivh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm yum install zabbix-agent2 -y -
配置 Agent2(指向 Zabbix Server):
bashvim /etc/zabbix/zabbix_agent2.conf PidFile=/var/run/zabbix/zabbix_agent2.pid # PID文件路径 LogFile=/var/log/zabbix/zabbix_agent2.log # 日志路径 LogFileSize=0 # 日志不限制大小 Server=192.168.108.50 # Zabbix Server IP ServerActive=192.168.108.50 # 主动上报Server IP Hostname=mysql001 # 主机名(需与Server配置一致) Include=/etc/zabbix/zabbix_agent2.d/plugins.d/*.conf # 插件配置目录 -
启动服务:
bashsystemctl enable zabbix-agent2.service --now systemctl restart zabbix-agent2 # 重启生效
(4)Zabbix Server 管理配置(Web 界面操作)
① 添加被监控主机
- 登录 Zabbix Web 界面(Admin/zabbix)
- 配置 → 主机 → 创建主机:
- 主机名称:mysql001(与 Agent2 配置一致)
- 群组:选择合适群组(如 Linux servers)
- 接口:添加客户端接口,IP 为 192.168.108.51,端口 10050(Agent 默认端口)
- 模板:关联对应模板(如 MySQL 模板)
- 验证:主机列表中显示 "可用性" 为绿色则监控正常
② 配置邮件告警(QQ 邮箱示例)
-
服务器端安装并配置 mailx:
bashyum install mailx -y # 配置邮箱参数 vim /etc/mail.rc # 末尾添加 set from=6946630@qq.com # 发件人邮箱 set smtp=smtps://smtp.qq.com:465 # SMTP服务器 set smtp-auth-user=6946630@qq.com # 邮箱账号 set smtp-auth-password=lmsbtquhuzhqcage # QQ邮箱授权码 set smtp-auth=login set ssl-verify=ignore set nss-config-dir=/etc/pki/nssdb/ -
获取 QQ 邮箱 SSL 证书
bashmkdir -p /root/.certs/ echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt cd /root/.certs/ certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt -
测试邮件发送:
bashmailx -s "Zabbix测试邮件" 6946630@qq.com 测试邮件内容 # 按Ctrl+D发送,查看邮箱是否收到 -
配置 Zabbix 告警脚本:
bash# 修改Zabbix Server配置,指定告警脚本目录 vim /etc/zabbix/zabbix_server.conf AlertScriptsPath=/usr/lib/zabbix/alertscripts # 创建目录并授权 mkdir -p /usr/lib/zabbix/alertscripts chown -R zabbix:zabbix /usr/lib/zabbix/alertscripts # 编写邮件发送脚本 vim /usr/lib/zabbix/alertscripts/mailx.sh #!/bin/bash messages=`echo $3 | tr '\r\n' '\n'` subject=`echo $2 | tr '\r\n' '\n'` echo "${messages}" | mail -s "${subject}" $1 >>/tmp/mailx.log 2>&1 # 授权脚本 chmod +x /usr/lib/zabbix/alertscripts/mailx.sh touch /tmp/mailx.log && chown zabbix.zabbix /tmp/mailx.log # 重启Zabbix Server systemctl restart zabbix-server.service -
Web 界面配置告警:
- 管理 → 报警媒介类型 → 创建媒体类型:选择 "脚本",脚本名称 mailx.sh,配置参数(收件人、主题、消息)
- 管理 → 用户 → Admin → 报警媒介:添加刚才创建的媒体类型,填写收件人邮箱
- 配置 → 动作 → Trigger actions:删除默认动作,创建新动作,设置触发条件(如服务宕机)、告警消息(包含主机 IP、时间、等级等)、恢复消息
-
测试告警:在被监控端停止 mysqld 服务,等待片刻查看 Zabbix 界面告警和邮箱通知
四、核心优势与注意事项
1. 核心优势
- 全栈监控:覆盖从硬件到应用的全链路资源,满足企业级监控需求
- 灵活扩展:支持 Proxy 分布式部署和 Agent2 插件扩展,适应大规模环境
- 告警精准:可自定义触发条件和告警内容,支持多渠道通知
- 数据可视化:仪表盘和报表功能强大,便于趋势分析和容量规划
- 开源免费:降低企业监控成本,无商业授权限制
2. 注意事项
- 环境依赖:严格遵循 LNMP 版本要求(如 Zabbix6.0 需 MariaDB10.5+、PHP7.2+)
- 权限配置:Zabbix 相关目录和文件需正确授权(zabbix 用户 /nginx 用户)
- 网络连通:确保 Server 与 Agent 之间 10050/10051 端口互通
- 数据库优化:监控数据增长较快,需定期清理或归档历史数据
- 告警配置:避免告警风暴,合理设置触发条件和恢复阈值
- 证书信任:第三方邮箱告警需正确配置 SSL 证书,否则发送失败