Zabbix企业级监控系统搭建实战

Zabbix 企业级监控系统从零搭建:LNMP 架构 + 邮件告警全流程

服务器多了怎么监控?CPU 跑满了磁盘满了谁先知道?这篇文章带你从零搭建一套完整的 Zabbix 监控系统,包含 LNMP 环境部署、Agent 安装、自定义监控和邮件告警配置。


一、Zabbix 是什么?

Zabbix 是一款企业级开源分布式监控解决方案,能监控网络、服务器、虚拟机、应用、数据库、云平台等各种指标。

简单说就是:你想监控什么,它都能帮你盯着,出问题立刻发邮件通知你。

核心组件

组件 作用
Zabbix Server 大脑,负责接收数据、判断告警、调度任务
Zabbix Agent 装在被监控机器上,采集本地数据上报
数据库 存配置和历史数据,常用 MySQL/MariaDB
Web 前端 PHP 写的可视化界面,用来配置和看图表

几个核心概念先搞懂

  • 监控项(Item):采集的具体指标,比如 CPU 使用率、内存占用
  • 触发器(Trigger):阈值规则,比如 CPU > 90% 持续 5 分钟就告警
  • 动作(Action):触发后干什么,发邮件、执行脚本都可以
  • 模板(Template):预定义好的监控项集合,批量套用到主机上

二、实验环境

主机名 IP 地址 角色
zabbix-server 192.168.108.50 监控服务端 + LNMP
mysql001 192.168.108.51 被监控端(装 Agent2)

Zabbix 基于 LNMP 架构部署,所以我们先搭 Nginx + MariaDB + PHP。


三、第一步:搭建 LNMP 环境

1. 安装 Nginx

先配 yum 源:

bash 复制代码
vim /etc/yum.repos.d/nginx.repo
ini 复制代码
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
enabled=1
gpgcheck=0

安装启动:

bash 复制代码
yum install nginx -y
systemctl start nginx
systemctl enable nginx

firewall-cmd --add-service=http --zone=public
firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --reload

2. 安装 MariaDB

Zabbix 6.0 需要 MariaDB 10.x,先配源:

bash 复制代码
vim /etc/yum.repos.d/mariadb.repo
ini 复制代码
[mariadb]
name = MariaDB
baseurl = https://mirrors.aliyun.com/mariadb/yum/10.6/rhel7-amd64/
enabled = 1
gpgcheck = 0

安装并启动:

bash 复制代码
yum -y install mariadb-server mariadb
systemctl enable mariadb --now

初始化 root 密码:

bash 复制代码
mysql
sql 复制代码
DELETE FROM mysql.user WHERE User='';
ALTER USER root@localhost IDENTIFIED BY 'root123';

3. 安装 PHP

先装 epel 和 webtatic 源:

bash 复制代码
yum -y install epel-release
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

安装 PHP 7.2 和扩展:

bash 复制代码
yum -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

4. 配置 Nginx 支持 PHP

修改 php-fpm 配置,把 apache 改成 nginx:

bash 复制代码
vim /etc/php-fpm.d/www.conf
ini 复制代码
user = nginx
group = nginx

修改 Nginx 配置,支持 index.php:

bash 复制代码
vim /etc/nginx/conf.d/default.conf

在 index 那行加上 index.php,然后把 PHP 解析块的注释去掉:

nginx 复制代码
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;
}

5. 优化 PHP 配置

bash 复制代码
vim /etc/php.ini

Zabbix 要求的几个关键参数:

ini 复制代码
short_open_tag = On
expose_php = Off
max_execution_time = 300
max_input_time = 300
memory_limit = 128M
post_max_size = 16M
upload_max_filesize = 2M
date.timezone = Asia/Shanghai

启动服务:

bash 复制代码
systemctl enable php-fpm --now
systemctl restart nginx

写个 info.php 测试一下 LNMP 是否正常。


四、第二步:部署 Zabbix Server

1. 创建数据库

sql 复制代码
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;

💡 collate utf8_bin 一定要加,Zabbix 对字符排序比较有要求,不然会出各种奇奇怪怪的问题。

2. 导入数据库

解压源码包后按顺序导入:

bash 复制代码
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

导入完可以 use zabbix; show tables; 看看,应该有 178 张表。

3. 编译安装 Zabbix Server

先装依赖包:

bash 复制代码
yum 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

创建用户:

bash 复制代码
useradd -s /sbin/nologin -M zabbix

编译配置:

bash 复制代码
export CFLAGS="-std=gnu99"
cd zabbix-6.0.6/
./configure --sysconfdir=/etc/zabbix/ \
  --enable-server \
  --with-mysql \
  --with-net-snmp \
  --with-libxml2 \
  --with-ssh2 \
  --with-openipmi \
  --with-zlib \
  --with-libevent \
  --with-openssl \
  --with-ldap \
  --with-libcurl \
  --with-libpcre

编译安装:

bash 复制代码
make install

4. 修改配置文件

bash 复制代码
vim /etc/zabbix/zabbix_server.conf
ini 复制代码
LogFile=/var/log/zabbix_server.log
DBPassword=zabbix123

创建日志文件并授权:

bash 复制代码
touch /var/log/zabbix_server.log
chown zabbix.zabbix /var/log/zabbix_server.log

5. 添加 systemd 服务

bash 复制代码
vim /usr/lib/systemd/system/zabbix-server.service
ini 复制代码
[Unit]
Description=Zabbix Server with MySQL DB
After=syslog.target network.target mysqld.service

[Service]
Type=simple
ExecStart=/usr/local/sbin/zabbix_server -f
User=zabbix

[Install]
WantedBy=multi-user.target

启动并验证:

bash 复制代码
systemctl start zabbix-server
netstat -ntap | grep 10051

看到 10051 端口在监听就对了。

6. 部署前端页面

bash 复制代码
cp -r /root/zabbix-6.0.6/ui/* /usr/share/nginx/html/
chown -R nginx:nginx /usr/share/nginx/html/
systemctl restart nginx

浏览器访问 http://192.168.108.50,默认账号 Admin,密码 zabbix。


五、第三步:被监控端安装 Agent2

在 mysql001(192.168.108.51)上操作。

bash 复制代码
# 关闭防火墙和 SELinux
systemctl stop firewalld.service
setenforce 0

# 装 Zabbix 官方源
rpm -ivh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm

# 安装 Agent2
yum install zabbix-agent2 -y
systemctl enable zabbix-agent2.service --now

修改配置:

bash 复制代码
vim /etc/zabbix/zabbix_agent2.conf
ini 复制代码
Server=192.168.108.50
ServerActive=192.168.108.50
Hostname=mysql001

重启生效:

bash 复制代码
systemctl restart zabbix-agent2

六、第四步:Web 端添加监控主机

  1. 登录 Zabbix Web 界面
  2. 配置 → 主机 → 创建主机
  3. 填写主机名称,选择群组
  4. 关联模板(比如 Template MySQL)
  5. 添加 Agent 接口,IP 填被监控端地址,端口 10050

等一两分钟,可用性那一栏变成绿色 Z 就说明连通了。

测试一下:去被监控端停掉 MySQL 服务:

bash 复制代码
systemctl stop mysqld

等一会儿,Zabbix 就会弹出告警了。再启动 MySQL,告警自动恢复。


七、第五步:配置邮件告警

光在 Web 上看还不够,出问题得发邮件通知才行。

1. 服务端装 mailx

bash 复制代码
yum install mailx -y

2. 配置 QQ 邮箱

bash 复制代码
vim /etc/mail.rc

末尾添加:

ini 复制代码
set from=你的邮箱@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=你的邮箱@qq.com
set smtp-auth-password=你的QQ邮箱授权码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

⚠️ 这里填的是授权码,不是 QQ 密码!去 QQ邮箱设置里开启 SMTP 拿授权码。

手动发测试邮件:

bash 复制代码
echo "测试内容" | mailx -s "测试主题" 你的邮箱@qq.com

收到就说明没问题。

3. 编写告警脚本

在 zabbix_server.conf 里指定脚本路径:

bash 复制代码
vim /etc/zabbix/zabbix_server.conf
ini 复制代码
AlertScriptsPath=/usr/lib/zabbix/alertscripts

创建脚本:

bash 复制代码
vim /usr/lib/zabbix/alertscripts/mailx.sh
bash 复制代码
#!/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

加权限:

bash 复制代码
touch /tmp/mailx.log
chown -R zabbix.zabbix /tmp/mailx.log
chmod +x /usr/lib/zabbix/alertscripts/mailx.sh
chown -R zabbix:zabbix /usr/lib/zabbix/alertscripts

重启 Zabbix Server。

4. Web 端配置告警媒介

  1. 管理 → 报警媒介类型 → 创建媒体类型
  2. 类型选「脚本」,脚本名填 mailx.sh
  3. 添加三个脚本参数:
    • {ALERT.SENDTO}
    • {ALERT.SUBJECT}
    • {ALERT.MESSAGE}

然后到 管理 → 用户 → Admin → 报警媒介,把刚创建的媒介加上,收件人填自己的邮箱。

5. 配置动作

配置 → 动作 → 创建动作:

  • 操作的主题:{TRIGGER.STATUS}:{TRIGGER.NAME}

  • 消息内容:

    告警主机:{HOST.NAME}
    告警 IP:{HOST.IP}
    告警时间:{EVENT.DATE}-{EVENT.TIME}
    告警等级:{TRIGGER.SEVERITY}
    告警信息:{TRIGGER.NAME}:{ITEM.VALUE}
    事件 ID:{EVENT.ID}

恢复操作也配一份,把「告警」改成「恢复」就行。


八、总结

整套 Zabbix 监控系统搭下来,核心就五步:

  1. 搭 LNMP 环境 ------ Nginx + MariaDB + PHP
  2. 装 Zabbix Server ------ 编译安装 + 导入数据库
  3. 装 Agent2 ------ 被监控端装客户端
  4. Web 加主机 ------ 关联模板开始监控
  5. 配邮件告警 ------ 出问题自动发邮件

📌 新手常见坑:

  • PHP 配置参数不达标,Web 安装页面全是红叉
  • 数据库字符集不对,页面乱码或者触发器不正常
  • Agent 配置里 Server 地址写错,主机一直灰色
  • 邮件发不出去,90% 是授权码填错或者证书没配好

Zabbix 刚入门的时候觉得配置项特别多,其实用多了就那几样:主机、模板、触发器、动作。把这四个概念搞懂,后面加什么监控都是套模板的事。


我是正在学运维的技术人,持续更新 Zabbix、ELK、K8s 这些运维必备工具的实操笔记,欢迎一起交流~

相关推荐
月落汀兰1 天前
服务器出问题没人告警?Zabbix6.0 LNMP 部署,MySQL 监控 + 邮件告警保姆级实战
运维·服务器·zabbix
王琦03184 天前
Zabbix部署
zabbix
王琦03185 天前
zabbix agent 部署与使用
zabbix
Lysander.Jovian6 天前
zabbix监控实战
zabbix
fengkai45457 天前
十三、Zabbix 监控
运维·服务器·zabbix·监控·网络设备
陈聪.9 天前
Zabbix 监控系统知识总结
zabbix
暖核10 天前
企业级开源监控解决方案:Zabbix 6.0 部署与配置全流程详解
开源·zabbix
木子欢儿11 天前
Zabbix 7.4 Alpine 版 Docker Compose 部署
android·运维·docker·容器·zabbix
云运维笔记2 个月前
Zabbix 分布式监控搭建实战:基于 Proxy 实现 MySQL、Java、Nginx 监控
java·mysql·zabbix