一、监控系统的功能概述
在 IT 运维领域,监控是至关重要的环节,按比例估算,其在 IT 运维工作中占比可达 30%。构建一个真正可用的监控告警系统对 IT 运维工程师而言是一项艰巨任务,而优秀的监控系统更是寥寥无几。
从中文字义来讲,监控包含检测和控制两方面内容,核心在于检测与预防,对应的英文单词是 "Monitoring"。在计算机领域,监控可分为应用性能监控、业务交易监控、网络性能监控、操作系统监控等类型,这些类型将监控概念划分为多个领域,日常所说的监控通常模糊涵盖这些细分领域。在任何 IT 业务环境中,都存在着各种硬件设备、软件应用等,需要通过监控来保障其正常运行。
按照逻辑层次划分,监控行为可分为五个层次,每个层次都有其特定的监控对象和核心指标:
基础设施监控:由运维人员负责,接近硬件体系,涉及网络、交换机、路由器等低层设备。这些设备的可靠性和稳定性直接影响上层服务应用,因此需监控网络流量、丢包情况、错包情况、连接数等核心指标。
系统层监控:涵盖物理机、虚拟机、操作系统等,主要监控 CPU 使用率、内存占用率、磁盘 IO 和网络带宽等核心指标。
应用层监控:与服务紧密相关,包括 URL 访问性能、调用数、延迟,服务错误率,SQL 监控(如慢 SQL),缓存命中率和性能,每个服务的响应时间等。
业务监控:针对具体业务场景,如交易网站的用户登录、注册、下单、支付等情况。这层监控数据可提供给运营和公司高管,为公司战略决策和方向提供数据支撑。
端用户体验监控:关注用户通过 APP、H5、PC 端等使用应用程序时的体验,包括用户端性能、返回码、不同城市地区及运营商的使用情况,客户端操作系统和浏览器版本等,避免因 BUG 或性能问题影响用户体验而未被感知。
二、监控系统的实现原理
(一)模块组成
一个监控系统的基本模型大体由两部分组成,即数据采集部分和数据存储、分析告警、展示部分。其中,Server 承担分析、告警、数据存储和展示的功能,Agent 负责数据采集。
(二)采集协议
按照支持的协议方式,监控 IT 数据采集可分为专用客户端采集和公用协议采集。专用客户端采集基于私有协议,而公用协议采集则支持 SNMP、IPMI、SSH、Telnet 等协议。
(三)监控模式
监控系统数据采集的工作模式有被动模式和主动模式两种。被动模式是服务器端到客户端采集数据,此模式对监控端服务器开销较大,适合小规模监控环境;主动模式是客户端主动上报数据到服务器,对监控端服务器开销较小,适合大规模监控环境。
(四)代理架构
在大规模监控环境中,由于被监控节点多、监控类型多,监控产生的数据和网络连接开销大。除采用主动模式外,还需使用代理架构来分摊服务器端性能开销,且代理架构支持跨地域、跨网络的分布式监控。常见的代理架构为 C/S/P 架构,即 Client/Proxy/Server。
三、监控系统的开源产品
市面上有多种开源监控产品,各有其特点和适用场景:
Zabbix:出色的企业级运维监控平台,可监控服务器、网络设备、Web 应用程序和数据库等的性能和可用性,能在 Linux、AIX、Windows 等多种系统上安装使用,适配能力良好。
Prometheus+Grafana:Prometheus 是开源系统监控和警报工具包,主要用于基础设施监控,包括服务器、数据库、Web 服务等,几乎所有东西都可通过其监控。
Cacti:网络流量监测图形分析工具,连接到 RRD Tool 生成网络数据相关图表,具有强大的数据和用户管理功能,可与 LDAP 结合进行用户验证,还能自行增加模板。
Nagios:监控系统运行状态和网络信息的系统,可监控本地或远程主机及服务,提供异常通知功能,能监控网络协议、操作系统、系统指标等几乎所有类型组件。
Checkmk:高可扩展的监控工具,可整合服务器、网络、资产、数据库等监控,有基础版(完全开源免费无限制)和企业版(附带附加功能),具有部署快、高度自动化、配置灵活的特点。
OpenNMS:企业级基于 Java/XML 的分布式网络和系统监控管理平台,能显示网络中终端和服务器的状态和配置,专为 Linux 设计,也支持 Windows、Solaris 和 OS X,可通过多种协议收集系统指标。
Netdata:Linux 性能实时监测工具,为 Linux 系统、应用程序、SNMP 服务等提供实时性能监测,可在物理系统、虚拟机、容器等多种设备上运行,监控指标多而广,数据收集速度快,支持并发监控数万个指标,有交互式可视化和健康警报功能。
LibreNMS:开源、功能丰富且强大的网络监控系统,易于安装和配置,可在多种平台使用,支持多种协议、性能监控、警报等功能,支持广泛的供应商、设备和协议,还能自动发现整个网络。
四、Zabbix 系统概述
(一)初识 Zabbix
Zabbix 是企业级的分布式开源监控系统解决方案,基于 Web 界面提供分布式系统监控和网络监控功能。由 Alexei Vladishev 创建,目前由 Zabbix SIA 主导开发和支持。
Zabbix 可监控服务器、网络设备、Web 应用程序、数据库等的健康和完整性,使用灵活的通知机制,允许用户为几乎任何事件配置基于电子邮件的告警,以便快速响应服务器问题。它基于存储的数据提供出色的报告和数据可视化功能,是容量规划的理想选择。
Zabbix 支持轮询和 trapping,所有报告、统计数据和配置参数都可通过基于 Web 的前端访问,确保能从任何位置评估网络状态和服务器健康状况。无论对于小型组织还是大公司,配置得当的 Zabbix 都能在监控 IT 基础设施方面发挥重要作用。
Zabbix 是免费的,在 GPL 通用公共许可证第 2 版下编写和分发,源代码免费分发,可供公众使用。
(二)Zabbix 的功能特性
数据收集:支持可用性及性能检测,支持 SNMP(trapping 及 polling)、IPMI、JMX 监控,可自定义检测和收集数据间隔,包含 Server、Proxy、Agent 三种角色。
灵活的阈值定义:允许自定义问题阀值(在 Zabbix 中称为触发器),并存储在后端数据库中。
高级告警配置:可自定义告警升级、接收者及告警方式,告警信息可配置并允许使用宏变量,能通过远程命令实行自动化动作。
实时绘图:通过内置绘图方法实现监控数据实时绘图。
扩展的图形化显示:允许自定义创建多监控项视图,生成网络拓扑、自定义面板和幻灯片并在 dashboard 页面显示,还能生成监控报告。
历史数据存储:数据存储在数据库中,历史数据可配置,且有内置数据清理机制。
配置简单:一次配置可终生监控(除非调整或删除),允许使用模板添加监控设备。
模板使用:模板中可添加组监控,且模板允许继承。
网络自动发现:能自动发现网络设备、实现 Agent 自动注册,自动发现文件系统、网卡设备、SNMP OID 等。
快速的 Web 接口:Web 前端采用 PHP 编写,访问无障碍。
Zabbix API:提供程序级别的访问接口,方便第三方程序接入。
权限系统:具备安全的权限认证,用户可限制允许维护的列表。
全特性、Agent 易扩展:可在监控目标上部署,支持 Linux 及 Windows。
二进制守护进程:采用 C 语言开发,高性能、低内存消耗,且易移植。
具备应对复杂环境情况:通过 Zabbix Proxy 可轻松创建远程监控。
(三)Zabbix 角色及架构
Zabbix Server:zabbix_server 是 Zabbix 服务端守护进程,Zabbix Agentd、Zabbix Proxy 的数据最终都会提交到 Server,不过并非所有数据都主动提交,也有 Server 主动获取的情况。
Zabbix Agent:zabbix_agentd 是客户端守护进程,主要用于收集客户端数据,如 CPU 负载、内存、硬盘使用情况等。
Zabbix Proxy:zabbix_proxy 是 Zabbix 代理守护进程,功能类似 Server,但只是中转站,需将收集到的数据提交或被提交到 Server。
Zabbix Web:Zabbix 的 web 界面,管理员通过它管理 Zabbix 配置及查看监控信息,通常与 zabbix_server 运行在同一台主机,也可单独部署在独立服务器上。
Zabbix 整体架构中,各组件通过特定端口进行通信,支持主动模式和被动模式的数据采集,还支持无 Agent 监控检测方式,从 zabbix server 对外发起数据请求,数据库采用 MySQL、Oracle、PostgreSQL、SQLite 等。
五、部署流程
(一)资源清单
操作系统 | 配置 | 主机名 | IP | 角色 |
---|---|---|---|---|
openEuler 24.03 | 2C4G | zabbix | 192.168.207.137 | Zabbix 服务端 |
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 | 被监控节点 |
(二)基础环境配置
关闭防火墙
[root@localhost~]#systemctl stop firewalld
[root@localhost ~]#systemctl disable firewalld
关闭 Selinux
[root@localhost ~]#setenforce0
时间同步
[rootelocalhost ~]#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
(三)部署 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
安装软件包
[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://w.rpmfind.net/linux/centos-stream/9-stream/AppStream/x86_64/os/Packages/net-snmp-libs-5.9.1-17.el9.x86_64.rpm
备注:zabbix6.4.8 需要的各个平台软件的版本如下:mysql 的版本要求 8.0.30-8.1.X,mariadb 的版本要求 10.5.00-11.1.X,nginx 的版本要求 1.20or Later,php 的版本要求 7.4.0-8.2.X。
配置数据库
[root@zabbix ~]#systemctl enable mysqld--now
[root@zabbix ~]# mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.41 Source distribution
Copyright (c) 2000, 2025, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
#执行以下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@localhost identified by 'zabbix';
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;
导入数据
[root@zabbix ~]#zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz|mysql--default-character-set=utf8mb4 -uzabbix -p zabbix
[root@zabbix ~]##mysql -uroot -p
mysql>set global log_bin_trust_function_creators= 0;
mysql>quit;
配置 Zabbix Server
修改 /etc/zabbix/zabbix_server.conf 文件,大约在 129 行左右,取消注释并修改密码:DBPassword=zabbix
配置 Zabbix 页面
修改 /etc/nginx/conf.d/zabbix.conf 文件,注意取消注释:
listen 8080;
server_name
启动服务
systemctl restart zabbix-server zabbix-agent nginx php-fpm
systemctl enable zabbix-server zabbix-agent nginx php-fpm
(四)Zabbix 页面配置
- 登录 Zabbix :在浏览器中输入http://192.168.207.137:8080/
- 设置语言:进入欢迎页面后,设置所需语言。
- 检查环境:进行必要条件检查,确保环境符合要求。
- 配置数据库连接:按照提示正确配置数据库连接参数。
- 主机名设置:保持默认即可,默认时区为系统(UTC+0000UTC)。
- 安装前汇总:检查配置参数,确认无误后点击下一步。
- 完成安装:提示 Zabbix 前端配置好后,完成安装。
- 登录:默认账号为 Admin,默认密码为 zabbix。
(五)部署 Proxy
-
添加 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
安装软件包
[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
导入数据
#Zabbix Server节点执行
[root@zabbix ~]##mysql -uroot -p
mysql> set global log_bin_trust_function_creators =1;
mysql> quit;
#Proxy节点执行,IP地址修改为Zabbix Server的IP
root@proxy /usr/share/zabbix-sql-scripts/mysql/proxy.sql | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix_proxy -h 192.168.207.137
#Zabbix Server节点执行
[root@zabbix ~]# mysql -uroot -p
mysql>set global log_bin_trust_function_creators= 0;
mysql> quit;
配置 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
启动服务
systemctl start zabbix-proxy
systemctl enable zabbix-proxy
- Web 页面添加 Proxy:进入管理 -->Proxy > 创建 agent 代理,选择主动式(默认)。
(六)部署 Agent
添加 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
安装软件包
[root@server01 ~]#dnf-y install zabbix-agent
配置 Agent
修改 /etc/zabbix/zabbix_agentd.conf 文件:
大约 11 行,上报给 Server 或 Proxy 的 IP:Server=192.168.207.137
大约 171 行,通常与 Server 配置一致:ServerActive=192.168.207.137
大约 182 行,Agent 本地的名称,需与 Server 端 Web 页面上的主机名称一致:Hostname=server01
启动服务
systemctl start zabbix-agent
systemctl enable zabbix-agent
添加主机
进入数据采集 -- 主机 -> 创建主机,配置主机名称(与 Agent 服务配置文件中的 Hostname 保持一致)、模板(可选择自带模板或自定义)、主机群组(选择已有或创建新群组)、接口(添加 Agent 节点,填写被监控节点的 IP)。若通过 proxy 上报,整体配置类似,只需选择之前创建的 proxy 即可。
(七)扩展:解决图像字体显示问题
查找 Zabbix 定义字体的 php 文件
[root@zabbix ~]#find /-name defines.inc.php
/usr/share/zabbix/include/defines.inc.php
查看 Zabbix 字体文件中用的字体
[root@zabbix~]#grep"ZBX_FONTPATH"/usr/share/zabbix/include/defines.inc.php
define('ZBX_FONTPATH', realpath('assets/fonts'));//where to search for font(GD>2.0.18)
[root@zabbix~]#grep "ZBX_GRAPH_FONT_NAME"/usr/share/zabbix/include/defines.inc.php
define('ZBX_GRAPH_FONT_NAME','graphfont');//fontfile name
查找 Zabbix 的字体文件位置
[root@zabbix ~]#find /-name graphfont.ttf
/usr/share/zabbix/assets/fonts/graphfont.ttf
替换字体
上传 msyh1.ttc 文件到 /usr/share/zabbix/assets/fonts 目录,然后执行以下命令
[root@zabbix ~]#cd /usr/share/zabbix/assets/fonts
[root@zabbix fonts]#ls
graphfont.ttf msyh1.ttc
[root@zabbix fonts]# ln -snf msyh1.ttc graphfont.ttf
备注:-S 表示创建软连接,-f 表示强行删除任何已存在的目标文件,-n 表示把符号连接的目的目录视为一般文件。操作完成后刷新页面观察效果。
通过以上详细的部署步骤和理论知识学习,能够全面了解 Zabbix 企业级分布式监控系统的部署和应用,为 IT 运维工作中的监控环节提供有力支持,确保 IT 基础设施和业务系统的稳定运行。在实际操作过程中,需仔细按照步骤执行,注意各配置参数的正确性,以保障监控系统的正常搭建和使用。同时,深入理解监控系统的原理和 Zabbix 的功能特性,有助于更好地运用该系统进行有效的监控和管理。