从零搭建企业级 Zabbix 6.0 监控系统(LNMP + MariaDB + Agent2 + 邮件告警)
本文基于 CentOS 7 环境,使用 Zabbix 6.0.6 + Nginx + PHP + MariaDB 10.6 + Zabbix Agent2,完整演示:
- LNMP 环境搭建
- Zabbix Server 源码编译安装
- 被监控主机接入
- MySQL 监控
- 邮件告警全流程
一、Zabbix 是什么?
Zabbix 是一款企业级开源分布式监控解决方案,由 Alexei Vladishev 创建,目前由 Zabbix SIA 维护。
它不仅可以监控:
- 服务器(CPU / 内存 / 磁盘 / 网络 / 进程)
- 网络设备(交换机、路由器、防火墙,通过 SNMP)
- 数据库(MySQL / PostgreSQL / Oracle)
- 中间件(Redis / Kafka / Tomcat)
- 容器与云平台(Docker / K8s / 阿里云 / AWS)
- 业务指标(订单量、接口成功率等)
还具备:
✅ 灵活告警(邮件 / 脚本 / 自愈)
✅ 图形化展示
✅ 容量规划与趋势分析
✅ 支持大规模分布式部署(Proxy)
License:GPL v2,完全免费。
二、Zabbix 核心组件
| 组件 | 作用 |
|---|---|
| Zabbix Server | 大脑:采集、处理、存储、告警、调度 |
| Zabbix Agent / Agent2 | 被监控端数据采集 |
| Zabbix Proxy | 分布式代理,不存数据,只转发 |
| Database | 存配置、历史、趋势(MySQL/MariaDB/PG) |
| Web 前端 | PHP 写的管理界面 |
| Sender / Get | 手动推数据 / 调试工具 |
核心概念
- Item(监控项):CPU 使用率、内存占用等
- Trigger(触发器):如 CPU > 90% 持续 5 分钟
- Action(动作):发邮件、执行脚本
- Template(模板):批量监控配置
- Host(主机):被监控设备
- 主动 / 被动模式
- 主动:Agent → Server
- 被动:Server → Agent(默认)
三、环境规划
| 主机名 | IP | 角色 |
|---|---|---|
| zabbix-server | 192.168.108.50 | Zabbix Server + Web |
| mysql001 | 192.168.108.51 | 被监控主机(MySQL) |
四、搭建 LNMP 环境
1️⃣ 安装 Nginx
bash
bash
vim /etc/yum.repos.d/nginx.repo
ini
bash
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
enabled=1
gpgcheck=0
bash
bash
yum install nginx -y
systemctl start nginx
systemctl enable nginx
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
2️⃣ 安装 MariaDB 10.6
⚠️ Zabbix 6.0 不支持低版本 MySQL/MariaDB
bash
bash
vim /etc/yum.repos.d/mariadb.repo
ini
bash
[mariadb]
name=MariaDB
baseurl=https://mirrors.aliyun.com/mariadb/yum/10.6/rhel7-amd64/
enabled=1
gpgcheck=0
bash
bash
yum -y install mariadb-server mariadb
systemctl enable mariadb --now
初始化密码:
sql
bash
DELETE FROM mysql.user WHERE User='';
ALTER USER root@localhost IDENTIFIED BY 'root123';
3️⃣ 安装 PHP(PHP 7.2)
bash
bash
yum -y install epel-release
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum -y install php72w php72w-fpm php72w-mysqlnd \
php72w-gd php72w-mbstring php72w-ldap php72w-bcmath
PHP 关键配置
ini
bash
max_execution_time = 300
max_input_time = 300
memory_limit = 128M
post_max_size = 16M
date.timezone = Asia/Shanghai
bash
bash
systemctl enable php-fpm --now
systemctl restart nginx
五、Nginx 支持 PHP
nginx
bash
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;
include fastcgi_params;
}
测试:
php
bash
<?php phpinfo(); ?>
六、创建 Zabbix 数据库
sql
bash
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;
七、源码安装 Zabbix Server
1️⃣ 安装依赖
bash
bash
yum install -y mysql-devel pcre-devel openssl-devel \
net-snmp-devel libxml2-devel libevent-devel \
openldap-devel libcurl-devel fping gcc gcc-c++ make
bash
bash
useradd -s /sbin/nologin -M zabbix
export CFLAGS="-std=gnu99"
2️⃣ 编译安装
bash
bash
tar zxvf zabbix-6.0.6.tar.gz
cd zabbix-6.0.6
./configure \
--sysconfdir=/etc/zabbix/ \
--enable-server \
--with-mysql \
--with-net-snmp \
--with-libxml2 \
--with-ssh2 \
--with-openipmi \
--with-openssl \
--with-ldap \
--with-libcurl
make install
3️⃣ 导入数据库
bash
bash
cd 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
4️⃣ 配置 Server
conf
bash
LogFile=/var/log/zabbix_server.log
DBPassword=zabbix123
bash
bash
touch /var/log/zabbix_server.log
chown zabbix.zabbix /var/log/zabbix_server.log
systemd 管理
ini
bash
[Unit]
Description=Zabbix Server
After=network.target mysqld.service
[Service]
Type=simple
ExecStart=/usr/local/sbin/zabbix_server -f
User=zabbix
[Install]
WantedBy=multi-user.target
bash
bash
systemctl start zabbix-server
netstat -ntap | grep 10051
八、部署 Zabbix 前端
bash
bash
cp -r zabbix-6.0.6/ui/* /usr/share/nginx/html/
chown -R nginx:nginx /usr/share/nginx/html/
systemctl restart nginx
浏览器访问:
纯文本
bash
http://192.168.108.50
默认账号:
- 用户名:
Admin - 密码:
zabbix
九、被监控端(Agent2)
bash
bash
rpm -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
conf
bash
Server=192.168.108.50
ServerActive=192.168.108.50
Hostname=mysql001
bash
bash
systemctl enable zabbix-agent2 --now
十、Zabbix 监控 MySQL
步骤:
- 配置 → 主机 → 创建主机
- 群组:MySQL
- 模板:
MySQL by Zabbix agent2 - 宏:
{$MYSQL.DSN} = 127.0.0.1{$MYSQL.USER} = root{$MYSQL.PASSWORD} = root123
- 接口:Agent,端口 10050
✅ 停止 MySQL:
bash
bash
systemctl stop mysqld
→ Zabbix 立刻产生告警
→ 启动后自动恢复
十一、配置邮件告警(QQ 邮箱)
1️⃣ 安装 mailx
bash
bash
yum install mailx -y
2️⃣ 配置 /etc/mail.rc
ini
bash
set from=6946630@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=6946630@qq.com
set smtp-auth-password=邮箱授权码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
3️⃣ 获取 QQ 邮箱证书
bash
bash
mkdir -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
十二、Zabbix 报警脚本
bash
bash
mkdir -p /usr/lib/zabbix/alertscripts
vim /usr/lib/zabbix/alertscripts/mailx.sh
bash
bash
#!/bin/bash
message=$(echo $3 | tr '\r\n' '\n')
subject=$(echo $2 | tr '\r\n' '\n')
echo "$message" | mail -s "$subject" $1
bash
bash
chmod +x mailx.sh
chown -R zabbix:zabbix /usr/lib/zabbix/alertscripts
十三、Zabbix 告警配置
1️⃣ 报警媒介类型
- 类型:脚本
- 参数:
{ALERT.SENDTO}{ALERT.SUBJECT}{ALERT.MESSAGE}
2️⃣ 用户绑定邮箱
Admin → 报警媒介 → 添加邮箱
3️⃣ 动作(Trigger actions)
告警消息:
text
text
告警主机:{HOST.NAME}
告警IP:{HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME} : {ITEM.VALUE}
恢复消息:
text
text
恢复主机:{HOST.NAME}
恢复时间:{EVENT.DATE} {EVENT.TIME}
恢复信息:{TRIGGER.NAME} : {ITEM.VALUE}
十四、最终效果
✅ MySQL 停止 → 仪表盘变红
✅ 邮箱收到告警
✅ MySQL 启动 → 恢复邮件到达
✅ 系统资源、连接数、查询量全可视化