部署Zabbix企业级分布式监控
目录
一、监控系统概述
1.1 监控的重要性
1.2 监控类型
1.3 监控层次划分
二、监控系统的实现原理
2.1 模块组成
2.2 采集协议
2.3 监控模式
2.4 代理架构
三、监控系统的开源产品
四、Zabbix 系统概述
4.1 初识 zabbix
4.2 Zabbix 的功能特性
4.3 Zabbix 角色及架构
五、部署流程
5.1 资源清单
5.2 基础环境配置
5.3 部署 zabbix server
5.4 zabbix 页面配置
5.5 部署 proxy
5.6 部署 Agent
六、扩展:解决图像字体显示问题
一、监控系统概述
1.1 监控的重要性
在 IT 运维中,监控占据着 30% 左右的重要比例。构建一个真正可用的监控告警系统对 IT 运维工程师而言是一项艰巨的任务,它能帮助运维人员及时发现并解决问题,保障 IT 系统的稳定运行。
1.2 监控类型
在计算机领域,监控可分为 5 种类型:
- 应用性能监控
- 业务交易监控
- 网络性能监控
- 操作系统监控
1.3 监控层次划分
按照逻辑层次划分,监控行为可分为 5 个层次:
- 基础设施监控:由运维人员负责,接近硬件体系,涉及网络、交换机、路由器等低层设备。需监控网络流量、丢包情况、错包情况、连接数等核心指标,这些设备的可靠性和稳定性直接影响上层服务应用的稳定性。
- 系统层监控:涵盖物理机、虚拟机、操作系统等。主要监控 CPU 使用率、内存占用率、磁盘 IO 和网络带宽情况等核心指标。
- 应用层监控:与服务紧密相关,包括对 URL 访问的性能、调用数、延迟,服务的错误率,SQL(尤其是慢 SQL),缓存的命中率和性能,每个服务的响应时间等。
- 业务监控:以交易网站为例,关注用户登录、注册、下单、支付等直接影响业务交易的情况。可为运营和公司高管提供数据,支撑公司战略决策。
- 端用户体验监控:监控用户通过 app、h5、pc 端使用应用程序时的体验、性能、错误等。包括用户端使用性能、返回码,用户所在城市地区、运营商情况,客户端使用的操作系统和浏览器版本等。
二、监控系统的实现原理
2.1 模块组成
一个监控系统大体由两部分组成:
- 数据采集部分
- 数据存储、分析告警、展示部分
2.2 采集协议
监控 IT 数据采集按照支持的协议方式可分为:
- 专用客户端采集(私有协议、专有客户端)
- 公用协议采集(SNMP、IPMI、SSH、Telnet)
2.3 监控模式
监控系统数据采集的工作模式有两种:
- 被动模式:服务器端到客户端采集数据,对监控端服务器的开销较大,适合小规模监控环境。
- 主动模式:客户端主动上报数据到服务器,对监控端服务器的开销较小,适合大规模监控环境。
2.4 代理架构
对于大规模监控环境,除使用主动模式外,还需使用代理架构(C/S/P 架构,即 Client/Proxy/Server),以分摊服务器端的性能开销,且支持跨地域、跨网络的分布式监控。
三、监控系统的开源产品
- zabbix:企业级运维监控平台,可监控服务器、网络设备到 Web 应用程序和数据库的性能和可用性,适配多种系统。
- Prometheus+Grafana:Prometheus 是开源系统监控和警报工具包,主要用于基础设施监控;Grafana 常用于数据可视化。
- Cacti:网络流量监测图形分析工具,连接到 RRDToo1 生成网络数据相关图表,具有强大的数据和用户管理功能。
- Nagios:监控系统运行状态和网络信息的系统,可监控本地或远程主机及服务,提供异常通知功能。
- Checkmk:高可扩展的监控工具,可整合服务器、网络、资产等监控,有基础版(开源免费)和企业版(附加功能)。
- OpenNMS:企业级基于 Java/XML 的分布式网络和系统监控管理平台,专为 Linux 设计,也支持其他系统,可通过多种方式收集系统指标。
- Netdata:Linux 性能实时监测工具,为 Linux 系统、应用程序等提供实时性能监测,监控指标多而广,数据收集速度快。
- LibreNMS:开源、功能丰富且强大的网络监控系统,易于安装配置,支持多种平台、供应商、设备和协议。
四、Zabbix 系统概述
4.1 初识 zabbix
Zabbix 是企业级的分布式开源监控系统解决方案,基于 Web 界面,可监控网络众多参数以及服务器、虚拟机等的健康和完整性。由 AlexeiVladishev 创建,目前由 ZabbixSIA 主导开发和支持。支持轮询和 trapping,其报告、统计数据和配置参数可通过 Web 前端访问,免费且基于 GPL 通用公共许可证第 2 版分发。
4.2 Zabbix 的功能特性
- 数据收集:包括可用性及性能检测;支持多种监控方式;自定义检测;自定义间隔收集数据;有 Server、Proxy、Agent 三种角色。
- 灵活的阈值定义:允许自定义问题阀值(触发器),存储在后端数据库中。
- 高级告警配置:可自定义告警升级、接收者及告警方式;告警信息可配置并使用宏变量;通过远程命令实行自动化动作。
- 实时绘图:通过内置绘图方法实现监控数据实时绘图。
- 扩展的图形化显示:允许自定义创建多监控项视图;生成网络拓扑、自定义面板和 slide shows,可在 dashboard 页面显示;生成监控报告。
- 历史数据存储:数据存储在数据库中;历史数据可配置;内置数据清理机制。
- 配置简单:一次配置终生监控(除非调整或删除);允许使用模板添加监控设备。
- 模板使用:模板中可添加组监控;模板允许继承。
- 网络自动发现:自动发现网络设备;Agent 自动注册;自动发现文件系统、网卡设备等。
- 快速的 Web 接口:Web 前端采用 PHP 编写,访问无障碍。
- Zabbix API:提供程序级别的访问接口,方便第三方程序接入。
- 权限系统:安全的权限认证;用户可限制允许维护的列表。
- 全特性、Agent 易扩展:可在监控目标上部署,支持 Linux 及 Windows。
- 二进制守护进程:C 语言开发,高性能,低内存消耗,易移植。
- 具备应对复杂环境情况:通过 Zabbix Proxy 可创建远程监控。
4.3 Zabbix 角色及架构
- Zabbix Server:zabbix_server 是服务端守护进程,Zabbix Agentd、Zabbix Proxy 的数据最终提交到 Server,也可能由 Server 主动获取数据。
- zabbix Agent:zabbix_agentd 是客户端守护进程,用于收集客户端数据(如 CPU 负载、内存等)。
- zabbix Proxy:zabbix_proxy 是代理守护进程,功能类似 Server,作为中转站将收集的数据提交 / 被提交到 Server。
- zabbix_Web:zabbix 的 web 界面,管理员通过它管理配置和查看监控信息,通常与 zabbix_server 同主机,也可单独部署。
- Zabbix 整体架构:包含监控客户端、监控代理服务器、监控服务器,涉及不同端口和数据采集模式,以及数据库等组件。
五、部署流程
5.1 资源清单
操作系统 | 配置 | 主机名 | 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 | 被监控节点 |
5.2 基础环境配置
- 关闭防火墙
[root@localhost~]#systemctl stop firewalld
[root@localhost ~]#systemctl disable firewalld
- 关闭 Selinux
[root@localhost ~]#setenforce0
- 时间同步
[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.3 部署 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
#执行以下SQL语句
ALTER USER 'root'@'localhost' IDENTIFED 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
5.4 zabbix 页面配置
- 登录 zabbix:http://192.168.207.137:8080/
- 设置语言:选择合适的语言。
- 检查环境:确保满足安装的必要条件。
- 配置数据库连接:按照提示填写数据库相关信息。
- 主机名设置:保持默认即可。
- 安装前汇总:检查配置参数,无误后点击下一步。
- 完成安装。
- 登录:默认账号 Admin,默认密码 zabbix。
5.5 部署 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
2.web 页面添加 proxy:
管理 -->Proxy > 创建 agent 代理,选择主动式(默认)。
5.6 部署 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 写 server 节点的 IP,上报给 proxy 写 proxy 的 IP(一般和 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
3. 查找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--symbolic 表示创建软连接,没有 - s 时表示创建硬链接
- -f--force 强行删除任何已存在的目标文件
- -n--no-dereference 把符号连接的目的目录视为一般文件
完成上述操作后,刷新页面即可观察字体显示效果。