目录
一:监控系统的功能概述
监控、从中文的字义来看,有两个内容,一是检测,二是控制。重点在第一个字眼,即检测、预防的意思。
监控,对应的英文单词是 Monitoring。在计算机领域,可以将其分为5种监控类型。
应用性能监控
业务交易监控
网络性能监控
操作系统监控
上面5种类型将监控这个概念划分成了多个领域。我们通常所说的监控,都会模糊的包含以上5个细分的领域。在任何一个 IT业务环境中,都会存在各种各样的硬件设备、软件应用等。
按照逻辑层次划分,我们可以将我们可以将监控行为划分为5个层次:基础设施监控、系统层监控、应用层监控、业务监控、端用户体验监控。
监控层级 | 监控对象 | 核心监控指标 | 负责团队/人员 | 工具示例 |
---|---|---|---|---|
基础设施监控 | 网络设备(交换机、路由器等)、低层硬件 | 网络流量、丢包率、错包率、连接数、设备温度、电源状态 | 运维团队 | Zabbix、Nagios、Prometheus |
系统层监控 | 物理机、虚拟机、操作系统 | CPU 使用率、内存占用率、磁盘 IO、网络带宽、系统负载、进程状态 | 运维/系统管理员 | Grafana、Datadog、SolarWinds |
应用层监控 | 服务接口、数据库、缓存(如 Redis、MySQL) | URL 访问性能、调用数、延迟、错误率、慢 SQL、缓存命中率、服务响应时间 | 开发/运维团队 | New Relic、APM(如 SkyWalking) |
业务监控 | 用户行为、业务交易(如登录、注册、下单、支付) | 用户登录/注册量、订单成功率、支付成功率、业务漏斗转化率、GMV(成交总额) | 业务/运营团队 | Google Analytics、ELK、自定义报表 |
端用户体验监控 | 用户终端(App、H5、PC 端)、浏览器、客户端 | 页面加载时间、白屏率、错误日志、地域/运营商分布、操作系统/浏览器兼容性、API 返回码 | 前端/测试团队 | Sentry、Lighthouse、Real User Monitoring (RUM) |
二:监控系统的实现原理
1:模块组成
一个监控系统的组成大体可以分为两部分:数据采集部分和数据存储、分析告警、展示部分,这两部分构成了监控系统的基本模型。
2:采集协议
按照支持的协议方式,监控 IT 数据采集可以分为两种:专用客户端采集和公用协议采集。
3:监控模式
监控系统数据采集的工作模式可以分为被动模式和主动模式。被动模式指的是服务器端到客户端采集数据;主动模式是客户端主动上报数据到服务器。
一般来说被动模式对监控端服务器的开销较大,适合小规模的监控环境;被动模式对监控端服务器的开销较小,适合大规模的监控环境
4:代理架构
对于大规模的监控环境,被监控节点比较多,并且监控类型也很多,监控产生的数据和网络连接开销非常大,数据采集方式除了使用主动模式之外,还需要使用代理的架构,通过代理架构分摊服务器端的性能开销。另外,代理架构还支持跨地域、跨网络的分布式监控。常见的代理架构为 C/S/P 架构,即 Client/Proxy/Server。
三:监控系统的开源产品
工具名称 | 类型 | 核心功能 | 适用场景 | 特点 | 学习成本 |
---|---|---|---|---|---|
Zabbix | 综合监控 | 服务器、网络设备、应用性能监控,支持告警和可视化 | 企业级基础设施监控 | 跨平台、支持多种协议、高度可定制 | 中高 |
Prometheus+Grafana | 指标监控+可视化 | 实时指标收集(如CPU、内存)、多数据源支持,Grafana提供丰富仪表盘 | 云原生、容器化环境(如K8s) | 开源、时序数据库、强大的查询语言(PromQL) | 中 |
Cacti | 网络流量监控 | 基于RRDTool的网络流量图形化分析,支持用户权限管理 | 网络设备流量监控 | 依赖SNMP、图表定制灵活 | 中 |
Nagios | 告警监控 | 主机和服务状态监控,异常告警 | 传统服务器和网络监控 | 插件扩展性强、告警机制成熟 | 中高 |
Checkmk | 综合监控 | 服务器、网络、云、容器监控,支持自动发现 | 混合IT环境(物理+云) | 部署快、自动化配置、分企业版和开源版 | 中 |
OpenNMS | 分布式监控 | 网络和系统监控,支持多协议(SNMP、JMX等) | 大型分布式网络 | 基于Java、扩展性强 | 高 |
Netdata | 实时监控 | 秒级数据采集,实时可视化,支持容器和边缘设备 | 实时性能诊断(如故障排查) | 轻量级、开箱即用、指标覆盖全面 | 低 |
LibreNMS | 网络监控 | 自动发现网络设备,支持多厂商协议(Cisco、Juniper等) | 多厂商网络设备管理 | 社区驱动、兼容性强 | 中 |
四: Zabbix 系统概述
1:初识 Zabbix
Zabbix 是什么,它是一种企业级的分布式开源监控系统的解决方案,Zabbix 是一个基于 Web 界面的提供分布式系统监控,以及网络监控功能的企业级开源解决方案。
Zabbix 由 Alexei Vladishev 创建,目前由 Zabbix SIA 主导开发和支持。
Zabbix 是一款监控网络的众多参数以及服务器、虚拟机、应用程序、服务、数据库、网站、云等的健康和完整性的软件。Zabbix 使用灵活的通知机制,允许用户为几乎任何事件配置基于电子邮件的告警,以实现对服务器问题做出快速反应。Zabbix 基于存储的数据提供出色的报告和数据可视化功能。这使得 Zabbix 成为容量规划的理想选择。
Zabbix 支持轮询和 trapping。所有 Zabbix 报告和统计数据以及配置参数都可以通过基于 Web 的前端访问。基于 Web 的前端确保可以从任何位置评估您的网络状态和服务器的健康状况。如果配置得当,不管对于拥有少量服务器的小型组织还是拥有大量服务器的大公司来讲,Zabbix 都可以在监控 IT 基础设施方面发挥重要作用。
Zabbix 是免费的。Zabbix 是在 GPL 通用公共许可证第 2 版下编写和分发的。这意味着它的源代码是免费分发的,可供公众使用。
2:Zabbix 的功能特性
功能分类 | 核心特性 | 技术细节 | 应用场景 |
---|---|---|---|
数据收集 | - 支持 SNMP(trapping/polling)、IPMI、JMX - 自定义检测项与间隔 - Server/Proxy/Agent 架构 |
多协议兼容,Agent 轻量级部署 | 混合环境(物理/虚拟/云)监控 |
阈值与告警 | - 自定义触发器(trigger) - 告警升级、多接收方式(邮件/短信等) - 支持远程命令自动化 |
宏变量动态告警内容,依赖后端数据库存储规则 | 实时异常检测与自动化运维 |
可视化 | - 实时绘图 - 自定义面板(screen/dashboard) - 网络拓扑生成与监控报告 |
内置图形引擎,支持多监控项聚合视图 | 运维大屏、性能趋势分析 |
历史数据管理 | - 数据库存储历史数据 - 可配置保留周期 - 自动清理机制 |
支持 MySQL/PostgreSQL 等数据库 | 长期性能分析、合规审计 |
自动化配置 | - 模板化监控(可继承) - 网络自动发现(设备/Agent/文件系统等) |
模板支持批量应用,自动发现基于 SNMP/LLDP 等协议 | 大规模设备快速部署 |
API 与扩展 | - 完整的 Zabbix API - Agent 支持 Linux/Windows - 第三方系统集成 |
RESTful API 支持编程式管理监控项 | 与 CI/CD 或运维平台对接 |
性能与架构 | - C 语言开发,低资源消耗 - 支持 Proxy 分布式监控 - 高并发数据处理 |
Proxy 缓解 Server 压力,适合跨地域监控 | 复杂网络环境(如分支机构监控) |
安全与权限 | - 细粒度权限控制 - 用户访问限制 - 安全认证机制 |
基于角色的权限分配(如只读用户) | 多团队协作监控 |
3:Zabbix 角色及架构
角色/组件 | 核心功能 | 数据流向 | 部署场景 | 特点 |
---|---|---|---|---|
Zabbix Server | 核心服务进程,负责数据处理(存储、告警、分析)、协调 Agent/Proxy 数据汇总 | 接收 Agent/Proxy 上报数据,或主动拉取数据 | 中心节点(必选) | - 高性能(C 语言开发) - 依赖数据库(MySQL/PostgreSQL) - 支持分布式 |
Zabbix Agent | 部署在被监控主机上,采集本地指标(CPU、内存、磁盘等) | 主动推送数据到 Server,或响应 Server 的被动拉取请求 | 所有需监控的主机(可选) | - 轻量级 - 支持 Linux/Windows - 支持主动/被动模式 |
Zabbix Proxy | 代理节点,缓解 Server 压力,支持离线缓存数据 | 收集下属 Agent 数据,转发至 Server | 跨地域网络或大规模分层监控 | - 分布式部署 - 数据缓存(网络中断时容灾) - 无需独立数据库 |
Zabbix Web | 提供 Web 管理界面(配置、可视化、告警管理) | 与 Server 交互(通过 API 或直接访问数据库) | 与 Server 同机或独立部署 | - PHP 开发 - 支持多语言 - 依赖 Apache/Nginx |
Zabbix 整体架构
五、部署流程
1:资源清单
主机名 | IP 地址 | 操作系统 | 资源配置 | Zabbix 角色 | 关键配置建议 | 网络要求 |
---|---|---|---|---|---|---|
zabbix | 192.168.10.106 | openEuler 24.03 | 2C4G | Zabbix Server + Web | - 安装 MySQL/MariaDB 作为主数据库 - 配置高可用(可选) - 开放 10051/TCP(Server 端口) |
允许 192.168.10.0/24 访问 |
proxy | 192.168.10.105 | openEuler 24.03 | 2C4G | Zabbix Proxy | - 指向 zabbix 的 Server 地址 - 配置本地缓存(如 1GB 磁盘空间) - 开放 10051/TCP(与 Server 通信) |
需双向访问 Server 和 Agent |
server01 | 192.168.10.101 | openEuler 24.03 | 2C4G | Zabbix Agent(被动模式) | - 安装 zabbix-agent2 - 配置 Server 或 Proxy 的 IP 为主动拉取源 - 开放 10050/TCP(Agent 端口) |
允许 Proxy/Server 访问 10050 |
server02 | 192.168.10.102 | openEuler 24.03 | 2C4G | Zabbix Agent(主动模式) | - 配置主动推送至 Proxy - 自定义监控项(如业务日志) - 开放出方向 10051/TCP(连接 Proxy) |
允许访问 Proxy 的 10051 |
2:基础环境
(1)关闭防火墙
作用:停止并禁用 firewalld
防火墙服务,避免其影响后续服务通信 。
(2)关闭 SELinux
作用:setenforce 0
临时将 SELinux 设为宽容模式;sed
命令修改配置文件,永久关闭 SELinux ,防止其对软件安装、运行产生权限干扰 。
(3)时间同步
作用:timedatectl
命令设置系统时区为亚洲 / 上海;chronyc sources -v
用于查看 chrony
时间同步源状态,确保时间同步 。
(4)修改主机名
作用:分别将主机名设置为 zabbix
、proxy
、server01
、server02
,方便识别不同角色的主机 。
3:部署 Zabbix Server
(1)添加 Zabbix 源
作用:rpm
命令安装 Zabbix 官方软件源(适配 RHEL 9 等系统,Zabbix 6.4 版本 );dnf clean all
清理本地软件源缓存,使新添加的源生效 。
(2)安装软件包
Zabbix 及依赖包安装
zabbix6.4.8 需要的各个平台软件的版本如下:
mysql 的版本要求8.0.30 - 8.1.X
mariadb 的版本要求10.5.00 - 11.1.X
nginx 的版本要求1.20 or later
php 的版本要求7.4.0 - 8.2.X
(3)配置数据库
(4)导入数据
(5)配置 zabbix server
操作说明
修改 /etc/zabbix/zabbix_server.conf
文件,大约在 129 行左右,取消注释并修改密码:
作用
配置 Zabbix Server 连接数据库的密码,让 Zabbix Server 能正确访问 zabbix
数据库 。
(6)配置 zabbix 页面
操作说明
修改 /etc/nginx/conf.d/zabbix.conf
文件,注意取消注释相关配置:
作用
配置 Nginx 监听端口(8080
)和服务器名称,使 Nginx 能正确代理、托管 Zabbix 的 Web 页面 。
(7)启动服务
4:zabbix 页面配置
http://192.168.10.106:8080/
说明:通过浏览器访问该 URL ,进入 Zabbix 登录页面(需替换为实际部署 Zabbix 服务端的主机 IP ,端口 8080 需与 Nginx 配置一致 ) 。
(2)设置语言
(3)检查环境
(4)配置数据库连接
(5)主机名设置
(6)安装前汇总
(7)完成安装
(8)登录
默认账号:Admin
默认密码:zabbix
5:部署proxy
(1)添加 zabbix 源
[root@proxy ~]# 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
(2)安装软件包
[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
(3)导入数据
① zabbix server 节点执行(1)
[root@zabbix ~]# # mysql -uroot -p
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;
说明:
以 root 用户(注释形式,实际执行需去掉 # 并输入密码 )登录 MySQL ,设置全局变量 log_bin_trust_function_creators 为 1(允许创建存储函数,适配 Zabbix 数据导入需求 ),然后退出 MySQL 。
② proxy 节点执行
[root@proxy ~]# cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix_proxy -h 192.168.207.137
③ zabbix server 节点执行(2)
[root@zabbix ~]# mysql -uroot -p
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;
(4)配置zabbix proxy
修改 Zabbix Proxy 配置文件(/etc/zabbix/zabbix_proxy.conf
)
配置说明与关键内容
# 大约 32 行左右,修改为 zabbix server 节点的 IP
Server=192.168.207.137
# 大约 42 行左右,可以修改,这里不做修改,后续 web 页面添加时名字要和这里保持一致
Hostname=Zabbix proxy
# 大约 157 行左右,取消注释修改为 zabbix server 节点的 IP
DBHost=192.168.207.137
# 大约 194 行左右,取消注释为数据库的密码
DBPassword=zabbix
作用:
Server:指定 Zabbix Server 的 IP ,让 Proxy 能与 Server 通信;
Hostname:设置 Proxy 的主机名,后续 Web 页面添加 Proxy 时需保持一致;
DBHost:指定 Zabbix Server 数据库所在主机 IP(因 Proxy 数据需与 Server 数据库交互 );
DBPassword:配置连接数据库的密码,确保 Proxy 可访问数据库 。
(5)启动服务
systemctl start zabbix-proxy
systemctl enable zabbix-proxy
(6)web 页面添加 proxy
操作步骤
管理-->Proxy>创建 agent 代理
选择主动式(默认)
6:部署 Agent
(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
(2)安装软件包
[root@server01 ~]# dnf -y install zabbix-agent
(3)配置 agent
操作说明与关键配置(修改 /etc/zabbix/zabbix_agentd.conf
文件 )
# 大约 117 行,上报给 server 就写 server 节点的 IP,上报给 proxy 就写 proxy 的 IP
Server=192.168.207.137
# 大约 171 行,上报给 server 就写 server 节点的 IP,上报给 proxy 就写 proxy 的 IP,一般和 Server 这行配置写的一样
ServerActive=192.168.207.137
# 大约 182 行,Agent 本地的名称,需要与将来在 Server 端的 Web 页面上的主机名称一致,名称自定义
Hostname=server01
作用:
Server:指定 Agent 向哪个 Zabbix Server 或 Proxy 被动上报数据(这里配置为 Zabbix Server 的 IP 192.168.207.137 );
ServerActive:指定 Agent 向哪个 Zabbix Server 或 Proxy 主动上报数据(与 Server 配置一致,主动模式 IP );
Hostname:设置 Agent 本地主机名,需与 Zabbix Server 端 Web 界面添加主机时的名称一致,用于识别和关联监控数据 。
(4)启动服务
systemctl start zabbix-agent
systemctl enable zabbix-agent
(5)添加主机
操作步骤
数据采集-->主机-->创建主机
说明:
在 Zabbix Server 端的 Web 界面,按路径进入主机管理模块,通过 “创建主机” 功能,添加部署了 Agent 的 server01 等主机,配置相关监控项、关联模板等,实现对主机的监控 。
直接添加主机
主机名称:和 Agent 服务配置文件中的 Hostname 保持一致
模板:有很多自带的模板,也可以自己创建
主机群组:可以选择已有的,也可以自己创建一个群组
接口:添加 Agent 节点,IP 地址填写被监控节点的 IP
通过 proxy 上报
整体和直接添加主机类似,只是多了个 由 Proxy 代理程序监测 选择之前创建的 proxy 即可
六:扩展:解决图像字体显示问题
1:查找 zabbix 定义字体的 php 文件
[root@zabbix ~]# find / -name defines.inc.php
结果:
/usr/share/zabbix/include/defines.inc.php
2:查看 zabbix 字体文件中用的字体
[root@zabbix ~]# grep "ZBX_FONTPATH" /usr/share/zabbix/include/defines.inc.php
[root@zabbix ~]# grep "ZBX_GRAPH_FONT_NAME" /usr/share/zabbix/include/defines.inc.php
对应输出内容:
define('ZBX_FONTPATH', realpath('assets/fonts')); // where to search for font (GD > 2.0.18)
define('ZBX_GRAPH_FONT_NAME', 'graphfont'); // font file name
3:查找 zabbix 的字体文件位置
[root@zabbix ~]# find / -name graphfont.ttf
结果:
/usr/share/zabbix/assets/fonts/graphfont.ttf
4:替换字体
操作说明与代码
- 上传
msyhl.ttc
文件到/usr/share/zabbix/assets/fonts
目录 - 执行以下命令:
[root@zabbix ~]# cd /usr/share/zabbix/assets/fonts
[root@zabbix fonts]# ls
graphfont.ttf msyhl.ttc
[root@zabbix fonts]# ln -snf msyhl.ttc graphfont.ttf
备注
-s --symbolic 比较容易,有 -s 时表示创建软连接,没有 -s 时,表示创建硬链接
-f --force 强行删除任何已存在的目标文件
-n --no-dereference 把符号连接的目的目录视为一般文件
最后步骤
刷新页面观察效果