- 深入浅出Prometheus:原理、应用、源码与拓展详解
- 陈晓宇 杨川胡 陈啸编著
- 2413字
- 2025-04-14 19:57:12
1.2 基础资源监控
从监控对象的角度来看,可以将基础资源监控分为网络监控、存储监控和服务器监控。
1.2.1 网络监控
这里讲解的网络监控主要包括:
◎ 对数据中心内网络流量的监控;
◎ 对网络拓扑发现及网络设备的监控;
◎ 对网络性能的监控及对网络攻击的探测等。
网络故障会导致主机之间无法通信而且数据无法传输,影响往往比较大,例如某大型互联网公司曾被挖断光缆,导致其整个数据中心不能正常对外通信。
虽然整个网络都构建在IP之上,但如果涉及网络中的各种设备,则对数据中心的网络监控通常是通过流量镜像完成的。通过配置交换机上面的镜像端口,可以将经过交换机的所有流量都导入监控系统;如果是虚拟设备,则可以通过 tcpdump 等工具获取网络数据包,通过汇总网络数据包的源 IP 地址和目的 IP 地址来汇聚网络的拓扑结构,通过分析TCP数据包来确定握手时间和网络延迟等。
网络设备的监控通常基于SNMP(Simple Network Management Protocol,简单网络管理协议),该协议支持网络管理系统,可用于监测连接到网络的设备。由于老版本的SNMP存在安全隐患,所以当前基本使用V3版本的SNMP。我们可以将SNMP看作客户端/服务器模式,在每个机器上面运行代理程序 Agent(服务端),通过在MIB库中定义的信息和管理功能完成对机器相关信息的采集,而SNMP的管理系统通过 GET和SET方式获取和设定被监控对象的属性,并且可以被动接收 Trap请求(Trap请求指被管理设备主动发送消息给SNMP管理系统)。
为了聚合多个代理,SNMP在部署架构中引入Master Agent,如图1-2所示。

图1-2
网络监控主要分为以下几个方向。
(1)网络性能监控(Network Performance Monitor,NPM):主要涉及网络监测、网络实时流量监控(网络延迟、访问量、成功率等)和历史数据统计、汇总和历史数据分析等功能。
(2)网络攻击检查:主要针对内网或者外网的网络攻击如 DDoS 攻击等,通过分析异常流量来确定网络攻击行为。
(3)设备监控:主要针对数据中心内的多种网络设备进行监控,包括路由器、防火墙和交换机等硬件设备,可以通过SNMP等协议收集数据。
网络监控的拓扑发现可以辅助业务梳理,特别是对于一些很久没有被维护的复杂系统,其服务之间的依赖关系非常模糊,使用网络的拓扑发现能很容易确定这些依赖关系。
目前,有很多公司提供了 NPM 解决方案,这些解决方案有天旦、nCompass、SolarWinds、Nagios(已开源)等。
1.2.2 存储监控
随着大数据时代的到来,存储的重要性日益凸显,从TB到PB,存储单位发生了变化,也对后端存储容量和存储监控提出了更高的要求。无论是高端光纤SAN存储还是当前流行的IP SAN,或者其他分布式存储,都需要完善的存储监控,来帮助人们获知存储性能瓶颈和使用容量等。
存储主要分为云存储和分布式存储两部分,如下所述。
◎ 云存储主要通过存储设备构建存储资源池,并对操作系统提供统一的存储接口,例如块存储的 SCSI和文件存储 NFS等。它们的特点是存储接口统一,并不识别存储数据的格式和内容,例如块存储只负责保存二进制数据块,这些二进制数据可能来自图片或视频,对于块存储来说都是一样的。
◎ 分布式存储主要构建在操作系统之上,提供分布式集群存储服务,主要是针对特定数据结构的数据存储。例如HDFS的大文件存储、Dynamo的键值数据存储、Elasticsearch的日志文档存储等。
这里说到的存储监控,主要指云存储监控,主要监控数据中心内部的存储使用量和读写速度。
我们可以将云存储监控分为存储性能监控、存储系统监控及存储设备监控。
◎ 在存储性能监控方面,块存储通常监控块的读写速率、IOPS、读写延迟、磁盘用量等;文件存储通常监控文件系统Inode、读写速度、目录权限等。
◎ 在存储系统监控方面,不同的存储系统有不同的指标。例如,对于Ceph存储,需要监控OSD、MON的运行状态,各种状态PG的数量,以及集群IOPS等信息。
◎ 在存储设备监控方面,对于构建在x86服务器上的存储设备,设备监控通过每个存储节点上的采集器统一收集磁盘、SSD、网卡等设备信息;存储厂商以黑盒方式提供的商业存储设备通常自带监控功能,可监控设备的运行状态、性能和容量等。
1.2.3 服务器监控
每个程序最终都会在对应的服务器上运行,对服务器的监控一方面是提供服务进程的运行环境信息,另一方面是通过汇总服务器上的监控数据来了解整个数据中心内部的服务器资源使用情况。
服务器监控包括物理服务器主机监控、虚拟机监控和容器监控,需要做到对多种环境的兼容,如下所述。
◎ 对服务器硬件的兼容。数据中心内的服务器通常来自多个厂商如Dell、华为或者联想等,服务器监控需要获取不同厂商的服务器硬件信息。
◎ 对操作系统的兼容。为了适应不同软件的需求,在服务器上会安装不同的操作系统如 Windows、Linux,采集软件需要做到跨平台运行以获取对应的指标。
◎ 对虚拟化环境的兼容。当前,虚拟化已经成为数据中心的标配,可以更加高效便捷地获取计算和存储服务。服务器监控需要兼容各种虚拟化环境如虚拟机(KVM、VMware、Xen)及容器(Docker、rkt)。
采集方式通常分为两种:一种是内置客户端,即在每台机器上都安装采集客户端;另一种是在外部采集,例如在虚化环境中可以通过Xen API、VMware Vcenter API或者Libvirt的接口分别获取监控数据。
从操作系统层级来看,采集指标通常如下。
◎ CPU:涉及整体的 CPU使用量、用户态百分比、内核态百分比、每个 CPU的使用量、等待队列长度、I/O等待百分比、CPU消耗最多的进程、上下文切换次数、缓存命中率等。
◎ 内存:涉及内存使用量、剩余量、内存占用最高的进程、交换分区大小、缺页异常数等。
◎ 网络I/O:涉及每个网卡的上行流量、下行流量、网络延迟、丢包率等。
◎ 磁盘I/O:涉及硬盘的读写速率、IOPS、磁盘用量、读写延迟等。
对于 Linux 操作系统,可以通过如图1-3(来自 http://www.brendangregg.com/Perf/linux_perf_tools_full.png)所示的各种性能检测工具查看系统中各个方面的性能指标。

图1-3
服务器监控还包括针对物理硬件的监控,可以通过 IPMI(Intelligent Platform Management Interface,智能平台管理接口)实现。IPMI是一种标准开放的硬件管理接口,不依赖于操作系统,可以提供服务器的风扇、温度、电压等信息。
伴随着云计算的兴起,容器和虚拟机监控成为最近几年所有监控系统的必备功能,我们通常可以通过虚拟化软件提供的监控接口获取其监控数据。由Google开源的cAdvisor可以获取主机上所有容器的性能指标。
开源的服务器监控项目主要有Zabbix、Open-Falcon及Prometheus等。