欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ganglia集群监控系统_使用Ganglia监控企业集群

程序员文章站 2022-06-17 17:09:36
...

随着数据中心的增长和管理人员的减少,对用于计算资源的高效监控工具的需求比以往任何时候都更加重要。 监视器一词在应用于数据中心时可能会造成混淆,因为根据谁在说和谁在听,它的含义有所不同。 例如:

  • 在集群上运行应用程序的人认为:“我的工作什么时候运行?什么时候完成?与上次相比,它的执行情况如何?”
  • 网络运营中心(NOC)的运营商认为:“我们何时会看到红灯表示需要修复某些问题并拨打服务电话?”
  • 系统工程小组的成员认为:“我们的机器性能如何?所有服务是否正常运行?我们看到什么趋势?如何更好地利用我们的计算资源?”

在如此疯狂的定义中,您一定会发现数TB的代码来精确监视要监视的内容。 而且还不止于此; 也有无数的产品和服务。 不过,幸运的是,许多监视工具是开源的-实际上,某些开源工具比某些试图完成同一任务的商业应用程序做得更好。

使用开源监视工具最困难的部分是实施适合您的环境的安装和配置。 使用开源监视工具的两个主要问题是

  • 没有工具可以按照您想要的方式监视您想要的一切。 为什么? 因为不同的用户将以不同的方式定义监视(如我之前提到的)。
  • 由于第一个问题,可能需要大量的自定义操作才能使该工具以所需的方式在您的数据中心正常工作。 为什么? 因为每个环境,无论多么标准,都是独一无二的。

顺便说一下,对于商业监视工具也存在这两个相同的问题。

因此,我将讨论监视数据中心的两个工具Ganglia和Nagios。 两者都在高性能计算(HPC)环境中大量使用,但是它们的品质也使其对其他环境(例如云​​,渲染场和托管中心)具有吸引力。 此外,两者在监控的定义上都采取了不同的立场。 当Nagios专注于成为一种警报机制时,Ganglia更关注收集指标并随时间进行跟踪。

随着独立项目的发展,重叠的部分也随之发展。 例如:

  • Ganglia曾经要求代理在每台主机上运行以从中收集信息,但是现在可以通过Ganglia的欺骗机制从几乎任何事物中获取指标。
  • Nagios还曾经只轮询来自其目标主机的信息,但现在具有在目标主机上运行代理的插件。

尽管这些工具已经在某些功能领域融合在一起,但是它们之间仍然有很多不同之处,因此您可以从同时运行它们中受益。 将它们一起运行可以填补每个产品的空白:

  • Ganglia没有内置的通知系统,而Nagios擅长于此。
  • Nagios似乎在目标主机上没有可扩展的内置代理(人们可能会争论这一点),而这是Ganglia的有意原始设计的一部分。

还有其他一些开源项目可以完成这两个方面的工作,并且某些项目在某些方面比其他项目要好。 流行的开源监视解决方案包括Cacti,Zenoss,Zabbix,Performance Copilot(PCP)和Clumon(另外,我敢肯定您有我没有提到的最爱)。 其中许多工具(包括Ganglia和某些Nagios插件)在下面使用RRDTool或Tobi Oetiker的MRTG(多路由器流量图示器)来生成漂亮的图并存储数据。

拥有如此多的用于监视数据中心的开源解决方案,令我惊讶的是,有那么多横向扩展计算中心开发了自己的解决方案,而忽略了其他人已经完成的工作。

在这篇由两部分组成的文章中,我将讨论Ganglia和Nagios,因为有一些轶事证据表明它们是最受欢迎的。 我认为,尽管这是一种非常普遍的做法,但是关于如何将它们集成在一起的文章很少。 特别是在大型HPC实验室和大学中。

在本系列文章的最后,您应该能够安装Ganglia并与Nagios建立联系,并回答不同用户组会问您的监视问题。 这仅仅是一个开始,但是它应该可以帮助您掌握基础知识并全面了解集群。

在本文中,我将引导您完成:

  • 安装和配置基本的Ganglia设置。
  • 如何使用Python模块来扩展IPMI(智能平台管理接口)的功能。
  • 如何使用Ganglia主机欺骗来监视IPMI。

我们的目标-建立HPCLinux®集群的基线监视系统,在其中可以在某种程度上解决上述三个不同的监视视图:

  • 应用程序人员可以看到队列已满,并可以看到可用于运行作业的节点。
  • 可以向NOC发出系统故障警报或在Nagios Web界面上看到闪亮的红色错误指示灯。 如果节点出现故障或温度过高,也会通过电子邮件通知他们。
  • 系统工程师可以绘制数据图,报告群集利用率并为将来的硬件采购做出决策。

介绍神经节

Ganglia是一个开源监视项目,旨在从UC Berkeley开始扩展到数千个节点。 每台机器都运行一个名为gmond的守护程序,该守护程序收集并将其从操作系统收集到的指标(例如处理器速度,内存使用率等)发送给指定的主机。 接收所有指标的主机可以显示它们,并可以将它们的压缩形式传递到层次结构中。 这种分层模式使Ganglia可以很好地扩展。 gmond开销很小,这使得它可以在集群中的每台计算机上运行,​​而且不影响用户性能的情况下编写了大量的代码。

有时所有这些数据收集都可能影响节点性能。 网络中的“抖动”(即所谓的)是指许多小消息不断同时出现。 我们发现通过锁步节点的时钟可以避免这种情况。

安装Ganglia

Internet上有许多文章和资源,将向您展示如何安装Ganglia。 我们将重温我在xCAT Wiki上撰写的文章。 出于本文的目的,我将假定操作系统是Red Hat 5 Update 2的某种风格(尽管步骤与其他企业Linux操作系统没有太大不同)。

先决条件

如果您已经设置了yum存储库,则在大多数情况下安装prereq应该很容易。 像这样:

yum -y install apr-devel apr-util check-devel cairo-devel pango-devel libxml2-devel
  rpmbuild glib2-devel dbus-devel freetype-devel fontconfig-devel gcc-c++ expat-devel
  python-devel libXrender-devel

(注意:实际上,Yum应该可以处理所有这些依赖关系,但是在我的一项测试中,我看到了通过添加所有这些包而修复的编译失败。)

获得这些内容之后,您需要另一个不在Red Hat存储库中的先决条件。 只要您的计算机连接到Internet,就可以像这样获取并构建它:

wget \ http://ga13.files.bigpond.com:4040/fedora/linux/releases/9/Everything/source/
       SRPMS/libconfuse-2.6-1.fc9.src.rpm

rpmbuild --rebuild libconfuse-2.6-1.fc9.src.rpm
cd /usr/src/redhat/RPMS/x86_64/
rpm -ivh libconfuse-devel-2.6-1.x86_64.rpm libconfuse-2.6-1.x86_64.rpm

记住,镜子经常更换。 如果这不起作用,请使用搜索引擎找到libconfuse-2.6.-1.fc9源RPM。

RRD工具

RRDTool的意思是:Round Robin数据库工具。 它由Tobias Oetiker创建,为许多高性能监视工具提供了引擎。 神经节是其中之一,但仙人掌和芝诺斯则是其他人。

要安装Ganglia,我们首先需要在监视服务器上运行RRDTool。 RRDTool提供了两个非常酷的功能,其他程序可以利用它们:

  • 它将数据存储在循环数据库中。 随着捕获的数据变老,分辨率变得越来越精细。 这样可以减小占地面积,并且在大多数情况下仍然有用。
  • 它可以使用命令行参数从捕获的数据生成图形来创建图形。

要安装RRDTool,请运行以下命令(在1.3.4和1.3.6版本上进行测试):

cd /tmp/
wget http://oss.oetiker.ch/rrdtool/pub/rrdtool.tar.gz
tar zxvf rrdtool*
cd rrdtool-*
./configure --prefix=/usr
make -j8
make install
which rrdtool
ldconfig  # make sure you have the new rrdtool libraries linked.

在您的环境中,可以使用多种方法将RRDTool用作独立的实用程序,但在此不做介绍。

Ganglia主要安装

现在您已经具备所有先决条件,您可以安装Ganglia。 首先,您需要获取它。 在本文中,我们使用的是Ganglia 3.1.1。 下载ganglia-3.1.1.tar.gz文件并将其放在监视服务器的/ tmp目录中。 然后执行以下操作:

cd /tmp/
tar zxvf ganglia*gz
cd ganglia-3.1.1/
./configure --with-gmetad
make -j8
make install

您应该退出而不会出现错误。 如果看到错误,则可能要检查缺少的库。

配置神经节

既然完成了基本安装,则需要注意几个配置项才能使其运行。 请执行以下步骤:

  1. 命令行文件操作。
  2. 修改/etc/ganglia/gmond.conf。
  3. 照顾多宿主机器。
  4. 在管理服务器上启动它。

步骤1:命令行文件操作

如下图所示:

cd /tmp/ganglia-3.1.1/   # you should already be in this directory
mkdir -p /var/www/html/ganglia/  # make sure you have apache installed
cp -a web/* /var/www/html/ganglia/   # this is the web interface
cp gmetad/gmetad.init /etc/rc.d/init.d/gmetad  # startup script
cp gmond/gmond.init /etc/rc.d/init.d/gmond
mkdir /etc/ganglia  # where config files go
gmond -t | tee /etc/ganglia/gmond.conf  # generate initial gmond config
cp gmetad/gmetad.conf /etc/ganglia/  # initial gmetad configuration
mkdir -p /var/lib/ganglia/rrds  # place where RRDTool graphs will be stored
chown nobody:nobody /var/lib/ganglia/rrds  # make sure RRDTool can write here.
chkconfig --add gmetad  # make sure gmetad starts up at boot time
chkconfig --add gmond # make sure gmond starts up at boot time

步骤2:修改/etc/ganglia/gmond.conf

现在,您可以修改/etc/ganglia/gmond.conf来命名您的集群。 假设您的集群名称是“ matlock”; 那么您将name = "unspecified"更改为name = "matlock"

步骤3:照顾多宿主机器

在我的集群中,eth0是系统的公共IP地址。 但是,监视服务器通过eth1与专用群集网络上的节点通信。 我需要确保Ganglia使用与eth1相关的多播。 这可以通过创建文件/ etc / sysconfig / network-scripts / route-eth1来完成。 添加内容239.2.11.71 dev eth1

然后,您可以重新启动网络,并使用service network restart确保路由显示此IP通过eth1。 注意:您应该输入239.2.11.71,因为这是神经节默认的多播通道。 如果您更改频道或添加更多频道,请进行更改。

步骤4:在管理服务器上启动

现在,您可以在监视服务器上将其全部启动:

service gmond start
service gmetad start
service httpd restart

调出Web浏览器并将其指向位于http:// localhost / ganglia的管理服务器。 您会看到您的管理服务器正在受到监视。 您还将看到正在监视和绘制图形的几个指标。 最有用的功能之一是可以监视此计算机上的负载。 这是我的样子:

图1.监视负载
ganglia集群监控系统_使用Ganglia监控企业集群

这里没什么大不了的,机器只是空转。

在节点上获取神经节

到目前为止,我们已经完成了在管理服务器上运行Ganglia的工作; 现在,我们必须更多地关注计算节点的外观。 事实证明,只需复制几个文件即可将Ganglia放在计算节点上。 如果您使用Kickstart,则可以将其添加到安装后脚本中,也可以将其添加到其他更新工具中。

快速而肮脏的方法是这样的:用所有主机名创建一个文件。 假设您有节点deathstar001 - deathstar100 然后,您将得到一个名为/ tmp / mynodes的文件,如下所示:

deathstar001
deathstar002
...skip a few...
deathstar099
deathstar100

现在只需运行:

# for i in `cat /tmp/mynodes`; do 
scp /usr/sbin/gmond $i:/usr/sbin/gmond
ssh $i mkdir -p /etc/ganglia/
scp /etc/ganglia/gmond.conf $i:/etc/ganglia/
scp /etc/init.d/gmond $i:/etc/init.d/
scp /usr/lib64/libganglia-3.1.1.so.0 $i:/usr/lib64/
scp /lib64/libexpat.so.0 $i:/lib64/
scp /usr/lib64/libconfuse.so.0 $i:/usr/lib64/
scp /usr/lib64/libapr-1.so.0 $i:/usr/lib64/
scp -r /usr/lib64/ganglia $i:/usr/lib64/
ssh $i service gmond start
done

您可以重新启动gmetad ,刷新Web浏览器,现在应该看到您的节点显示在列表中。

您可能会遇到的一些可能的问题:

  • 您可能还需要像之前的第3步一样在节点上显式设置静态路由。
  • 您可能有防火墙阻止了端口。 gmond端口8649.如果运行gmond是一台机器上运行,你应该能够运行命令telnet localhost 8649 并看到一堆XML输出向下滚动到屏幕。

观察神经节

许多系统工程师很难理解他们自己的工作量或工作行为。 他们可能拥有自定义代码,或者没有进行研究以查看其商业产品的运行情况。 Ganglia可以帮助分析应用程序。

我们将使用Ganglia来检查运行Linpack基准测试的属性。 图2显示了我启动三个不同的Linpack作业的时间跨度。

图2.看Linpack
ganglia集群监控系统_使用Ganglia监控企业集群

从该图可以看出,作业启动时,网络启动了一些活动。 但是,有趣的是,在工作快要结束时,网络流量会增加很多。 如果您对Linpack一无所知,您至少可以这样说:网络流量在工作结束时会增加。

图3和图4分别显示了CPU和内存利用率。 从这里您可以看到我们正在推动处理器的极限,并且我们的内存利用率也很高。

图3. CPU使用率
ganglia集群监控系统_使用Ganglia监控企业集群
图4.内存使用情况
ganglia集群监控系统_使用Ganglia监控企业集群

这些图使我们对正在运行的应用程序有了更深入的了解:我们正在使用大量的CPU和内存,并在正在运行的作业结束时创建更多的网络流量。 我们仍然不知道这项工作还有很多其他属性,但这为我们提供了一个良好的开端。

了解这些事情可以帮助将来在购买更多硬件时做出更好的购买决定。 当然,没有人会为了运行Linpack而购买硬件……是吗?

扩展能力

基本的Ganglia安装为我们提供了很多不错的信息。 使用Ganglia的插件为我们提供了两种增加更多功能的方法:

  • 通过添加带内插件。
  • 通过添加其他来源的带外欺骗。

第一种方法已经成为Ganglia的惯例。 第二种方法是较新的发展,在功能上与Nagios重叠。 让我们以一个实际的例子简要地探讨这两种方法。

带内插件

带内插件可以通过两种方式发生。

  • 使用cron-job方法并调用Ganglia的gmetric命令输入数据。
  • 使用新的Python模块插件并编写脚本。

第一种方法是我们过去的常用方法,我将在下一节有关带外插件的内容中对此进行详细介绍。 问题在于它不是那么干净。 Ganglia 3.1.x添加了Python和C模块插件,使扩展Ganglia看起来更加自然。 现在,我将向您展示第二种方法。

首先,使用Ganglia启用Python插件。 请执行下列操作:

  1. 编辑/etc/ganglia/gmond.conf文件。

如果将其打开,则会注意到大约四分之一的位置处有一个名为modules的部分,看起来像这样:

modules {
    module {
           name = "core_metrics"
     }
     ...
}

我们将向模块部分添加另一个模块。 您应该坚持的是:

module {
    name = "python_module"
    path = "modpython.so"
    params = "/usr/lib64/ganglia/python_modules/"
  }

在我的gmond.conf上,我在第90行添加了先前的代码节。这使Ganglia可以使用Python模块。 另外,在语句include ('/etc/ganglia/conf.d/*.conf')之后的几行之后,添加include ('/etc/ganglia/conf.d/*.pyconf') 这些包括我们将要添加的内容的定义。

  1. 制作一些目录。

像这样:

mkdir /etc/ganglia/conf.d
mkdir /usr/lib64/ganglia/python_modules
  1. 在所有节点上重复1和2。

要做到这一点,

  • 将新的gmond.conf复制到每个要监视的节点。
  • 在要监视的每个节点上,按照步骤2中的步骤创建两个目录,以便它们也可以使用Python扩展。

现在已经将节点设置为运行Python模块,让我们创建一个新的模块。 在此示例中,我们将添加一个使用Linux IPMI驱动程序的插件。 如果您不熟悉IPMI,并且使用现代的Intel和AMD计算机,请了解它(在参考资料中 )。

我们将使用开源IPMItool与本地计算机上的IPMI设备进行通信。 还有其他几种选择,例如OpenIPMI或freeipmi。 这只是一个示例,因此,如果您想使用另一个,请继续。

在开始在Ganglia上工作之前,请确保IPMItool在您的计算机上可以工作。 运行命令ipmitool -c sdr type temperature | sed 's/ /_/g' ipmitool -c sdr type temperature | sed 's/ /_/g' ; 如果该命令不起作用,请尝试加载IPMI设备驱动程序,然后再次运行它:

modprobe ipmi_msghandler
modprobe ipmi_si
modprobe ipmi_devintf

运行ipmitool命令后,我的输出显示

Ambient_Temp,20,degrees_C,ok
CPU_1_Temp,20,degrees_C,ok
CPU_2_Temp,21,degrees_C,ok

因此,在我的Ganglia插件中,我将监视环境温度。 我创建了一个写得很差的插件,名为virtualTemp.py,该插件基于在执行此任务的Ganglia Wiki上找到的插件使用IPMI:

清单1.写得不好的Python插件ambientTemp.py
import os
def temp_handler(name):
  # our commands we're going to execute
  sdrfile = "/tmp/sdr.dump"
  ipmitool = "/usr/bin/ipmitool"
  # Before you run this Load the IPMI drivers:
  # modprobe ipmi_msghandler
  # modprobe ipmi_si
  # modprobe ipmi_devintf
  # you'll also need to change permissions of /dev/ipmi0 for nobody
  # chown nobody:nobody /dev/ipmi0
  # put the above in /etc/rc.d/rc.local

  foo = os.path.exists(sdrfile)
  if os.path.exists(sdrfile) != True:
    os.system(ipmitool + ' sdr dump ' + sdrfile)

  if os.path.exists(sdrfile):
    ipmicmd = ipmitool + " -S " + sdrfile + " -c sdr"
  else:
    print "file does not exist... oops!"
    ipmicmd = ipmitool + " -c sdr"
  cmd = ipmicmd + " type temperature | sed 's/ /_/g' "
  cmd = cmd + " | awk -F, '/Ambient/ {print $2}' "
  #print cmd
  entries = os.popen(cmd)
  for l in entries:
    line = l.split()
  # print line
  return int(line[0])

def metric_init(params):
    global descriptors

    temp = {'name': 'Ambient Temp',
        'call_back': temp_handler,
        'time_max': 90,
        'value_type': 'uint',
        'units': 'C',
        'slope': 'both',
        'format': '%u',
        'description': 'Ambient Temperature of host through IPMI',
        'groups': 'IPMI In Band'}

    descriptors = [temp]

    return descriptors

def metric_cleanup():
    '''Clean up the metric module.'''
    pass

#This code is for debugging and unit testing
if __name__ == '__main__':
    metric_init(None)
    for d in descriptors:
        v = d['call_back'](d['name'])
        print 'value for %s is %u' % (d['name'],  v)

复制清单1并将其放入/usr/lib64/ganglia/python_modules/ambientTemp.py。 对集群中的所有节点执行此操作。

现在,我们已将脚本添加到集群中的所有节点,请告诉Ganglia如何执行脚本。 创建一个名为/etc/ganglia/conf.d/ambientTemp.pyconf的新文件,其内容如下:

清单2. Ambient.Temp.pyconf
modules {
  module {
    name = "Ambient Temp"
    language = "python"
  }
}

collection_group {
  collect_every = 10
  time_threshold = 50
  metric {
    name = "Ambient Temp"
    title = "Ambient Temperature"
    value_threshold = 70
  }
}

将清单2保存在所有节点上。

重新启动gmond之前需要做的最后一件事是更改IPMI设备的权限,以便没有人可以对其执行操作。 这将使您的IPMI接口极易受到恶意人员的攻击!

这只是一个例子: chown nobody:nobody /dev/ipmi0

现在,到处重新启动gmond 如果运行此命令,则应该可以刷新Web浏览器并看到类似以下内容的内容:

图5. IPMI带内指标
ganglia集群监控系统_使用Ganglia监控企业集群

带内度量标准的好处是,它们使您可以在主机上运行程序,并通过其他度量标准使用的相同收集机制在链中提供信息。 这种方法的缺点(特别是对于IPMI)是,主机上需要进行大量配置才能使其正常工作。

注意,我们必须确保脚本是用Python编写的,配置文件在那里,并且gmond.conf的设置正确。 我们只做一个指标! 只需考虑编写其他指标所需要做的一切! 在每个主机上针对每个指标执行此操作可能会很麻烦。 IPMI是一种带外工具,因此必须有更好的方法对吗? 就在这里。

带外插件(主机欺骗)

主机欺骗只是我们需要的工具。 在这里,我们使用功能强大的gmetric并告诉我们我们正在运行的主机gmetric是一个命令行工具,可将信息插入到Ganglia中。 这样,您可以监视任何您想要的东西。

关于gmetric最好的部分? 已经编写了大量的脚本。

作为学习经验,我将向您展示如何重塑如何运行ipmitool来远程访问计算机:

  1. 确保ipmitool可以自己带外工作。

我已经设置了BMC(目标计算机上的芯片),以便可以在其上运行IPMI命令。 例如:我的监视主机名是redhouse。 我想从Redhouse监视群集中的所有其他节点。 Redhouse是gmetad运行地,也是我指向Web浏览器访问所有Ganglia信息的地方。

我群集中的节点之一具有主机名x01。 我将x01的BMC设置为具有解析为主机x01-bmc的IP地址。 在这里,我尝试远程访问该主机:

# ipmitool -I lanplus -H x01-bmc -U USERID -P PASSW0RD sdr dump \ /tmp/x01.sdr
Dumping Sensor Data Repository to '/tmp/x01.sdr'
# ipmitool -I lanplus -H x01-bmc -U USERID -P PASSW0RD -S /tmp/x01.sdr \ sdr type 
                                                                            Temperature
Ambient Temp     | 32h | ok  | 12.1 | 20 degrees C
CPU 1 Temp       | 98h | ok  |  3.1 | 20 degrees C
CPU 2 Temp       | 99h | ok  |  3.2 | 21 degrees C

看起来不错。 现在,将其放在脚本中以馈送给gmetric

  1. 制作一个使用ipmitool导入gmetric的脚本。

我们创建了以下脚本/usr/local/bin/ipmi-ganglia.pl并将其放在监视服务器上:

#!/usr/bin/perl
# aaa@qq.com
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中。

  1. 将脚本作为cron作业运行。

运行crontab -e 我添加了以下条目,每30分钟运行一次: 30 * * * * /usr/local/bin/ipmi-ganglia.sh 您可能希望使它发生的频率更高或更小。

  1. 打开神经节,看看结果。

打开Ganglia Web浏览器并查看其中一个节点的图形,您可以看到节点被欺骗并在每个节点条目中进行了更新:

图6. no_group指标
ganglia集群监控系统_使用Ganglia监控企业集群

欺骗的缺点之一是类别位于no_group指标组中。 gmetric似乎没有办法像带内版本那样以一种很好的方式更改分组。

下一步是什么

本文概述了使用Ganglia和Nagios作为开放源代码监视软件可以单独和串联完成的工作。 您进行了Ganglia的安装/配置之旅,然后了解了Ganglia在理解应用程序特性方面如何有用。 最后,您了解了如何使用带内脚本扩展Ganglia,以及如何在主机欺骗中使用带外脚本。

这是一个好的开始。 但是本文仅回答了系统工程师提出的监视问题。 现在,我们可以查看系统范围的性能,并查看如何使用这些机器。 我们可以判断机器是否一直处于空闲状态,或者它们是否以60%的容量运行。 现在,我们甚至可以判断哪些机器运行最热和最冷,并查看它们的机架放置情况是否会更好。

这个由两部分组成的系列文章的第2部分探讨了如何设置Nagios并将其与Ganglia集成,包括:

  • 安装和配置Nagios基本警报设置
  • 监控交换机和其他基础架构
  • 将Nagios捆绑到Ganglia进行警报

另外,第二部分显示了如何扩展整个监视系统以监视正在运行的作业和其他基础结构。 通过执行这些附加项目,我们将能够回答不同小组提出的其他监控问题。


翻译自: https://www.ibm.com/developerworks/opensource/library/l-ganglia-nagios-1/index.html