Zabbix搭建及简单使用
Zabbix 部署与配置手册
当前支持版本
| 版本 | Zabbix 7.4 | Zabbix 7.2 | Zabbix 7.0 LTS | Zabbix 6.0 LTS |
|---|---|---|---|---|
| 发布日期 | 2025年7月1日 | 2024年12月10日 | 2024年6月4日 | 2022年2月8日 |
| 全面支持截止时间 | 2026年1月1日 | 2025年6月30日 | 2027年6月30日 | 2025年2月28日 |
| 有限支持截止时间 | Q3 2026 | 2025年12月31日 | 2029年6月30日 | 2027年2月28日 |
Zabbix 概述
Zabbix 由 Alexei Vladishev 创建,目前由 Zabbix SIA 积极开发和维护。Zabbix 是一款企业级开源分布式监控解决方案。
Zabbix 用于监控网络众多参数、服务器/虚拟机/应用程序/服务/数据库/网站/云平台等的健康状态和完整性。提供灵活的告警机制,允许用户为几乎任何事件配置基于邮件的告警,实现对服务器问题的快速响应。基于存储数据,提供出色的报表和数据可视化功能,适用于容量规划。
Zabbix 同时支持轮询(polling)和捕获(trapping)两种方式。所有报表、统计信息及配置参数均可通过基于 Web 的前端界面访问,可从任何位置评估网络状态和服务器健康状况。Zabbix 完全免费,基于 GNU 通用公共许可证第2版发布。
Zabbix 核心组件
1. Zabbix Server(核心)
- 整个系统的大脑,负责数据接收、处理、存储、告警判断、任务调度。
- 功能:接收 Agent/Proxy/SNMP 数据、触发告警、管理配置、提供 Web 后端。
- 部署:生产环境建议独立服务器,支持 HA 高可用。
2. Zabbix Agent / Agent2(被监控端)
- 部署在被监控主机,采集本地数据(系统、应用)并上报。
- Agent:C 语言开发,轻量、单线程,适合基础监控。
- Agent2(6.0+ 推荐):Go 语言,多线程、插件化(MySQL/Redis/K8s),性能更强。
- 模式:主动(Agent → Server)、被动(Server → Agent)。
3. Zabbix Proxy(可选,分布式)
- 代理 Server 采集数据,减轻 Server 负载,适用于跨地域/跨网络监控、网络隔离。
- 不存储数据,仅转发,适合大规模、多机房场景。
4. 数据库(Database)
- 存储配置(主机、模板、触发器)、历史数据、趋势数据。
- 支持:MySQL/MariaDB(最常用)、PostgreSQL、Oracle。
5. Web 界面(Web Interface)
- 基于 PHP 的可视化控制台,用于配置、查看监控、告警管理、报表。
- 路径:
http://<serverIP>/zabbix
6. 其他工具
- Zabbix Sender:手动/脚本向 Server 推送自定义数据。
- Zabbix Get:Server 端手动测试获取 Agent 数据(调试用)。
Zabbix 核心定义
| 术语 | 说明 |
|---|---|
| 监控项(Item) | 采集的具体指标(如 CPU 使用率、内存占用、网卡流量),是数据采集的最小单元。 |
| 触发器(Trigger) | 基于监控项设置的阈值规则(如 CPU 使用率 > 90% 持续 5 分钟),触发异常状态。 |
| 动作(Action) | 触发器异常后执行的操作(发邮件、短信、执行脚本、告警升级)。 |
| 模板(Template) | 预定义的监控项、触发器、图形集合,可批量应用到主机,简化配置。 |
| 主机(Host) | 被监控的设备(服务器、交换机、虚拟机),需关联模板才能监控。 |
| 主动模式 | Agent 主动向 Server 推送数据(适合跨网络、降低 Server 负载)。 |
| 被动模式 | Server 主动向 Agent 拉取数据(默认模式,配置简单)。 |
使用场景
- 服务器监控:Linux/Windows 服务器的 CPU、内存、磁盘、网络、进程、负载、日志。
- 网络设备监控:交换机、路由器、防火墙的端口流量、状态、CPU、内存(SNMP)。
- 应用服务监控:Web(Nginx/Apache)、数据库(MySQL/PostgreSQL/Oracle)、中间件(Redis、Kafka、Tomcat)、容器(Docker/K8s)。
- 云平台监控:阿里云、AWS、VMware、OpenStack 虚拟机与资源状态。
- 业务指标监控:接口响应时间、订单量、用户在线数、API 成功率(自定义脚本/Zabbix Sender)。
- 分布式/跨机房监控:多地域机房、网络隔离环境(使用 Zabbix Proxy)。
- 告警与自愈:异常自动通知、执行恢复脚本、服务重启、故障升级通知。
搭建 LNMP 架构(Zabbix Server 部署)
环境规划
| 主机名 | IP | 功能 |
|---|---|---|
| zabbix-server | 10.1.8.131 | 装 Zabbix Server |
| mysql | 10.1.8.132 | 被监控端 |
1. 安装 Nginx
# 创建 Nginx yum 源
[root@zabbix-server ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
enabled=1
gpgcheck=0
# 安装 Nginx
[root@zabbix-server ~]# yum install nginx -y
# 启动并设置开机自启
[root@zabbix-server ~]# systemctl start nginx
[root@zabbix-server ~]# systemctl enable nginx
# 防火墙放行 HTTP
[root@zabbix-server ~]# firewall-cmd --add-service=http --zone=public --permanent
[root@zabbix-server ~]# firewall-cmd --reload
测试 Nginx:访问 http://10.1.8.131 应看到 Welcome to nginx 页面。
2. 安装 MariaDB
# 配置 MariaDB 10.6 yum 源(Zabbix 6.0 需要此版本)
[root@zabbix-server ~]# vim /etc/yum.repos.d/mariadb.repo
[mariadb]
name = MariaDB
baseurl = https://mirrors.aliyun.com/mariadb/yum/10.6/centos7-amd64/
enabled = 1
gpgcheck = 0
# 安装 MariaDB
[root@zabbix-server ~]# yum -y install mariadb-server mariadb
# 启动并设置开机自启
[root@zabbix-server ~]# systemctl enable mariadb --now
# 设置 root 密码并清理匿名用户
[root@zabbix-server ~]# mysql
MariaDB [(none)]> DELETE FROM mysql.user WHERE User='';
MariaDB [(none)]> ALTER USER root@localhost IDENTIFIED BY 'root123';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> QUIT
# 测试连接
[root@zabbix-server ~]# mysql -uroot -proot123
3. 安装 PHP
# 安装 EPEL 并更换镜像源
[root@zabbix-server ~]# yum -y install epel-release
[root@zabbix-server ~]# sed -i "s/#baseurl/baseurl/g" /etc/yum.repos.d/epel.repo
[root@zabbix-server ~]# sed -i "s/metalink/#metalink/g" /etc/yum.repos.d/epel.repo
[root@zabbix-server ~]# sed -i "s@https\?://download.[a-z]*\.[a-z]*/pub@https://repo.huaweicloud.com@g" /etc/yum.repos.d/epel.repo
# 安装 Webtatic 源并安装 PHP 7.2
[root@zabbix-server ~]# rpm -Uvh https://mirror.webstatic.com/yum/el7/webtatic-release.rpm
[root@zabbix-server ~]# 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 配置文件,将 user/group 改为 nginx
[root@zabbix-server ~]# vim /etc/php-fpm.d/www.conf
8 user = nginx
10 group = nginx
# 配置 Nginx 默认站点
[root@zabbix-server ~]# vim /etc/nginx/conf.d/default.conf
# 在 index 行添加 index.php
9 index index.php index.html index.htm;
# 取消 PHP 处理部分的注释,并修改 root 和 fastcgi_param
29 location ~ \.php$ {
30 root /usr/share/nginx/html;
31 fastcgi_pass 127.0.0.1:9000;
32 fastcgi_index index.php;
33 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
34 include fastcgi_params;
}
5. 配置 PHP
[root@zabbix-server ~]# vim /etc/php.ini
202 short_open_tag = On
359 expose_php = Off
368 max_execution_time = 300
378 max_input_time = 300
389 memory_limit = 128M
656 post_max_size = 16M
799 upload_max_filesize = 2M
800 always_populate_raw_post_data = -1
877 date.timezone = Asia/Shanghai
# 启动 php-fpm 并重启 Nginx
[root@zabbix-server ~]# systemctl enable php-fpm --now
[root@zabbix-server ~]# systemctl restart nginx
6. 测试 PHP 环境
测试 PHP 信息:
[root@zabbix-server ~]# vim /usr/share/nginx/html/info.php
<?php phpinfo(); ?>
访问 http://10.1.8.131/info.php 查看 PHP 信息。
测试数据库连接:
[root@zabbix-server ~]# vim /usr/share/nginx/html/info.php
<?php
$link = mysqli_connect('127.0.0.1','root','root123');
if ($link) echo "success";
else echo "fail";
?>
注:
mysql_connect自 PHP 5.5.0 起已废弃,建议使用 mysqli 或 PDO。
7. 创建 Zabbix 数据库及账号
[root@zabbix-server ~]# mysql -uroot -proot123
MariaDB [(none)]> CREATE DATABASE zabbix CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix123';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY 'zabbix123';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> QUIT
测试 Zabbix 数据库连接:
[root@zabbix-server ~]# vim /usr/share/nginx/html/info.php
<?php
$link = mysqli_connect('127.0.0.1','zabbix','zabbix123');
if ($link) echo "zabbix数据库连接成功";
else echo "zabbix数据库连接失败";
?>
安装 Zabbix Server
1. 导入数据库
# 解压 Zabbix 源码包
[root@zabbix-server ~]# tar zxvf zabbix-6.0.6.tar.gz
# 进入数据库脚本目录
[root@zabbix-server ~]# cd /root/zabbix-6.0.6/database/mysql/
# 按顺序导入
[root@zabbix-server mysql]# mysql -uroot -proot123 zabbix < schema.sql
[root@zabbix-server mysql]# mysql -uroot -proot123 zabbix < images.sql
[root@zabbix-server mysql]# mysql -uroot -proot123 zabbix < data.sql
[root@zabbix-server mysql]# mysql -uroot -proot123 zabbix < double.sql
[root@zabbix-server mysql]# mysql -uroot -proot123 zabbix < history_pk_prepare.sql
验证导入:
[root@zabbix-server mysql]# mysql -uroot -proot123
MariaDB [(none)]> USE zabbix;
MariaDB [zabbix]> SHOW TABLES; # 应看到约178张表
2. 安装依赖包及编译 Zabbix
# 安装依赖
[root@zabbix-server ~]# 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
# 创建 zabbix 用户
[root@zabbix-server ~]# useradd -s /sbin/nologin -M zabbix
# 设置编译标志
[root@zabbix-server ~]# export CFLAGS="-std=gnu99"
# 配置
[root@zabbix-server ~]# cd zabbix-6.0.6/
[root@zabbix-server 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
# 编译安装
[root@zabbix-server zabbix-6.0.6]# make install
# 检查版本
[root@zabbix-server ~]# zabbix_server --version
3. 修改 Zabbix Server 配置文件
[root@zabbix-server ~]# vim /etc/zabbix/zabbix_server.conf
38 LogFile=/var/log/zabbix_server.log
123 DBPassword=zabbix123
# 创建日志文件并修改权限
[root@zabbix-server ~]# touch /var/log/zabbix_server.log
[root@zabbix-server ~]# chown zabbix.zabbix /var/log/zabbix_server.log
4. 配置 systemd 服务
[root@zabbix-server ~]# vim /usr/lib/systemd/system/zabbix-server.service
[Unit]
Description=Zabbix Server with MySQL DB
After=syslog.target network.target mariadb.service
[Service]
Type=simple
ExecStart=/usr/local/sbin/zabbix_server -f
User=zabbix
[Install]
WantedBy=multi-user.target
# 启动服务
[root@zabbix-server ~]# systemctl start zabbix-server
[root@zabbix-server ~]# netstat -ntap | grep 10051 # 应看到监听
5. 复制前端页面
[root@zabbix-server ~]# cp -r /root/zabbix-6.0.6/ui/* /usr/share/nginx/html/
[root@zabbix-server ~]# chown -R nginx:nginx /usr/share/nginx/html/
[root@zabbix-server ~]# systemctl restart nginx
6. Web 前端安装
访问 http://10.1.8.131,按照向导完成安装:
- 检查 PHP 环境
- 配置数据库连接(主机
127.0.0.1,端口3306,数据库zabbix,用户zabbix,密码zabbix123) - 完成安装后,配置文件
/usr/share/nginx/html/conf/zabbix.conf.php自动生成。
默认登录信息:
- 用户名:
Admin - 密码:
zabbix

被监控端安装 Agent2
环境准备(mysql)
[root@mysql ~]# systemctl stop firewalld
[root@mysql ~]# setenforce 0
[root@mysql ~]# hostnamectl set-hostname mysql
安装 Agent2
# 更新 CA 证书
[root@mysql ~]# yum update ca-certificates -y
# 安装 Zabbix 官方仓库
[root@mysql ~]# rpm -ivh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm
# 安装 Agent2
[root@mysql ~]# yum install zabbix-agent2 -y
配置 Agent2
[root@mysql ~]# vim /etc/zabbix/zabbix_agent2.conf
13 PidFile=/var/run/zabbix/zabbix_agent2.pid
32 LogFile=/var/log/zabbix/zabbix_agent2.log
43 LogFileSize=0
82 Server=10.1.8.131 # 指向 Zabbix Server
135 ServerActive=10.1.8.131 # 指向 Zabbix Server
146 Hostname=mysql # 主机名
283 Include=/etc/zabbix/zabbix_agent2.d/plugins.d/*.conf
# 启动并设置开机自启
[root@mysql ~]# systemctl enable zabbix-agent2 --now
在 Zabbix Web 中添加被监控主机
- 登录 Zabbix Web(
http://10.1.8.131)。 - 导航至 配置 → 主机 → 创建主机。
- 填写:
- 主机名称:
mysql - 可见名称:
mysql - 群组:选择(如
Linux servers) - IP 地址:
10.1.8.132 - 端口:
10050(Agent 默认端口)
- 主机名称:
- 模板:搜索并添加
Template OS Linux by Zabbix agent或相应模板。 - 单击 添加。
- 稍等片刻,主机状态变为绿色(可用)。
配置邮件告警
1. 在 Zabbix Server 上安装 mailx
[root@zabbix-server ~]# yum install mailx -y
2. 配置 QQ 邮箱(使用 SMTP)
编辑 /etc/mail.rc,在末尾添加:
set from=xxxxxxxx@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=xxxxxxx@qq.com
set smtp-auth-password=xxxxxxxxxxxxxxx # 邮箱授权码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/root/.certs
获取 QQ 邮箱 SSL 证书:
[root@zabbix-server ~]# mkdir -p /root/.certs/
[root@zabbix-server ~]# echo -n | openssl s_client -connect smtp.qq.com:465 | \
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
[root@zabbix-server ~]# certutil -A -n "GeoTrust SSL CA" -t "C," -d ~/.certs -i ~/.certs/qq.crt
[root@zabbix-server ~]# certutil -A -n "GeoTrust Global CA" -t "C," -d ~/.certs -i ~/.certs/qq.crt
[root@zabbix-server ~]# cd /root/.certs/
[root@zabbix-server .certs]# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt
3. 配置 Zabbix 告警脚本
# 修改 zabbix_server.conf 指定脚本目录
[root@zabbix-server ~]# vim /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts
# 创建目录并授权
[root@zabbix-server ~]# mkdir -p /usr/lib/zabbix/alertscripts
[root@zabbix-server ~]# chown -R zabbix:zabbix /usr/lib/zabbix/alertscripts
# 创建邮件发送脚本
[root@zabbix-server ~]# vim /usr/lib/zabbix/alertscripts/mailx.sh
#!/bin/bash
#send mail
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
# 授权
[root@zabbix-server ~]# touch /tmp/mailx.log
[root@zabbix-server ~]# chown zabbix.zabbix /tmp/mailx.log
[root@zabbix-server ~]# chmod +x /usr/lib/zabbix/alertscripts/mailx.sh
# 测试脚本
[root@zabbix-server ~]# cd /usr/lib/zabbix/alertscripts/
[root@zabbix-server alertscripts]# ./mailx.sh xxxxxxx@qq.com "hello mailx.sh" "This is test"
# 检查邮箱是否收到
4. 在 Zabbix Web 中配置报警媒介
- 登录 Zabbix Web,导航至 管理 → 报警媒介类型 → 创建媒体类型。
- 名称:
mail-test - 类型:脚本
- 脚本名称:
mailx.sh - 脚本参数(按顺序添加):
{ALERT.SENDTO}{ALERT.SUBJECT}{ALERT.MESSAGE}
- 单击 添加。
5. 为用户配置报警媒介
- 导航至 管理 → 用户,点击 Admin 用户。
- 切换到 报警媒介 选项卡,单击 添加。
- 类型选择
mail-test,收件人填写自己的邮箱地址。 - 设置接收时间、严重性等,单击 添加。
- 单击 更新 保存。
6. 配置动作(Action)
-
导航至 配置 → 动作 → Trigger actions。
-
删除默认动作(如有),单击 创建动作。
-
名称:
发送邮件告警 -
条件:默认(或根据需求调整)。
-
操作 选项卡:
-
添加操作:发送消息
-
发送给:
Admin(或指定用户) -
仅发送给:
mail-test -
主题:
{TRIGGER.STATUS}:{TRIGGER.NAME} -
消息:
告警主机: {HOST.NAME} 告警 IP: {HOST.IP} 告警时间: {EVENT.DATE}-{EVENT.TIME} 告警等级: {TRIGGER.SEVERITY} 告警信息: {TRIGGER.NAME}:{ITEM.VALUE} 事件 ID: {EVENT.ID}
-
-
恢复操作 选项卡:
-
添加操作:发送消息
-
收件人:
Admin -
仅发送给:
mail-test -
主题:
{TRIGGER.STATUS}:{TRIGGER.NAME} -
消息:
恢复主机: {HOST.NAME} 恢复 IP: {HOST.IP} 恢复时间: {EVENT.DATE}-{EVENT.TIME} 恢复等级: {TRIGGER.SEVERITY} 恢复信息: {TRIGGER.NAME}:{ITEM.VALUE} 恢复 ID: {EVENT.ID}
-
-
单击 添加 完成。
验证告警
-
在被监控端(mysql)停止 MySQL 服务:
[root@mysql ~]# systemctl stop mysqld -
等待几分钟,Zabbix 触发告警,检查邮箱是否收到告警邮件。
-
重新启动服务后,应收到恢复邮件。
监控仪表盘
登录 Zabbix Web 首页可查看仪表盘,显示主机状态、触发器问题、最新数据等。
6. **恢复操作** 选项卡:
- 添加操作:**发送消息**
- 收件人:`Admin`
- 仅发送给:`mail-test`
- **主题**:
```
{TRIGGER.STATUS}:{TRIGGER.NAME}
```
- **消息**:
```
恢复主机: {HOST.NAME}
恢复 IP: {HOST.IP}
恢复时间: {EVENT.DATE}-{EVENT.TIME}
恢复等级: {TRIGGER.SEVERITY}
恢复信息: {TRIGGER.NAME}:{ITEM.VALUE}
恢复 ID: {EVENT.ID}
```
7. 单击 **添加** 完成。
------
## 验证告警
- 在被监控端(mysql)停止 MySQL 服务:
```bash
[root@mysql ~]# systemctl stop mysqld
-
等待几分钟,Zabbix 触发告警,检查邮箱是否收到告警邮件。
-
重新启动服务后,应收到恢复邮件。
监控仪表盘
登录 Zabbix Web 首页可查看仪表盘,显示主机状态、触发器问题、最新数据等。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)