部署Zabbix企业级分布式监控

目录

[1. 监控系统的核心价值与功能概述](#1. 监控系统的核心价值与功能概述)

[1.1 监控在 IT 运维中的关键地位](#1.1 监控在 IT 运维中的关键地位)

[1.2 监控的五大类型与五层架构](#1.2 监控的五大类型与五层架构)

五大监控类型

五层监控架构

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

[2.1 模块组成与基本模型](#2.1 模块组成与基本模型)

[2.2 数据采集协议分类](#2.2 数据采集协议分类)

[2.3 主动与被动监控模式](#2.3 主动与被动监控模式)

[2.4 大规模监控的代理架构](#2.4 大规模监控的代理架构)

[3. 主流开源监控产品对比](#3. 主流开源监控产品对比)

[4. Zabbix 系统深度解析](#4. Zabbix 系统深度解析)

[4.1 Zabbix 的定义与核心优势](#4.1 Zabbix 的定义与核心优势)

[4.2 功能特性详解](#4.2 功能特性详解)

[4.3 角色划分与架构设计](#4.3 角色划分与架构设计)

核心角色

整体架构

[5. Zabbix 企业级部署实战](#5. Zabbix 企业级部署实战)

[5.1 部署环境准备与资源清单](#5.1 部署环境准备与资源清单)

资源清单

基础环境配置

[5.2 Zabbix Server 部署全流程](#5.2 Zabbix Server 部署全流程)

[5.3 Zabbix Proxy 部署与配置](#5.3 Zabbix Proxy 部署与配置)

[5.4 Zabbix Agent 客户端部署](#5.4 Zabbix Agent 客户端部署)

[5.5 Web 界面配置与初始化](#5.5 Web 界面配置与初始化)

[6. Zabbix 高级配置与优化:解决图像字体问题](#6. Zabbix 高级配置与优化:解决图像字体问题)


1. 监控系统的核心价值与功能概述

1.1 监控在 IT 运维中的关键地位

"运筹帷幄之中,决胜千里之外",这句话精准概括了监控系统在 IT 运维中的核心价值。在 IT 运维工作中,监控占据着约 30% 的重要比例,构建一个高效可用的监控告警系统是运维工程师的核心任务之一,而能熟练掌握企业级监控系统部署的专业人才更是稀缺。

监控系统通过实时检测 IT 基础设施和业务应用的运行状态,实现故障的提前预防和快速响应,从而保障业务的持续稳定运行。没有监控系统,IT 团队将陷入 "盲人摸象" 的困境,无法及时感知和解决系统问题,可能导致业务中断和重大损失。

1.2 监控的五大类型与五层架构

五大监控类型

在计算机领域,监控可细分为五种类型,涵盖了 IT 系统的各个层面:

  • 应用性能监控:聚焦应用程序的响应时间、吞吐量、错误率等指标。
  • 业务交易监控:跟踪核心业务流程的完成情况和效率。
  • 网络性能监控:关注网络带宽、延迟、丢包等网络指标。
  • 操作系统监控:监测服务器的 CPU、内存、磁盘等系统资源。
  • 基础设施监控:覆盖网络设备、服务器硬件等底层设施至。

这些类型并非孤立存在,实际监控中通常会综合覆盖多个领域,形成全方位的监控体系。

五层监控架构

按照逻辑层次,监控行为可划分为从底层到上层的五个层次,每层对应不同的监控对象和指标:

  1. 基础设施监控

    由运维人员负责,针对网络交换机、路由器等底层设备,监控网络流量、丢包率、错包率、连接数等核心指标。这些设备的稳定性直接影响上层服务,是整个 IT 系统的基石。

  2. 系统层监控

    涵盖物理机、虚拟机和操作系统,核心监控指标包括 CPU 使用率、内存占用率、磁盘 IO 和网络带宽。这些指标直接反映服务器的运行状态,是判断系统健康度的基础。

  3. 应用层监控

    与业务服务紧密相关,包括 URL 访问性能(响应时间、调用数、延迟)、服务错误率、SQL 性能(慢 SQL)、缓存命中率等。通过监控这些指标,可及时发现应用程序的性能瓶颈。

  4. 业务监控

    针对直接影响业务交易的指标,例如交易网站的用户登录、注册、下单、支付等情况。这些数据为运营决策和公司战略提供直接支持,是连接 IT 与业务的桥梁。

  5. 端用户体验监控

    关注用户端的使用体验,包括页面加载速度、操作响应时间、错误返回码,以及用户所在地区、使用的运营商、操作系统和浏览器版本等。通过这类监控,可及时发现影响用户体验的问题。

2. 监控系统的实现原理

2.1 模块组成与基本模型

一个完整的监控系统主要由两部分组成:

  • 数据采集部分:通过 Agent(代理程序)收集被监控对象的数据。
  • 数据处理部分:由 Server 负责数据存储、分析、告警和展示。

其基本模型可简化为:Agent 采集数据后,将数据发送至 Server,Server 对数据进行处理并通过可视化界面展示,同时在异常时触发告警。

复制代码
[数据采集 Agent] → [Server (分析、告警、数据存储、展示)]

(如图:监控系统的基本模型,展示了 Agent 与 Server 的数据流关系)

2.2 数据采集协议分类

监控数据采集按协议可分为两类:

  1. 专用客户端采集(私有协议):通过监控系统专属的客户端程序采集数据,通常能获取更细致的指标,但兼容性较差。
  2. 公用协议采集 :基于通用协议进行数据采集,兼容性强,包括:
    • SNMP(简单网络管理协议):广泛用于网络设备监控。
    • IPMI(智能平台管理接口):用于服务器硬件监控。
    • SSH/Telnet:通过远程登录执行命令获取数据。

(如图:监控系统数据采集协议分类,清晰展示了私有协议与公有协议的包含关系)

2.3 主动与被动监控模式

监控系统的数据采集有两种工作模式:

  • 被动模式:由 Server 主动向 Agent 请求数据。此模式对 Server 开销较大,适合小规模监控环境。

  • 主动模式:由 Agent 主动将数据上报至 Server。此模式对 Server 开销较小,适合大规模监控环境。

    被动模式:Server → [请求数据] → Agent → [返回数据] → Server
    主动模式:Agent → [主动上报数据] → Server

(如图:监控系统数据采集的工作模式,对比展示了被动模式与主动模式的数据流方向)

2.4 大规模监控的代理架构

对于大规模监控环境(节点多、类型杂、数据量大),需采用代理架构(C/S/P 架构:Client/Proxy/Server)分摊 Server 压力,同时支持跨地域、跨网络监控。

在该架构中,Proxy 作为中转站,先收集 Client(Agent)的数据,再将汇总后的数据提交给 Server,有效降低 Server 的负载。

复制代码
Client (Agent) → [主动/被动模式] → Proxy → [转发] → Server (数据存储、分析等)

(如图:监控系统的代理架构,展示了 Client、Proxy、Server 三者的层级关系和数据流向)

3. 主流开源监控产品对比

开源监控产品各有特点,适用于不同场景,以下为常见产品的核心特性:

  • Zabbix:企业级分布式监控平台,支持服务器、网络设备、Web 应用等多对象监控,适配多种操作系统,功能全面。
  • Prometheus+Grafana:Prometheus 擅长时序数据采集存储,Grafana 专注可视化,组合后适用于云原生和容器监控。
  • Cacti:基于 RRDToo1 的网络流量监测工具,图形分析能力强,适合网络设备监控。
  • Nagios:老牌监控系统,支持多种组件监控和异常通知,配置灵活但界面较简陋🔷1-47🔷。
  • Checkmk:高可扩展,部署快、自动化程度高,分基础版(开源免费)和企业版(附加功能)。
  • OpenNMS:基于 Java/XML 的分布式平台,支持多种协议收集指标,适合大规模网络监控。
  • Netdata:Linux 实时性能监测工具,指标多、收集快,支持物理机、虚拟机、容器等。
  • LibreNMS:功能丰富的网络监控系统,易安装配置,支持多厂商设备和协议。

Zabbix 凭借其企业级特性、分布式架构和广泛的适用性,成为众多企业的首选监控解决方案。

4. Zabbix 系统深度解析

4.1 Zabbix 的定义与核心优势

Zabbix 是企业级分布式开源监控系统解决方案,基于 Web 界面提供分布式系统和网络监控功能。由 Alexei Vladishev 创建,目前由 Zabbix SIA 主导开发。

其核心优势包括:

  • 免费开源(基于 GPL v2 协议),源代码可公开获取。
  • 支持轮询和 trapping 两种数据获取方式,Web 界面可远程访问。
  • 提供灵活的通知机制和数据可视化功能,适合容量规划。

4.2 功能特性详解

Zabbix 功能丰富,涵盖监控全流程需求:

  1. 数据收集:支持可用性及性能检测,兼容 SNMP、IPMI、JMX 等协议,可自定义检测和采集间隔,包含 Server、Proxy、Agent 三种角色至。
  2. 阈值定义:通过 "触发器(trigger)" 灵活设置问题阈值,存储于后端数据库🔷1-74🔷。
  3. 告警配置:支持告警升级、自定义接收者和方式,告警信息可含宏变量,能通过远程命令执行自动化动作至。
  4. 实时绘图与展示:内置绘图功能,支持多监控项视图、网络拓扑图、自定义面板和报告生成至。
  5. 历史数据管理:数据存储于数据库,可配置保留策略,内置清理机制至。
  6. 配置与模板:一次配置长期有效,支持通过模板添加设备,模板可分组和继承至。
  7. 网络自动发现:能自动发现网络设备、Agent、文件系统、网卡等,提高配置效率至。
  8. Web 接口与 API:PHP 编写的 Web 前端访问便捷,提供 API 支持第三方程序接入至。
  9. 权限与扩展性:安全的权限认证,Agent 支持 Linux 和 Windows,C 语言开发性能高、易移植至。
  10. 复杂环境支持:通过 Proxy 轻松实现远程监控,适应跨地域场景。

4.3 角色划分与架构设计

核心角色

Zabbix 系统包含四个核心角色,分工明确:

  1. Zabbix Server:服务端守护进程,是系统核心。Agent 和 Proxy 的数据最终提交至 Server(或由 Server 主动获取),负责数据存储、分析、告警和展示。
  2. Zabbix Agent:客户端守护进程,部署在被监控对象上,收集 CPU、内存、硬盘等本地数据。
  3. Zabbix Proxy:代理守护进程,作为中转站收集数据并提交给 Server,分担 Server 负载。
  4. Zabbix Web:Web 界面,用于配置管理和监控信息查看,可与 Server 同机或单独部署。
整体架构

Zabbix 采用分布式架构,各组件通过特定端口通信:

  • Agent(10050 端口)与 Server/Proxy 通信(主动 / 被动模式)。
  • Proxy 与 Server(10051 端口)通信。
  • Web 界面通过 80 端口提供访问。

此外,Server 支持通过 Telnet、SNMP、IPMI、SSH 等协议直接监控无 Agent 的设备,数据存储于 MySQL、Oracle 等数据库。

(如图:Zabbix 架构示意图,展示了 Agent、Proxy、Server、Web 界面的连接方式及使用的端口)

5. Zabbix 企业级部署实战

5.1 部署环境准备与资源清单

资源清单

本次部署为企业级分布式环境,包含以下节点,均采用 openEuler 24.03 系统,配置 2C4G:

主机名 IP 地址 角色
zabbix 192.168.207.137 Zabbix 服务端
proxy 192.168.207.138 Zabbix 代理
server01 192.168.207.139 被监控节点
server02 192.168.207.140 被监控节点
基础环境配置

所有节点需完成以下基础配置:

  1. 关闭防火墙

    [root@localhost~]# systemctl stop firewalld
    [root@localhost ~]# systemctl disable firewalld

关闭 SELinux

复制代码
[root@localhost ~]# setenforce 0
# 永久关闭需修改/etc/selinux/config文件

时间同步

复制代码
[root@localhost ~]# timedatectl set-timezone Asia/Shanghai
[root@localhost~]# chronyc sources -v

修改主机名

复制代码
[root@localhost ~]# hostnamectl set-hostname zabbix  # 对应节点执行
[root@localhost~]# hostnamectl set-hostname proxy
[root@localhost~]# hostnamectl set-hostname server01
[root@localhost~]# hostnamectl set-hostname server02

5.2 Zabbix Server 部署全流程

Zabbix Server 是监控核心,负责数据处理和存储,部署步骤如下:

  1. 添加 Zabbix 源

    [root@zabbix~]# rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm
    [root@zabbix ~]# dnf clean all

安装软件包

安装 Server、Web 界面、Agent、数据库及依赖:

复制代码
[root@zabbix ~]# dnf -y install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent
[root@zabbix ~]# dnf -y install mysql-server-8.0.41 mysql
[root@zabbix ~]# 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

注意:Zabbix 6.4.8 要求 MySQL 8.0.30+、Nginx 1.20+、PHP 7.4.0-8.2.X。

配置数据库

启动 MySQL 并初始化:

复制代码
[root@zabbix ~]# systemctl enable mysqld --now
[root@zabbix ~]# mysql -uroot

执行 SQL 语句(设置密码、创建数据库和用户):

复制代码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
create database zabbix character set utf8mb4 collate utf8mb4_bin;
create user zabbix@localhost identified by 'zabbix';
grant all privileges on zabbix.* to zabbix@localhost;
create database zabbix_proxy character set utf8mb4 collate utf8mb4_bin;
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;

导入数据

将 Server 初始化数据导入 zabbix 数据库:

复制代码
[root@zabbix ~]# zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

导入后关闭 log_bin_trust_function_creators:

复制代码
[root@zabbix ~]# mysql -uroot -p
mysql> set global log_bin_trust_function_creators=0;
mysql> quit;

配置 Zabbix Server

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

复制代码
[root@zabbix ~]# vi /etc/zabbix/zabbix_server.conf
# 约129行,设置DBPassword=zabbix

配置 Web 界面(Nginx)

修改 Nginx 配置,设置监听端口:

复制代码
[root@zabbix ~]# vi /etc/nginx/conf.d/zabbix.conf
# 取消注释,设置listen 8080;

启动服务

启动 Server、Agent、Nginx、PHP-FPM 并设为开机自启:

复制代码
[root@zabbix ~]# systemctl restart zabbix-server zabbix-agent nginx php-fpm
[root@zabbix ~]# systemctl enable zabbix-server zabbix-agent nginx php-fpm

5.3 Zabbix Proxy 部署与配置

Proxy 用于分担 Server 负载,部署步骤如下:

  1. 添加 Zabbix 源(同 Server)

    [root@proxy~]# rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm
    [root@proxy ~]# dnf clean all

安装软件包

复制代码
[root@proxy ~]# dnf -y install zabbix-proxy-mysql zabbix-sql-scripts zabbix-selinux-policy mysql
[root@proxy~]# 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

导入数据

在 Server 上临时开启 log_bin_trust_function_creators,然后在 Proxy 节点导入数据:

复制代码
# Server节点
[root@zabbix ~]# mysql -uroot -p
mysql> set global log_bin_trust_function_creators =1;
mysql> quit;

# Proxy节点(IP为Server地址)
[root@proxy ~]# zcat /usr/share/zabbix-sql-scripts/mysql/proxy.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix_proxy -h 192.168.207.137

# Server节点关闭设置
[root@zabbix ~]# mysql -uroot -p
mysql> set global log_bin_trust_function_creators=0;
mysql> quit;

配置 Proxy

修改配置文件,设置 Server 地址、主机名、数据库信息:

复制代码
[root@proxy ~]# vi /etc/zabbix/zabbix_proxy.conf
# 32行:Server=192.168.207.137
# 42行:Hostname=Zabbix proxy
# 157行:DBHost=192.168.207.137
# 194行:DBPassword=zabbix
  1. 启动服务

    [root@proxy ~]# systemctl start zabbix-proxy
    [root@proxy ~]# systemctl enable zabbix-proxy

Web 界面添加 Proxy

登录 Zabbix Web,进入 "管理→Proxy→创建 agent 代理",选择主动式。

5.4 Zabbix Agent 客户端部署

Agent 部署在被监控节点,以 server01 为例:

  1. 添加 Zabbix 源

    [root@server01~]# rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm
    [root@server01~]# dnf clean all

安装 Agent

复制代码
[root@server01 ~]# dnf -y install zabbix-agent

配置 Agent

修改配置文件,设置 Server/Proxy 地址和主机名:

复制代码
[root@server01 ~]# vi /etc/zabbix/zabbix_agentd.conf
# 117行:Server=192.168.207.137(或Proxy地址)
# 171行:ServerActive=192.168.207.137(同上)
# 182行:Hostname=server01

启动服务

复制代码
[root@server01 ~]# systemctl start zabbix-agent
[root@server01 ~]# systemctl enable zabbix-agent

5.5 Web 界面配置与初始化

  1. 访问 Web 界面

    打开浏览器,输入地址:http://192.168.207.137:8080/

  2. 初始化配置

    • 选择语言(如中文),检查环境依赖。
    • 配置数据库连接(数据库名 zabbix,用户 zabbix,密码 zabbix)。
    • 保持主机名默认设置,确认配置汇总后完成安装至。
  3. 登录系统

    默认账号:Admin,密码:zabbix。

  4. 添加主机

    • 直接添加:进入 "数据采集→主机→创建主机",设置主机名(与 Agent 一致)、群组、Agent 接口(IP+10050),关联模板(如 Template OS Linux)至。
    • 通过 Proxy 添加:步骤类似,在 "由 Proxy 监测" 中选择对应 Proxy 至。

6. Zabbix 高级配置与优化:解决图像字体问题

Zabbix 默认字体可能导致中文显示乱码,解决方案如下:

  1. 查找字体配置文件

    [root@zabbix ~]# find / -name defines.inc.php
    /usr/share/zabbix/include/defines.inc.php

查看字体设置

确认字体路径和名称:

复制代码
[root@zabbix~]# grep "ZBX_FONTPATH" /usr/share/zabbix/include/defines.inc.php
# 输出:define('ZBX_FONTPATH', realpath('assets/fonts'));
[root@zabbix~]# grep "ZBX_GRAPH_FONT_NAME" /usr/share/zabbix/include/defines.inc.php
# 输出:define('ZBX_GRAPH_FONT_NAME','graphfont');
  1. 替换字体文件

    • 上传中文字体(如 msyh.ttc)至 /usr/share/zabbix/assets/fonts 目录。
    • 创建软链接替换默认字体:

    [root@zabbix ~]# cd /usr/share/zabbix/assets/fonts
    [root@zabbix fonts]# ln -snf msyh.ttc graphfont.ttf

  2. 刷新页面
    浏览器刷新后,中文即可正常显示。

相关推荐
苦逼IT运维13 分钟前
Jenkins 不同节点间文件传递:跨 Job 与 同 Job 的实现方法
linux·运维·ci/cd·jenkins·运维开发
杰克逊的日记15 分钟前
大数据集群运维常见的一些问题以及处理方式
大数据·运维·gpu·算力
JIAKSK29 分钟前
宝塔利用 Git + WebHook 实现Vitepress自动部署
运维·vitepress
m0_694845571 小时前
服务器系统时间不准确怎么办?
linux·运维·服务器·游戏·云计算
专注API从业者1 小时前
自动化商品监控:利用淘宝API开发实时价格库存采集接口
大数据·运维·前端·数据库·数据挖掘·自动化
安卓开发者1 小时前
OkHttp 与 RxJava/RxAndroid 完美结合:构建响应式网络请求架构
okhttp·架构·rxjava
90后小陈老师2 小时前
网络安全实验06 部署防火墙主备备份双机热备,提高网络可靠性
运维·网络·华为·ensp
J总裁的小芒果2 小时前
VS CODE 开发php快捷键格式化
android·开发语言·php
过往入尘土2 小时前
linux中的各种dmo语句(一些)
linux·运维·服务器
海文宇2 小时前
Linux的目录
linux·运维·服务器