目录
[1.1 监控的重要性](#1.1 监控的重要性)
[1.2 监控类型](#1.2 监控类型)
[1.3 监控层次划分](#1.3 监控层次划分)
[2.1 模块组成](#2.1 模块组成)
[2.2 采集协议](#2.2 采集协议)
[2.3 监控模式](#2.3 监控模式)
[2.4 代理架构](#2.4 代理架构)
[四、Zabbix 系统概述](#四、Zabbix 系统概述)
[4.1 初识 zabbix](#4.1 初识 zabbix)
[4.2 Zabbix 的功能特性](#4.2 Zabbix 的功能特性)
[4.3 Zabbix 角色及架构](#4.3 Zabbix 角色及架构)
[5.1 资源清单](#5.1 资源清单)
[5.2 基础环境配置](#5.2 基础环境配置)
[5.3 部署 zabbix server](#5.3 部署 zabbix server)
[5.4 zabbix 页面配置](#5.4 zabbix 页面配置)
[5.5 部署 proxy](#5.5 部署 proxy)
[5.6 部署 Agent](#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 -
查找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 把符号连接的目的目录视为一般文件
完成上述操作后,刷新页面即可观察字体显示效果。