目录
[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、内存、磁盘等系统资源。
- 基础设施监控:覆盖网络设备、服务器硬件等底层设施至。
这些类型并非孤立存在,实际监控中通常会综合覆盖多个领域,形成全方位的监控体系。
五层监控架构
按照逻辑层次,监控行为可划分为从底层到上层的五个层次,每层对应不同的监控对象和指标:
-
基础设施监控
由运维人员负责,针对网络交换机、路由器等底层设备,监控网络流量、丢包率、错包率、连接数等核心指标。这些设备的稳定性直接影响上层服务,是整个 IT 系统的基石。
-
系统层监控
涵盖物理机、虚拟机和操作系统,核心监控指标包括 CPU 使用率、内存占用率、磁盘 IO 和网络带宽。这些指标直接反映服务器的运行状态,是判断系统健康度的基础。
-
应用层监控
与业务服务紧密相关,包括 URL 访问性能(响应时间、调用数、延迟)、服务错误率、SQL 性能(慢 SQL)、缓存命中率等。通过监控这些指标,可及时发现应用程序的性能瓶颈。
-
业务监控
针对直接影响业务交易的指标,例如交易网站的用户登录、注册、下单、支付等情况。这些数据为运营决策和公司战略提供直接支持,是连接 IT 与业务的桥梁。
-
端用户体验监控
关注用户端的使用体验,包括页面加载速度、操作响应时间、错误返回码,以及用户所在地区、使用的运营商、操作系统和浏览器版本等。通过这类监控,可及时发现影响用户体验的问题。
2. 监控系统的实现原理
2.1 模块组成与基本模型
一个完整的监控系统主要由两部分组成:
- 数据采集部分:通过 Agent(代理程序)收集被监控对象的数据。
- 数据处理部分:由 Server 负责数据存储、分析、告警和展示。
其基本模型可简化为:Agent 采集数据后,将数据发送至 Server,Server 对数据进行处理并通过可视化界面展示,同时在异常时触发告警。
[数据采集 Agent] → [Server (分析、告警、数据存储、展示)]
(如图:监控系统的基本模型,展示了 Agent 与 Server 的数据流关系)
2.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 功能丰富,涵盖监控全流程需求:
- 数据收集:支持可用性及性能检测,兼容 SNMP、IPMI、JMX 等协议,可自定义检测和采集间隔,包含 Server、Proxy、Agent 三种角色至。
- 阈值定义:通过 "触发器(trigger)" 灵活设置问题阈值,存储于后端数据库🔷1-74🔷。
- 告警配置:支持告警升级、自定义接收者和方式,告警信息可含宏变量,能通过远程命令执行自动化动作至。
- 实时绘图与展示:内置绘图功能,支持多监控项视图、网络拓扑图、自定义面板和报告生成至。
- 历史数据管理:数据存储于数据库,可配置保留策略,内置清理机制至。
- 配置与模板:一次配置长期有效,支持通过模板添加设备,模板可分组和继承至。
- 网络自动发现:能自动发现网络设备、Agent、文件系统、网卡等,提高配置效率至。
- Web 接口与 API:PHP 编写的 Web 前端访问便捷,提供 API 支持第三方程序接入至。
- 权限与扩展性:安全的权限认证,Agent 支持 Linux 和 Windows,C 语言开发性能高、易移植至。
- 复杂环境支持:通过 Proxy 轻松实现远程监控,适应跨地域场景。
4.3 角色划分与架构设计
核心角色
Zabbix 系统包含四个核心角色,分工明确:
- Zabbix Server:服务端守护进程,是系统核心。Agent 和 Proxy 的数据最终提交至 Server(或由 Server 主动获取),负责数据存储、分析、告警和展示。
- Zabbix Agent:客户端守护进程,部署在被监控对象上,收集 CPU、内存、硬盘等本地数据。
- Zabbix Proxy:代理守护进程,作为中转站收集数据并提交给 Server,分担 Server 负载。
- 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 | 被监控节点 |
基础环境配置
所有节点需完成以下基础配置:
-
关闭防火墙
[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 是监控核心,负责数据处理和存储,部署步骤如下:
-
添加 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 负载,部署步骤如下:
-
添加 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
-
启动服务
[root@proxy ~]# systemctl start zabbix-proxy
[root@proxy ~]# systemctl enable zabbix-proxy
Web 界面添加 Proxy
登录 Zabbix Web,进入 "管理→Proxy→创建 agent 代理",选择主动式。
5.4 Zabbix Agent 客户端部署
Agent 部署在被监控节点,以 server01 为例:
-
添加 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 界面配置与初始化
-
访问 Web 界面
打开浏览器,输入地址:http://192.168.207.137:8080/。
-
初始化配置
- 选择语言(如中文),检查环境依赖。
- 配置数据库连接(数据库名 zabbix,用户 zabbix,密码 zabbix)。
- 保持主机名默认设置,确认配置汇总后完成安装至。
-
登录系统
默认账号:Admin,密码:zabbix。
-
添加主机
- 直接添加:进入 "数据采集→主机→创建主机",设置主机名(与 Agent 一致)、群组、Agent 接口(IP+10050),关联模板(如 Template OS Linux)至。
- 通过 Proxy 添加:步骤类似,在 "由 Proxy 监测" 中选择对应 Proxy 至。
6. Zabbix 高级配置与优化:解决图像字体问题
Zabbix 默认字体可能导致中文显示乱码,解决方案如下:
-
查找字体配置文件
[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');
-
替换字体文件
- 上传中文字体(如 msyh.ttc)至 /usr/share/zabbix/assets/fonts 目录。
- 创建软链接替换默认字体:
[root@zabbix ~]# cd /usr/share/zabbix/assets/fonts
[root@zabbix fonts]# ln -snf msyh.ttc graphfont.ttf -
刷新页面
浏览器刷新后,中文即可正常显示。