Zabbix 企业级分布式监控

目录

简介

一、监控系统基础

[1.1 监控的价值](#1.1 监控的价值)

[1.2 监控的 5 大类型与 5 大层次](#1.2 监控的 5 大类型与 5 大层次)

[1.3 监控系统的实现原理](#1.3 监控系统的实现原理)

二、Zabbix:企业级监控方案

[2.1 Zabbix 简介](#2.1 Zabbix 简介)

[2.2 Zabbix 核心功能特性](#2.2 Zabbix 核心功能特性)

[2.3 Zabbix 角色与架构](#2.3 Zabbix 角色与架构)

[三、Zabbix 部署案例](#三、Zabbix 部署案例)

[3.1 资源清单](#3.1 资源清单)

[3.2 基础环境配置](#3.2 基础环境配置)

(1)关闭防火墙

[(2)关闭 SELinux](#(2)关闭 SELinux)

(3)时间同步

(4)修改主机名

[3.3 部署 Zabbix Server](#3.3 部署 Zabbix Server)

[(1)添加 Zabbix 源](#(1)添加 Zabbix 源)

(2)安装依赖软件

[(3)配置 MySQL 数据库](#(3)配置 MySQL 数据库)

[(4)导入 Zabbix 初始数据](#(4)导入 Zabbix 初始数据)

[(5)配置 Zabbix Server](#(5)配置 Zabbix Server)

[(6)配置 Nginx(Web 服务)](#(6)配置 Nginx(Web 服务))

(7)启动服务并设置自启

[3.4 Zabbix Web 界面配置](#3.4 Zabbix Web 界面配置)

(1)访问登录页面

(2)语言与许可协议

(3)环境检查

(4)配置数据库连接

[(5)设置 Server 名称与时区](#(5)设置 Server 名称与时区)

(6)完成安装

(7)登录验证

[3.5 部署 Zabbix Proxy(分布式监控)](#3.5 部署 Zabbix Proxy(分布式监控))

[(1)添加 Zabbix 源(同 Server)](#(1)添加 Zabbix 源(同 Server))

[(2)安装 Proxy 组件](#(2)安装 Proxy 组件)

[(3)导入 Proxy 初始数据](#(3)导入 Proxy 初始数据)

[(4)配置 Proxy](#(4)配置 Proxy)

[(5)启动 Proxy 并设置自启](#(5)启动 Proxy 并设置自启)

[(6)Web 界面添加 Proxy](#(6)Web 界面添加 Proxy)

[3.6 部署 Zabbix Agent(被监控节点)](#3.6 部署 Zabbix Agent(被监控节点))

[(1)添加 Zabbix 源(同 Server)](#(1)添加 Zabbix 源(同 Server))

[(2)安装 Agent](#(2)安装 Agent)

[(3)配置 Agent](#(3)配置 Agent)

[(4)启动 Agent 并设置自启](#(4)启动 Agent 并设置自启)

[(5)Web 界面添加主机](#(5)Web 界面添加主机)

[四、常见问题:解决 Zabbix 字体显示乱码](#四、常见问题:解决 Zabbix 字体显示乱码)

总结


简介

在 IT 运维领域,监控系统如同 "千里眼" 与 "顺风耳",是保障业务稳定运行的核心支柱。据行业经验,监控工作在运维环节中占比可达 30%,构建一套高效的监控告警系统更是运维工程师的核心能力。本文将从监控系统的基础原理出发,讲解 Zabbix 的功能特性,并完成 Zabbix 企业级分布式监控的部署与配置。

一、监控系统基础

1.1 监控的价值

监控(Monitoring)的本质是 "检测与预防",通过对 IT 系统全链路的指标采集、分析与告警,提前发现潜在问题,避免故障扩散。在复杂的 IT 架构中,监控需覆盖从底层硬件到上层业务的全栈场景。

1.2 监控的 5 大类型与 5 大层次

  • 5 大监控类型:应用性能监控、业务交易监控、网络性能监控、操作系统监控(文档中列 4 项,实际涵盖全场景)。
  • 5 大逻辑层次(从底层到上层):
  • 基础设施监控:网络设备(交换机、路由器)的流量、丢包率、连接数等,由运维负责,保障底层稳定性。
  • 系统层监控:物理机 / 虚拟机 / 操作系统的 CPU 使用率、内存占用、磁盘 IO、网络带宽等核心指标。
  • 应用层监控:接口响应时间、调用量、错误率、慢 SQL、缓存命中率等服务相关指标。
  • 业务监控:用户登录、下单、支付等核心业务流程数据,为运营决策和战略调整提供数据支撑。
  • 端用户体验监控:用户端(APP、H5、PC)的性能、错误码、地域 / 运营商访问情况等,直接反映用户感知。

1.3 监控系统的实现原理

一个完整的监控系统需包含数据采集数据处理(存储、分析、告警、展示) 两大部分,核心组件与工作模式如下:

  • 采集协议:分为专用客户端(如 Zabbix Agent)和公用协议(SNMP、IPMI、SSH、Telnet 等)。
  • 工作模式
  • 被动模式:服务器主动向客户端采集数据(对服务器开销大,适合小规模场景)。
  • 主动模式:客户端主动向服务器上报数据(对服务器开销小,适合大规模场景)。
  • 代理架构:在大规模 / 跨地域场景中,通过 C/S/P(Client/Proxy/Server)架构分摊服务器压力,支持分布式监控。

二、Zabbix:企业级监控方案

2.1 Zabbix 简介

Zabbix 是一款开源的企业级分布式监控系统,支持从服务器、网络设备到 Web 应用、数据库的全场景监控。其优势在于:

  • 跨平台适配:可运行于 Linux、Windows、AIX 等主流系统。
  • 开源免费:基于 GPLv2 协议,源代码公开可定制。
  • 功能全面:覆盖数据采集、告警、可视化、自动化等全流程。

2.2 Zabbix 核心功能特性

  1. 数据收集:支持 SNMP、IPMI、自定义检测,可按自定义间隔采集数据,包含 Server、Proxy、Agent 三种角色。
  2. 灵活告警:通过 "触发器(trigger)" 定义阈值,支持告警升级、多渠道通知(邮件、短信等),可结合宏变量自定义告警信息,甚至通过远程命令实现自动化修复。
  3. 可视化与报告:内置实时绘图、网络拓扑图、自定义面板,支持生成监控报告,助力数据可视化分析。
  4. 历史数据管理:数据存储于数据库,支持配置保留周期,内置自动清理机制。
  5. 自动化能力:支持网络设备自动发现、Agent 自动注册、模板继承(减少重复配置)。
  6. 高扩展性:通过 API 支持第三方集成,Agent 轻量可扩展,支持大规模分布式部署(Proxy 架构)。

2.3 Zabbix 角色与架构

Zabbix 采用分布式架构,核心角色包括:

  • Zabbix Server:核心组件,负责接收、存储、分析数据,触发告警。
  • Zabbix Proxy:代理节点,用于大规模场景,分摊 Server 压力,支持跨网络监控。
  • Zabbix Agent:部署在被监控节点,负责采集本地数据(主动 / 被动模式)。
  • Zabbix Web:基于 PHP 的 Web 界面,用于配置、管理和查看监控数据。

架构示意图如下:

复制代码
Client(Agent)<--> Proxy <--> Server(数据存储/分析/告警)<--> Web界面

三、Zabbix 部署案例

3.1 资源清单

本次部署采用 4 台 openEuler 24.03 主机,配置如下:

|-----------------|------|----------|-----------------|---------------|
| 操作系统 | 配置 | 主机名 | IP 地址 | 角色 |
| openEuler 24.03 | 2C4G | zabbix | 192.168.207.137 | Zabbix Server |
| openEuler 24.03 | 2C4G | proxy | 192.168.207.138 | Zabbix Proxy |
| openEuler 24.03 | 2C4G | server01 | 192.168.207.139 | 被监控节点 |
| openEuler 24.03 | 2C4G | server02 | 192.168.207.140 | 被监控节点 |

3.2 基础环境配置

所有节点需完成以下预处理(以 root 用户操作):

(1)关闭防火墙

防火墙可能拦截 Zabbix 通信,需关闭并禁用自启动:

复制代码
systemctl stop firewalld  # 临时关闭防火墙
systemctl disable firewalld  # 永久禁用防火墙(生产环境可按需配置规则)
(2)关闭 SELinux

SELinux 可能限制进程权限,临时关闭并永久禁用:

复制代码
setenforce 0  # 临时关闭(立即生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config  # 永久禁用(需重启)
(3)时间同步

确保所有节点时间一致(避免日志与监控数据时间错乱):

复制代码
timedatectl set-timezone Asia/Shanghai  # 设置时区为上海
chronyc sources -v  # 同步时间(需安装chrony:dnf install -y chrony)
(4)修改主机名

按资源清单设置主机名,便于识别角色:

复制代码
# 在zabbix节点执行
hostnamectl set-hostname zabbix
# 在proxy节点执行
hostnamectl set-hostname proxy
# 在server01节点执行
hostnamectl set-hostname server01
# 在server02节点执行
hostnamectl set-hostname server02

3.3 部署 Zabbix Server

Zabbix Server 是核心节点,负责数据存储与分析,需关联数据库(本次用 MySQL)。

(1)添加 Zabbix 源

Zabbix 官方源提供稳定版本,适用于 RHEL 系系统(openEuler 兼容):

复制代码
rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm
dnf clean all  # 清理缓存,确保源生效
(2)安装依赖软件

需安装 Zabbix Server、Web 组件、MySQL 及 SNMP 库:

复制代码
# 安装Zabbix Server核心组件
dnf -y install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent
# 安装MySQL数据库(Zabbix 6.4要求MySQL 8.0.30+)
dnf -y install mysql-server-8.0.41 mysql
# 安装SNMP依赖(监控网络设备需用到)
dnf -y install https://www.rpmfind.net/linux/centos-stream/9-stream/AppStream/x86_64/os/Packages/net-snmp-libs-5.9.1-17.el9.x86_64.rpm
(3)配置 MySQL 数据库

Zabbix 需数据库存储监控数据,需创建库、用户并授权:

  1. 启动 MySQL 并设置开机自启:

    systemctl enable mysqld --now # --now表示立即启动

  2. 登录 MySQL 并配置(默认无密码,首次登录直接回车):

    mysql -uroot

  3. 执行 SQL 语句(设置 root 密码、创建 Zabbix 库和用户):

    -- 设置root本地登录密码(示例为123456,生产环境需复杂密码)
    ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
    FLUSH PRIVILEGES; # 刷新权限

    -- 创建Zabbix主数据库(utf8mb4支持中文)
    create database zabbix character set utf8mb4 collate utf8mb4_bin;
    -- 创建Zabbix用户(本地访问)
    create user zabbix@localhost identified by 'zabbix';
    grant all privileges on zabbix.* to zabbix@localhost;

    -- 创建Proxy数据库(若需部署Proxy)
    create database zabbix_proxy character set utf8mb4 collate utf8mb4_bin;
    -- 允许Zabbix用户远程访问Proxy库(Proxy需连接Server的数据库)
    create user zabbix@'%' identified by 'zabbix';
    grant all privileges on zabbix_proxy.* to zabbix@localhost;
    grant all privileges on zabbix_proxy.* to zabbix@'%';

    -- 允许创建存储函数(导入数据时需要)
    set global log_bin_trust_function_creators=1;
    quit; # 退出MySQL

(4)导入 Zabbix 初始数据

Zabbix 提供预设 SQL 脚本,需导入主数据库:

复制代码
# 导入Server初始数据(输入密码zabbix)
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

# 导入完成后关闭存储函数创建权限(安全加固)
mysql -uroot -p  # 输入root密码123456
set global log_bin_trust_function_creators=0;
quit;
(5)配置 Zabbix Server

修改配置文件,关联数据库密码:

复制代码
vim /etc/zabbix/zabbix_server.conf
# 找到129行左右,取消注释并设置数据库密码
DBPassword=zabbix  # 与之前创建的zabbix用户密码一致
(6)配置 Nginx(Web 服务)

Zabbix Web 通过 Nginx 提供访问,需设置监听端口:

复制代码
vim /etc/nginx/conf.d/zabbix.conf
# 找到并修改监听端口(避免与其他服务冲突,示例用8080)
listen 8080;
server_name _;  # 保持默认
(7)启动服务并设置自启
复制代码
# 重启相关服务
systemctl restart zabbix-server zabbix-agent nginx php-fpm
# 设置开机自启
systemctl enable zabbix-server zabbix-agent nginx php-fpm

3.4 Zabbix Web 界面配置

通过 Web 界面完成 Zabbix 初始化,步骤如下:

(1)访问登录页面

在浏览器输入 Server 节点 IP + 端口:​​http://192.168.207.137:8080/​

(2)语言与许可协议

选择 "中文"(支持多语言),同意 GPLv2 许可协议,点击 "下一步"。

(3)环境检查

系统会自动检测依赖(如 PHP 版本、数据库驱动等),全部通过后点击 "下一步"。

(4)配置数据库连接
  • 数据库类型:MySQL
  • 服务器:localhost(数据库与 Server 同机)
  • 端口:3306(MySQL 默认)
  • 数据库名:zabbix
  • 用户名:zabbix
  • 密码:zabbix(与之前配置一致)
    点击 "下一步"。
(5)设置 Server 名称与时区
  • Zabbix 主机名称:保持默认(或自定义)
  • 时区:选择 "Asia/Shanghai"(上海时区)
    点击 "下一步"。
(6)完成安装

确认配置无误后,点击 "下一步",提示 "Zabbix 前端已配置好" 即完成。

(7)登录验证

默认账号:​​Admin​​​,默认密码:​​zabbix​​(首次登录建议修改密码)。

3.5 部署 Zabbix Proxy(分布式监控)

Proxy 用于分担 Server 压力,适合大规模监控场景,部署步骤如下:

(1)添加 Zabbix 源(同 Server)
复制代码
rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm
dnf clean all
(2)安装 Proxy 组件
复制代码
dnf -y install zabbix-proxy-mysql zabbix-sql-scripts zabbix-selinux-policy mysql
# 安装SNMP依赖(同Server)
dnf -y install https://www.rpmfind.net/linux/centos-stream/9-stream/AppStream/x86_64/os/Packages/net-snmp-libs-5.9.1-17.el9.x86_64.rpm
(3)导入 Proxy 初始数据

Proxy 数据需存储在之前创建的​​zabbix_proxy​​库(在 Proxy 节点执行):

复制代码
# 输入zabbix用户密码(zabbix)
zcat /usr/share/zabbix-sql-scripts/mysql/proxy.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix_proxy -h 192.168.207.137
(4)配置 Proxy
复制代码
vim /etc/zabbix/zabbix_proxy.conf
# 修改以下参数:
Server=192.168.207.137  # 指向Zabbix Server的IP
Hostname=Zabbix proxy  # 与Web添加时的名称一致
DBHost=192.168.207.137  # 数据库主机(Server节点IP)
DBPassword=zabbix  # 数据库密码
(5)启动 Proxy 并设置自启
复制代码
systemctl start zabbix-proxy
systemctl enable zabbix-proxy
(6)Web 界面添加 Proxy
  • 登录 Zabbix Web,进入 "管理"→"Agent 代理程序"→"创建代理"
  • 代理名称:与​zabbix_proxy.conf​​Hostname​一致(Zabbix proxy)
  • 代理类型:主动式(Proxy 主动向 Server 汇报)
  • 点击 "添加"。

3.6 部署 Zabbix Agent(被监控节点)

在被监控节点(server01、server02)部署 Agent,步骤如下:

(1)添加 Zabbix 源(同 Server)
复制代码
rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm
dnf clean all
(2)安装 Agent
复制代码
dnf -y install zabbix-agent
(3)配置 Agent
复制代码
vim /etc/zabbix/zabbix_agentd.conf
# 修改以下参数:
Server=192.168.207.137  # 被动模式:允许哪个节点采集数据(Server或Proxy)
ServerActive=192.168.207.137  # 主动模式:向哪个节点上报数据(与Server一致)
Hostname=server01  # 与Web添加的主机名一致(server01节点用此名,server02改为server02)
(4)启动 Agent 并设置自启
复制代码
systemctl start zabbix-agent
systemctl enable zabbix-agent
(5)Web 界面添加主机
  • 进入 "数据采集"→"主机"→"创建主机"
  • 主机名称:与 Agent 配置的​Hostname​一致(如 server01)
  • 主机群组:选择或创建(如 "Linux 服务器")
  • 接口:添加 "Agent",IP 地址填写被监控节点 IP(192.168.207.139)
  • 模板:链接 "Template OS Linux by Zabbix agent"(系统自带模板)
  • (若通过 Proxy 监控)在 "由代理程序监测" 中选择之前创建的 Proxy
  • 点击 "添加"。

四、常见问题:解决 Zabbix 字体显示乱码

默认情况下,Zabbix 图表可能因缺少中文字体导致乱码,解决方法如下:

  1. 查找字体配置

    查找字体路径定义

    grep "ZBX_FONTPATH" /usr/share/zabbix/include/defines.inc.php

    输出:define('ZBX_FONTPATH', realpath('assets/fonts'));

    查找默认字体名称

    grep "ZBX_GRAPH_FONT_NAME" /usr/share/zabbix/include/defines.inc.php

    输出:define('ZBX_GRAPH_FONT_NAME', 'graphfont');

  2. 替换字体文件

  • 上传中文字体文件(如微软雅黑​msyh.ttc​)到​/usr/share/zabbix/assets/fonts/​

  • 创建软链接替换默认字体:

    cd /usr/share/zabbix/assets/fonts
    ln -snf msyh.ttc graphfont.ttf # 让系统识别为默认字体

  1. 刷新页面:字体生效,中文正常显示。

总结

Zabbix 作为企业级监控方案,凭借灵活的架构、丰富的功能和开源免费的优势,被广泛应用于各行业。本文从原理到实战,详细讲解了 Zabbix 的部署流程,涵盖 Server、Proxy、Agent 全组件。实际生产中,还可结合模板自定义、自动发现、告警升级等功能,进一步提升监控效率。

监控系统的核心价值不仅在于 "发现问题",更在于 "预防问题"。通过 Zabbix 构建全链路监控体系,可为业务稳定运行提供坚实保障。