安装、配置和扩展开源 Ganglia 以有效地监视数据中心
随着数据中心的增长和管理人员的缩减,对计算资源使用有效监视工具的需求变得比以往更加迫切。术语监视 在应用到数据中心时可能会让人混淆,因为它的含义会根据具体的说话者和听众而有所不同。例如:
- 在集群中运行应用程序的人员会思考:“我的作业什么时候运行?它什么时候会完成?以及与上一次相比,它是怎样执行的?”
- 网络运营中心(NOC)的操作员会思考:“什么时候会出现表示需要解决问题的红灯并安排服务电话?”
- 系统工程部的人员会思考:“我们的机器如何执行?所有服务是否运行正常?我们可以看到哪些趋势以及如何更好地利用计算资源?”
面对如此多的定义,您必须查找大量的代码才能监视您真正想要监视的内容,不仅如此,还存在无数的产品和服务。可是幸运的是,许多监视工具都是开源的 —— 实际上,某些开源工具的表现比尝试完成同样工作的某些商业应用程序还要好。
使用开源监视工具最困难的部分是实现适合环境的安装和配置。使用开源监视工具的两个主要问题是:
- 没有一个工具可以按照期望的方式监视所需的所有内容。为什么?因为不同的用户将以不同的方式定义监视(正如我刚才所述)。
- 由于存在第一个问题,因此要让工具完全按照期望在数据中心中工作可能需要完成大量自定义。为什么?因为不管多么地标准,每一个环境也都是独一无二的。
顺便说一句,商业监视工具也同样存在这两个问题。
因此,我将介绍 Ganglia 和 Nagios,这是两个用于监视数据中心的工具。这两个工具被大量用于高性能计算(HPC)环境中,但是它们对于其他环境也具有很大的吸引力(例如云、呈现集群和托管中心)。此外,两者对监视的定义也采取了不同的侧重点。Ganglia 更多地与收集度量数据并随时跟踪这些数据有关,而 Nagios 一直致力于成为一种报警机制。
随着独立项目的发展,逐步出现了交叠。例如:
- Ganglia 过去要求代理运行在每台主机上以从中收集信息,但是现在可以通过 Ganglia 的欺骗机制获得度量数据。
- Nagios 过去也是仅用于从目标主机中轮询信息,但是现在提供了在目标主机上运行代理的插件。
虽然这些工具在某些功能领域里已经发生交叠,但是两者之间还是有许多不同之处,可以让您从运行这两个工具中获益。同时运行两个工具可以相互弥补不足:
- Ganglia 没有内置通知系统,而 Nagios 在这方面表现杰出。
- Nagios 似乎没有适合目标主机的可伸缩内置代理(这是一个争议点),而 Ganglia 在设计之初就考虑到这点。
还有其他开源项目也可以完成这两个工具完成的工作,并且有些项目在某些领域做得比其他项目好。常用开源监视解决方案包括 Cacti、Zenoss、Zabbix、Performance Copilot(PCP)和 Clumon(而且我相信您已经有了自己喜欢的选择)。这些工具(包括 Ganglia 和一些 Nagios 插件)中的许多工具在底层都使用了 RRDTool 或 Tobi Oetiker 的 MRTG(Multi Router Traffic Grapher),以生成漂亮的图形和存储数据。
尽管用于监视数据中心的开源解决方案如此众多,我却经常惊讶地发现许多向外扩展的计算中心在开发自己的解决方案,而忽略其他人已经完成的工作。
在这个两部分文章中,我将讨论 Ganglia 和 Nagios,因为有一些事实证据表明这些工具是最常用的。尽管将两者集成在一起是非常普遍的实践(尤其是在一些大型的 HPC 实验室和大学里),但是我发现很少有文章对此进行介绍。
学完本系列,您应当能够安装 Ganglia 并与 Nagios 绑定在一起,并且可以回答不同的用户组向您询问的监视问题。这只是一个开始,但是应当可以帮助您了解基础知识并逐步把握集群的整体情况。
在本文中,我将指导您完成:
- 安装和配置基本的 Ganglia 设置。
- 如何使用 Python 模块来用 IPMI(Intelligent Platform Management Interface)扩展功能。
- 如何使用 Ganglia 主机欺骗来监视 IPMI。
我们的目标 —— 设置 HPC Linux® 集群的基准监视系统,在其中可以在某个程度上解决上面所述的三个不同监视意图:
- 应用程序人员可以看到队列的排队情况如何,并可以看到运行作业的可用节点。
- NOC 可以收到系统故障报警或者在 Nagios Web 界面上看到一个闪亮的红色错误指示灯。如果节点出现故障或者温度过高,他们也可以通过电子邮件收到通知。
- 系统工程师可以绘制数据曲线图、报告集群利用情况并决定未来采购哪些硬件。
Ganglia 简介
Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测量数以千计的节点。每台计算机都运行一个收集和发送度量数据(如处理器速度、内存使用量等)的名为 gmond
的守护进程。它将从操作系统和指定主机中收集。接收所有度量数据的主机可以显示这些数据并且可以将这些数据的精简表单传递到层次结构中。正因为有这种层次结构模式,才使得 Ganglia 可以实现良好的扩展。gmond
带来的系统负载非常少,这使得它成为在集群中各台计算机上运行的一段代码,而不会影响用户性能。
所有这些数据收集会多次影响节点性能。网络中的 “抖动(Jitter)” 发生在大量小消息同时出现时。我们发现通过将节点时钟保持一致,就可以避免这个问题。
记住,镜像经常变化。如果此镜像不工作,则使用搜索引擎查找 libconfuse-2.6.-1.fc9 source RPM。
RRDTool
RRDTool 表示:轮循数据库工具(Round Robin Database Tool)。它是由 Tobias Oetiker 创建的,并且为许多高性能监视工具提供了引擎。Ganglia 是其中之一,但是 Cacti 和 Zenoss 是另外两个。
要安装 Ganglia,首先需要让 RRDTool 运行在监视服务器上。RRDTool 将提供其他程序使用的两个非常优秀的功能:
- 它将在轮循数据库中存储数据。随着捕捉的数据变得越来越旧,解析的精确性将变得越来越低。这将占用很少的内存并且在大多数情况下仍然有用。
- 它可以通过使用命令行实参根据捕捉的数据生成图形。
要安装 RRDTool,请运行以下代码(对 1.3.4 版和 1.3.6 版进行了测试):
cd /tmp/ wget use strict; # to keep things clean... er cleaner use Socket; # to resolve host names into IP addresses # code to clean up after forks use POSIX ":sys_wait_h"; # nodeFile: is just a plain text file with a list of nodes: # e.g: # node01 # node02 # ... # nodexx my $nodeFile = "/usr/local/bin/nodes"; # gmetric binary my $gmetric = "/usr/bin/gmetric"; #ipmitool binary my $ipmi = "/usr/bin/ipmitool"; # userid for BMCs my $u = "xcat"; # password for BMCs my $p = "f00bar"; # open the nodes file and iterate through each node open(FH, "$nodeFile") or die "can't open $nodeFile"; while(my $node = <FH>){ # fork so each remote data call is done in parallel if(my $pid = fork()){ # parent process next; } # child process begins here chomp($node); # get rid of new line # resolve node's IP address for spoofing my $ip; my $pip = gethostbyname($node); if(defined $pip){ $ip = inet_ntoa($pip); }else{ print "Can't get IP for $node!\n"; exit 1; } # check if the SDR cache file exists. my $ipmiCmd; unless(-f "/tmp/$node.sdr"){ # no SDR cache, so try to create it... $ipmiCmd = "$ipmi -I lan -H $node-bmc -U $u -P $p sdr dump /tmp/$node.sdr"; `$ipmiCmd`; } if(-f "/tmp/$node.sdr"){ # run the command against the cache so that its faster $ipmiCmd = "$ipmi -I lan -H $node-bmc -U $u -P $p -S /tmp/$node.sdr sdr type Temperature "; # put all the output into the @out array my @out = `$ipmiCmd`; # iterate through each @out entry. foreach(@out){ # each output line looks like this: # Ambient Temp | 32h | ok | 12.1 | 25 degrees C # so we parse it out chomp(); # get rid of the new line # grap the first and 5th fields. (Description and Temp) my ($descr, undef, undef, undef,$temp) = split(/\|/); # get rid of white space in description $descr =~ s/ //g; # grap just the temp, (We assume C anyway) $temp = (split(' ', $temp))[0]; # make sure that temperature is a number: if($temp =~ /^\d+/ ){ #print "$node: $descr $temp\n"; my $gcmd = "$gmetric -n '$descr' -v $temp -t int16 -u Celcius -S $ip:$node"; `$gcmd`; } } } # Child Thread done and exits. exit; } # wait for all forks to end... while(waitpid(-1,WNOHANG) != -1){ 1; } |
除了所有解析之外,此脚本只运行 ipmitool
命令并获取温度。然后,它将针对每项度量数据,使用 gmetric
命令将这些值放到 Ganglia 中。
- 以 cron 作业的形式运行脚本。
运行 crontab -e
。我添加了以下每 30 分钟就运行一次的条目:30 * * * * /usr/local/bin/ipmi-ganglia.sh
。您可能希望它发生得更加频繁或者次数更少。
- 打开 Ganglia 并查看结果。
打开 Ganglia Web 浏览器并查看一个节点的图形,您可以看到节点被欺骗并且更新了每个节点条目:
图 6. no_group 度量数据
IPMI。
developerWorks Linux 专区 寻找为 Linux 开发人员(包括 Linux 新手入门)准备的更多参考资料,查阅我们 最受欢迎的文章和教程。
在 developerWorks 上查阅所有 Linux 技巧 和 Linux 教程。
随时关注 developerWorks 技术活动和 网络广播。
获得产品和技术
- 获得必备的 libconfuse-2.6.-1.fc9 source RPM。
- 获取 Ganglia 3.1.1。
- Zenoss
- Zabbix
- Performance Co-Pilot
- IBM 试用软件 构建下一个 Linux 开发项目,可以从 developerWorks 直接下载获得。
讨论
- 通过博客、论坛、podcasts 和空间加入 developerWorks 社区。
关于作者
Vallard Benincosa 是一位 “懒惰” 的 Linux 认证 IT 专家,在 IBM Linux Clusters 团队工作。他和他的妻子、两个小孩住在俄勒冈州波特兰市。
转自 /developerworks/cn/linux/l-ganglia-nagios-1/