资源监控是实现IT设施可用性、可靠性、安全性的基本保障之一。随着虚拟化技术的快速引入,需要新的工具来监控新引入的虚拟化层(Hypervisor)。传统资源监控的主要对象是物理设施(服务器、存储、网络)、操作系统、应用与服务程序,但由于虚拟化的引入使分配的各种资源可以动态调整,这种系统虚拟资源动态性特征增加了系统监控的复杂性。虚拟化环境中监控的目的和复杂性主要体现在以下方面。
- 状态监控:监控所有物理资源和虚拟资源的工作状态,包括物理服务器、虚拟化软件VMM、虚拟服务器、物理交换机与路由器、虚拟交换机与路由器、物理存储与虚拟存储等。
- 性能监控:IaaS虚拟资源的性能监控分为两个部分。基本性能监控与传统非虚拟化环境中的监控一样,主要是从虚拟机操作系统和VMM的角度来监视与度量CPU、内存、存储、网络等设施的性能。与虚拟化相关的性能监控主要提供由于引入虚拟化技术而采用的监控度量指标数据,如虚拟机部署的时间、迁移的时间、集群的性能等。
- 容量监控:由于当今各企业或机构在管理、人员构成上的变化和调整,对于IT资源的需求也不断变化,需要IT人员不断规划IT系统容量。容量规划使用长期的资源监控数据来判断系统资源使用率的变化规律,进而做出长期而准确的IT系统规划,因此容量监控是一种宏观角度的长期系统性能监控。容量监控的关键度量指标包括服务器、内存、网络、存储资源的平均值、峰值使用率和达到资源瓶颈的临界用户数。
- 安全监控:在IaaS环境中除了存在传统的IT系统安全问题,虚拟化技术的引入也因为虚拟机蔓生(sprawl)现象导致了很多新的面向虚拟化层的安全威胁。
- 传统安全监控:包括入侵检测、漏洞扫描、病毒扫描、网络风暴检测等。
- 虚拟机蔓生活动监控:包括监控虚拟机克隆、复制、迁移、网络切换、存储切换等虚拟机活动。
- 合规监控:监控各种操作、配置是否符合标准及规范,强化使用正版软件,检测违背IT管理策略的事件等。
- 访问控制监控:监控用户访问行为。
- 使用量度量:为了使IaaS服务具备可运营的条件,需要度量不同组织、团体、个人使用资源和服务的情况,有了这些度量信息便可以在后付费的IaaS提供模式中为用户生成结算信息和账单。为了实现资源度量监控,需要收集以下几个方面的信息。
- 服务使用时间:包括计算、存储、网络等服务的使用时间。
- 配置信息:包括虚拟机等服务的资源配置、软件配置信息。
- 事件信息:包括虚拟机等服务的开始、结束,资源分配与调整事件。
因为当前流行的虚拟化软件种类很多,所以在开发监控程序时需要一个支持主流虚拟化软件的开发库,从而能够与不同的虚拟化程序交互收集各种监控度量信息。监控系统会将收集到的信息保存到历史数据库中,为容量规划、资源度量、安全等功能提供历史数据。虽然虚拟化给系统监控提出了新的挑战,但也为自动响应、处理系统问题提供了很多物理环境无法提供的机会。
系统资源监控主要通过度量所收集的系统状态、性能相关数据的方式来实现,经常采用的方法如下。
- 日志分析:通过应用程序或者系统命令采集性能指标、事件信息、时间信息等,并将其保存到日志文件或者历史数据库中以分析系统或者应用的关键指标。资源管理需要将各种管理与调度操作、配置变更、资源生命周期等信息保存到监控信息库中。用户如果使用Linux操作系统的计算实例,可以运行各种Linux系统监控命令(包括top、iftop、vmstat、iostat、mpstat、df、free、pstree等),将这些命令的输出结果保存到日志文件当中。同时,很多虚拟化软件也提供了系统监控命令。例如,使用Xen虚拟化软件时,用户可以运行Xentop、Xenmon等命令来收集服务器性能指标信息。
- 包嗅探(Packet Sniffing):主要通过对网络中的数据拆包、检查、分析,提取相关信息用来分析网络或者相关应用程序的性能。
- 探针采集(Instrumentation):通过在操作系统或者应用中植入并运行探针程序来采集性能数据,最常见的应用实例是WMI(Windows Management Instrumentation)和SNMP协议。大多数操作系统都在被监视的系统中运行一个SNMP代理,以采集并通过SNMP协议发送系统性能数据。同时,VMware ESX、Xen虚拟化程序支持植入SNMP探针程序,而Hyper-V支持WMI探针程序。通过这些探针程序,一方面可以收集物理服务器的性能信息,另一方面也可以收集运行在物理服务器上的虚拟机信息。