首页 >> 服务器技术 >> 运维 >> 正文

如何对高性能计算群组进行监控(组图)

  假设一个场景:你是一个自负的系统管理员,现在有一个全新的计算群组坐落在你面前,LINPACK已经安装完毕,一系列工作已经井然有序地开展。一切就位,用户也很开心,你开始处理其他未解决的问题。这时,你突然收到一封邮件:“为什么运行速度变慢了?”或者一位项目经理来找你,并询问那个新款高价硬件是否已经安装。或许你在做来年的计划,因此需要知道近期的产品使用趋势。对系统进行监控,以建立基线数据和群组当前的性能信息,上述问题将易于解决。

  监控这一理念有多种解释方式。对于高性能计算(HPC),人们更多关注的是利用率和计算结点性能的指标,而非服务的可用性和问题通知。这篇文章主要关注前者,但Nagios和OpenNMS程序则在管理后两类问题上更有优势。

  在开始阅读这篇文章之前,先假设你走近了一个运行中的计算群组;一个文件形式为mod_php的机能网络服务器(也有GD支持);可轻松处理基础的系统管理工作、配置Apache结构和应用命令行工具。下列命令行运行于CentOS 5和Gentoo系统,但通用概念应该适用于所有Linux系统(很多其他类似UNIX系统的操作系统同样可用)。

  数据收集

  监控可分为两个程序。其一事实上是选取所需的指标,接着收集来自主机的数据。最通用的指标是CPU使用率、内存利用率、网络带宽以及磁盘I/O统计数据。这些数据体现出系统各个方面的性能状况,同时也可以指出哪一部分存在潜在问题或者是系统性能提高的瓶颈所在。数据收集到之后,第二项工作是将这些数据进行整理并分析。

  Linux系统提供了众多获取系统性能数据的方式。常用的工具有vmstat、iostat和netstat,还有很多其他不常用工具。这些程序在采用时通常被调整为非交互的形式——这是连续监控系统的重要理念。除非有易于解析的模态,否则交互式程序的运行状态会受到影响。部分程序(例如sar和atop)有数据收集模式,并且可生成大范围的指标的细节报告。即使其他的数据收集方式均失败了,也可直接从/proc或 /sys系统文件中得到数据,尽管你仅需要分析初级数据,以得到有用的信息。比如,不同的CPU利用率值事实上是通过计算/proc/stat中的数据得到。

  几乎所有的指标都可以简化为数据或数据集合;盖上时戳;并将这些数据存储起来以留待系统恢复之用。存储模式有多种,可以是一般模式(普通的txt文件),也可以是复杂模式(一系列规范的SQL表格)。rrdtool 工具采用的RRD模式是专门用来存储度量数据的,适用于此项工作。Ganglia则将RRD文件用于数据存储。

  基本监控一般从vmstat开始。这一工具可提供大量系统的相关数据,同时也可定期报告系统的运行情况。表一中的命令是让vmstat每五秒钟报告一次运行情况,但仅显示一次标题行。就我们的目的来看,这一命令行的头三行不是必须的,因为命令行的第一、二行是栏目标题行,而第三行报告了从系统上次重新启动起的平均值。遗憾的是,vmstat不能显示平均工作量,但是我们可以通过采用其他程序的数据而计算出这一数值。

  为了达到我们的目的,我们令awk给每一命令行盖个时间戳,同时获取/proc/loadavg(存储当前平均工作量的数据)的内容。最后,输出数据被发送到tee命令,这样输出数据就可以显示在STDOUT而存储在vmstat中。一般来说,对于普通文件的更改,仅存储数据就可以了。而对于每一个程序,请分别检查人员手册以了解使用细节和命令语法、以及输出模式。  

$vmstat-n5|awk'(NR>3){getlineload<"/proc/loadavg";printsystime(),$0,load}'|teevmstat.dat
  11967389250118813882025482467494800203470956635115400.460.380.521/14031493
  119673893510188123972263420674948008600364898766120820.630.410.532/14031493
  1196738945011889929627370067497600102903708100166130820.680.430.541/14031493
  11967389551118889716281340674976007640365499216100840.730.450.541/14031493

  举例说明,表一存储的是单一ASCII平面文件的数据。优点在于这一模式简单易用:数据既存即用,同时不需要特殊的工具对之进行选取分析。缺点在于以纯文本形式存储的数据没有实现对磁盘空间的有效利用,同时,对于很大的文件,阅读和处理数据所需时间过长。没有保留元数据,且只有在知道显示哪些数据的情况下,才可处理文件。比如,上述输出文件,除非获知数据来自vmstat,否则我们无法重新显示数据。一般的监控,平面文件就足够了。但对于严格的数据收集,我们则需要选取更有效的解决方案——例如采用RRD文件或数据库。