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 拉取数据(默认模式,配置简单)。

使用场景

  1. 服务器监控:Linux/Windows 服务器的 CPU、内存、磁盘、网络、进程、负载、日志。
  2. 网络设备监控:交换机、路由器、防火墙的端口流量、状态、CPU、内存(SNMP)。
  3. 应用服务监控:Web(Nginx/Apache)、数据库(MySQL/PostgreSQL/Oracle)、中间件(Redis、Kafka、Tomcat)、容器(Docker/K8s)。
  4. 云平台监控:阿里云、AWS、VMware、OpenStack 虚拟机与资源状态。
  5. 业务指标监控:接口响应时间、订单量、用户在线数、API 成功率(自定义脚本/Zabbix Sender)。
  6. 分布式/跨机房监控:多地域机房、网络隔离环境(使用 Zabbix Proxy)。
  7. 告警与自愈:异常自动通知、执行恢复脚本、服务重启、故障升级通知。

搭建 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 中添加被监控主机

  1. 登录 Zabbix Web(http://10.1.8.131)。
  2. 导航至 配置 → 主机 → 创建主机
  3. 填写:
    • 主机名称:mysql
    • 可见名称:mysql
    • 群组:选择(如 Linux servers
    • IP 地址:10.1.8.132
    • 端口:10050(Agent 默认端口)
  4. 模板:搜索并添加 Template OS Linux by Zabbix agent 或相应模板。
  5. 单击 添加
  6. 稍等片刻,主机状态变为绿色(可用)。

配置邮件告警

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 中配置报警媒介

  1. 登录 Zabbix Web,导航至 管理 → 报警媒介类型 → 创建媒体类型
  2. 名称:mail-test
  3. 类型:脚本
  4. 脚本名称:mailx.sh
  5. 脚本参数(按顺序添加):
    • {ALERT.SENDTO}
    • {ALERT.SUBJECT}
    • {ALERT.MESSAGE}
  6. 单击 添加

5. 为用户配置报警媒介

  1. 导航至 管理 → 用户,点击 Admin 用户。
  2. 切换到 报警媒介 选项卡,单击 添加
  3. 类型选择 mail-test,收件人填写自己的邮箱地址。
  4. 设置接收时间、严重性等,单击 添加
  5. 单击 更新 保存。

6. 配置动作(Action)

  1. 导航至 配置 → 动作 → Trigger actions

  2. 删除默认动作(如有),单击 创建动作

  3. 名称发送邮件告警

  4. 条件:默认(或根据需求调整)。

  5. 操作 选项卡:

    • 添加操作:发送消息

    • 发送给: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}
      
  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 服务:

    [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 首页可查看仪表盘,显示主机状态、触发器问题、最新数据等。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐