部署 Zabbix 企业级分布式监控
目录
一、监控系统的功能概述
1、监控的定义
2、监控的五个层次
(1)基础设施监控
(2)系统层监控
(3)应用层监控
(4)业务监控
(5)端用户体验监控
二、监控系统的实现原理
1、模块组成
2、采集协议
3、监控模式
4、代理架构
三、监控系统的开源产品
四、Zabbix 系统概述
1、初识 Zabbix
2、Zabbix 的功能特性
3、Zabbix 角色及架构
五、部署流程
1、资源清单
2、基础环境配置(所有节点)
3、部署 Zabbix Server(04)
4、Zabbix 页面配置
5、部署 Proxy(03)
6、部署 Agent
编辑
7、扩展:解决图像字体显示问题
一、监控系统的功能概述
1、监控的定义
监控在中文字义上包含 “检测” 和 “预防”,对应英文 “Monitoring”。在计算机领域,监控可划分为 5 种类型:
- 应用性能监控
- 业务交易监控
- 网络性能监控
- 操作系统监控
- 网络站点监控
2、监控的五个层次
(1)基础设施监控
- 负责人员:运维人员。
- 监控对象:网络、交换机、路由器等低层硬件设备。
- 核心指标:网络流量、丢包情况、错包情况、连接数等。
- 重要性:设备可靠性直接影响上层服务应用稳定性。
(2)系统层监控
- 涵盖对象:物理机、虚拟机、操作系统等。
- 核心指标:CPU 使用率、内存占用率、磁盘 IO、网络带宽情况。
(3)应用层监控
- 关联对象:与服务紧密相关,涉及 URL 访问、服务性能、SQL、Cache 等。
- 监控指标:URL 访问性能、调用数、延迟;服务错误率;慢 SQL;缓存命中率、性能;服务响应时间等。
(4)业务监控
- 定义:针对直接影响业务交易的关键环节。
- 示例(交易网站):用户登录、注册、下单、支付情况等。
- 作用:为运营和高管提供数据支持,辅助战略决策。
(5)端用户体验监控
- 监控对象:用户通过 app、h5、pc 端使用应用程序的体验。
- 监控内容:用户端性能、返回码;用户所在城市地区、运营商情况;接入渠道问题;客户端操作系统及浏览器版本等。
- 重要性:及时感知因 BUG 或性能问题导致的用户体验差问题。
二、监控系统的实现原理
1、模块组成
监控系统基本模型由两部分构成:
- 数据采集部分
- 数据存储、分析告警、展示部分
2、采集协议
按照支持的协议方式,监控 IT数据采集可以分为两种:专用客户端采集和公用协议采集。
分类 | 包含内容 |
---|---|
专用客户端采集 | 私有协议、专有客户端 |
公用协议采集 | SNMP、IPMI、SSH、Telnet |
3、监控模式
监控系统数据采集的工作模式可以分为被动模式和主动模式。被动模式指的是服务器端到客户端采集数据;主动模式是客户端主动上报数据到服务器。
模式 | 数据流向 | 适用场景 | 服务端负载 |
---|---|---|---|
主动模式 | Agent → Server | 大规模分布式环境 | 低 |
被动模式 | Server → Agent | 小规模集中式环境 | 高 |
4、代理架构
- 适用场景:大规模监控环境,被监控节点多、监控类型多,数据和网络连接开销大。
- 作用:分摊服务器端性能开销,支持跨地域、跨网络分布式监控。
- 常见架构:C/S/P 架构(Client/Proxy/Server)。
三、监控系统的开源产品
产品名称 | 特点及功能 |
---|---|
Zabbix | 企业级运维监控平台,支持监控服务器、网络设备、Web 应用等;适配多系统(Linux、AIX、Windows 等);基于 GPLv2 许可证,开源免费。 |
Prometheus+Grafana | Prometheus 为开源系统监控和警报工具包,主要监控基础设施(服务器、数据库、Web 服务等)。 |
Cacti | 网络流量监测图形分析工具,连接 RRDToo1 生成网络数据图表;具备强大数据和用户管理功能,支持与 LDAP 结合验证,可自定义模板。 |
Nagios | 监控系统运行状态和网络信息,支持监控本地 / 远程主机及服务,提供异常通知;可监控网络协议、操作系统、应用程序等多种组件。 |
Checkmk | 高可扩展监控工具,支持服务器、网络、资产等监控;分基础版(开源免费无限制)和企业版(附加功能);部署快、自动化程度高、配置灵活。 |
OpenNMS | 企业级基于 Java/XML 的分布式监控平台,显示网络终端和服务器状态配置;专为 Linux 设计,支持多系统;可通过 JMX、WMI、SNMP 等多种协议收集指标。 |
Netdata | Linux 性能实时监测工具,支持 Linux 系统、应用程序、SNMP 服务等实时监控;运行于物理机、虚拟机等多种设备;监控指标多、收集速度快,支持数万指标并发监控。 |
LibreNMS | 开源网络监控系统,易安装配置,支持多平台;功能广泛(协议支持、性能监控、警报等);支持多供应商设备及协议,可自动发现网络。 |
四、Zabbix 系统概述
1、初识 Zabbix
- 定义:企业级分布式开源监控系统解决方案,基于 Web 界面提供分布式系统及网络监控功能。
- 开发者:由 Alexei Vladishev 创建,目前由 Zabbix SIA 主导开发和支持。
- 监控对象:网络参数、服务器、虚拟机、应用程序、服务、数据库、网站、云等的健康和完整性。
- 核心功能:灵活通知机制(电子邮件告警)、报告和数据可视化(支持容量规划)、支持轮询和 trapping、Web 前端访问、免费开源(GPLv2 许可证)。
2、Zabbix 的功能特性
- 数据收集:支持可用性及性能检测;兼容 SNMP、IPM、MX 监控;支持自定义检测和间隔收集数据;包含 Server、Proxy、Agent 三种角色。
- 灵活的阈值定义:自定义问题阀值(触发器),存储于后端数据库。
- 高级告警配置:支持告警升级、自定义接收者及方式;告警信息可配置,支持宏变量;通过远程命令实现自动化动作。
- 实时绘图:内置绘图方法实现监控数据实时绘图。
- 扩展的图形化显示:支持自定义多监控项视图;生成网络拓扑、自定义面板和幻灯片(支持 dashboard 显示);生成监控报告。
- 历史数据存储:数据存储于数据库;历史数据可配置;内置数据清理机制。
- 配置简单:一次配置长期监控(除非调整或删除);支持通过模板添加监控设备。
- 模板使用:模板可添加组监控;支持继承。
- 网络自动发现:自动发现网络设备、Agent 自动注册;自动发现文件系统、网卡设备、SNMP OID 等。
- 快速的 Web 接口:Web 前端基于 PHP 编写,访问无障碍。
- Zabbix API:提供程序级访问接口,方便第三方程序接入。
- 权限系统:安全权限认证;用户可限制允许维护的列表。
- 全特性、Agent 易扩展:可部署于监控目标;支持 Linux 及 Windows。
- 二进制守护进程:C 语言开发,高性能、低内存消耗;易移植。
- 应对复杂环境:通过 Zabbix Proxy 实现远程监控。
3、Zabbix 角色及架构
- Zabbix Server:服务端守护进程,接收 Zabbix Agentd、Zabbix Proxy 提交的数据,也可主动获取数据。
- Zabbix Agent:客户端守护进程,负责收集客户端数据(如 CPU 负载、内存、硬盘使用情况等)。
- Zabbix Proxy:代理守护进程,功能类似 Server,作为中转站将收集的数据提交给 Server。
- Zabbix Web:Web 界面,管理员通过其管理配置和查看监控信息,可与 Server 同机或独立部署。
- 整体架构:包含监控客户端(Zabbix Agent)、监控代理服务器(Zabbix Proxy)、监控服务器(Zabbix Server)及前端界面(PHP 编写);支持主动 / 被动模式,涉及端口 10050(Agent)、10051(Server/Proxy)、80(Web);数据库支持 MySQL、Oracle、PostgreSQL、SQLite 等;支持无 Agent 监控(通过 Telnet、SNMP、IPMI、SSH 等)。
五、部署流程
1、资源清单
操作系统 | 配置 | 主机名 | IP 地址 | 角色 |
---|---|---|---|---|
openEuler 24.03 | 2C4G | server01(01) | 192.168.10.101 | Zabbix 服务端 |
openEuler 24.03 | 2C4G | server02(02) | 192.168.10.102 | Zabbix proxy |
openEuler 24.03 | 2C4G | proxy(03) | 192.168.10.103 | 被监控节点 |
openEuler 24.03 | 2C4G | zabbix(04) | 192.168.10.104 | 被监控节点 |
2、基础环境配置(所有节点)
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
关闭 SELinux
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
修改主机名
01
hostnamectl set-hostname server01
bash02
hostnamectl set-hostname server02
bash03
hostnamectl set-hostname proxy
bash04
hostnamectl set-hostname zabbix
bash
3、部署 Zabbix Server(04)
添加 Zabbix 源
rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm
dnf clean all
安装软件包
dnf -y install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent
dnf -y install mysql
dnf -y install mysql-server-8.0.41
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
备注:Zabbix 6.4.8 要求软件版本:
MySQL 8.0.30-8.1.X、MariaDB 10.5.00-11.1.X、Nginx 1.20 或更高、PHP 7.4.0-8.2.X。
配置数据库
systemctl start mysqld
systemctl enable mysqld
mysql -uroot
执行 SQL 语句:
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;
导入数据
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
[root@zabbix ~]# mysql -uroot -p
Enter password: 123456
执行 SQL 语句:
set global log_bin_trust_function_creators= 0;
quit;
配置 Zabbix Server
修改/etc/zabbix/zabbix_server.conf
文件,
#在大约 129 行取消注释并修改密码
DBPassword=zabbix。
配置 Zabbix 页面
修改/etc/nginx/conf.d/zabbix.conf
文件,
#取消注释
server {listen 8080;server_name _;
启动服务
systemctl restart zabbix-server zabbix-agent nginx php-fpm
systemctl enable zabbix-server zabbix-agent nginx php-fpm
4、Zabbix 页面配置
登录 Zabbix:访问http://192.168.10.104:8080/
设置语言:选择合适语言(如中文)。
检查环境:通过 “检查必要条件” 页面确认环境是否满足。
配置数据库连接:按页面提示填写数据库连接信息。
主机名设置:保持默认即可,确认时区(系统默认 UTC+0000,可根据需求调整)。
安装前汇总:检查配置参数,无误后点击 “下一步”。
完成安装:提示 “Zabbix 前端已经配置好了” 即完成。
登录:默认账号Admin
,默认密码zabbix
。
5、部署 Proxy(03)
添加 Zabbix 源
rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm
dnf clean all
安装软件包
dnf -y install zabbix-proxy-mysql zabbix-sql-scripts zabbix-selinux-policy mysql
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 节点执行(04):
mysql -uroot -p123456
set global log_bin_trust_function_creators=1;
exit
Proxy 节点执行(IP 地址修改为 Zabbix Server 的 IP)(03):
[root@proxy ~]# cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix_proxy -h 192.168.10.104
Enter password: zabbix
Zabbix Server 节点执行(04):
mysql -uroot -p123456
set global log_bin_trust_function_creators=0;
exit
配置 Zabbix Proxy:修改/etc/zabbix/zabbix_proxy.conf
文件
Server=192.168.10.104 #32行,Zabbix Server 节点 IP。
Hostname=Zabbix proxy #42行,后续 Web 页面添加时需保持一致,可默认不修改。
DBHost=192.168.10.104 #157行,Zabbix Server 节点 IP。
DBPassword=zabbix #194行,数据库密码。
启动服务
systemctl start zabbix-proxy
systemctl enable zabbix-proxy
Web 页面添加 Proxy:路径为 “管理 -->Proxy--> 创建 agent 代理”,选择主动式(默认)。
6、部署 Agent
添加 Zabbix 源
rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm
dnf clean all
安装软件包
dnf -y install zabbix-agent
配置 Agent:修改/etc/zabbix/zabbix_agentd.conf
文件
Server=192.168.10.104 #上报目标 IP,Server 或 Proxy 的 IP
ServerActive=192.168.10.104 #通常与 Server 行配置一致
Hostname=server01 #需与 Server 端 Web 页面主机名称一致,可自定义
启动服务
systemctl start zabbix-agent
systemctl enable zabbix-agent
添加主机
- 路径:“数据采集 -- 主机 -> 创建主机”。
- 配置项:主机名称(与 Agent 配置文件中 Hostname 一致);
- 选择模板(可使用自带或自定义模板);
- 选择主机群组(已有或新建);
- 添加接口Agent节点(填写被监控节点 IP)。
通过 Proxy 上报:步骤类似直接添加主机,需选择之前创建的 Proxy。
rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm
dnf clean all
dnf -y install zabbix-agentvim /etc/zabbix/zabbix_agentd.conf
Server=192.168.10.103
ServerActive=192.168.10.103
Hostname=server02systemctl start zabbix-agent
systemctl enable zabbix-agent
注:不要忘记将server02添加到proxy,然后应用
7、扩展:解决图像字体显示问题
查找 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
替换字体
# 上传msyhl.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
表示把符号连接的目的目录视为一般文件。 - 操作后刷新页面观察效果。