Zabbix搭建及简单使用

Zabbix 部署与配置手册

当前支持版本

版本Zabbix 7.4Zabbix 7.2Zabbix 7.0 LTSZabbix 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 20262025年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-server10.1.8.131装 Zabbix Server
mysql10.1.8.132被监控端

1. 安装 Nginx

# 创建 Nginx yum 源[root@zabbix-server ~]# vim /etc/yum.repos.d/nginx.repo[nginx]name=nginx repobaseurl=http://nginx.org/packages/centos/7/$basearch/enabled=1gpgcheck=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=1gpgcheck=0# 安装 MariaDB[root@zabbix-server ~]# yum -y install mariadb-server mariadb# 启动并设置开机自启[root@zabbix-server ~]# systemctl enable mariadb --now# 设置 root 密码并清理匿名用户[root@zabbix-server ~]# mysqlMariaDB[(none)]>DELETE FROM mysql.user WHEREUser='';MariaDB[(none)]>ALTERUSERroot@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.conf8user=nginx10group=nginx# 配置 Nginx 默认站点[root@zabbix-server ~]# vim /etc/nginx/conf.d/default.conf# 在 index 行添加 index.php9index index.php index.html index.htm;# 取消 PHP 处理部分的注释,并修改 root 和 fastcgi_param29location ~\.php${30root /usr/share/nginx/html;31fastcgi_pass127.0.0.1:9000;32fastcgi_index index.php;33fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name;34include fastcgi_params;}

5. 配置 PHP

[root@zabbix-server ~]# vim /etc/php.ini202short_open_tag=On359expose_php=Off368max_execution_time=300378max_input_time=300389memory_limit=128M656post_max_size=16M799upload_max_filesize=2M800always_populate_raw_post_data=-1877date.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";elseecho"fail";?>

注:mysql_connect自 PHP 5.5.0 起已废弃,建议使用 mysqli 或 PDO。


7. 创建 Zabbix 数据库及账号

[root@zabbix-server ~]# mysql -uroot -proot123MariaDB[(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数据库连接成功";elseecho"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 -proot123MariaDB[(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.conf38LogFile=/var/log/zabbix_server.log123DBPassword=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 DBAfter=syslog.target network.target mariadb.service[Service]Type=simpleExecStart=/usr/local/sbin/zabbix_server-fUser=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.conf13PidFile=/var/run/zabbix/zabbix_agent2.pid32LogFile=/var/log/zabbix/zabbix_agent2.log43LogFileSize=082Server=10.1.8.131# 指向 Zabbix Server135ServerActive=10.1.8.131# 指向 Zabbix Server146Hostname=mysql# 主机名283Include=/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,在末尾添加:

setfrom=xxxxxxxx@qq.comsetsmtp=smtps://smtp.qq.com:465setsmtp-auth-user=xxxxxxx@qq.comsetsmtp-auth-password=xxxxxxxxxxxxxxx# 邮箱授权码setsmtp-auth=loginsetssl-verify=ignoresetnss-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.confAlertScriptsPath=/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 mailmessages=`echo$3|tr'\r\n''\n'`subject=`echo$2|tr'\r\n''\n'`echo"${messages}"|mail-s"${subject}"$1>>/tmp/mailx.log2>&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 首页可查看仪表盘,显示主机状态、触发器问题、最新数据等。