Linux【9】-进程管理4-4--资源监控--Ganglia

一、介绍

ganglia是一款为HPC(高性能计算) 集群设计的可扩展性 的分布式监控系统,它可以监视和显示集群中节点的各种状态信息,他由运行在各个节点上的gmond守护进程来采集 CPU、内存、磁盘利用率、I/O负载、网络流量情况等方面的数据。然后汇总到gmetad守护进程下,使用rrdtool存储数据,然后将历史数据以曲线方式通过PHP页面呈现。

ganglia自带了很多监控项,详细的比较详细,等后面搭建成功后,可以从截图中看出。ganglia相关的PDF书和资料还是较少的。

Ganglia是一个集群监控工具,由UC Berkeley创建并开源。Ganglia的中文意思是神经中枢,现在支持多部分操作系统(包括linux、unix、windows),可支持2000个节点的网络监控(当然这不是上限,只是一个大集群使用的范例)。

1.1 Ganglia特点

  • 具有良好的扩展性,分层架构使用与大规模服务器集群的架构
  • 负载开销低,支持高并发
  • 广泛支持各种操作系统

1.2 基本结构

Ganglia框架有gmond,gmated和webfronted进程组成:

  • gmond:是运行在被监控节点的守护进程,负责采集本节点的上数据,同时也接受替他节点上发送过来的数据,默认监听在8649。
  • gmated:运行在监控节点上的守护进程,负责定期检查每个gmond进程并从哪里获取数据,然后将数据存储在本地的RRD存储引擎中。
  • webfronted:使用PHP写成的web图形化界面,功能从gmetad获取数据并且读出数据库,通过rrdtool工具生成图表,通过http协议显示在终端上。

Ganglia底层使用RRDTool获得数据,Ganglia主要分为两个进程组件:

  • gmond(ganglia monitor deamon)
  • gmetad(ganglia metadata deamon)

其中,gmond运行在集群每个节点上,收集RRDTool产生的数据;gmetad运行在监控服务器上,收集每个gmond的数据。Ganglia还提供了一个PHP实现的web front end,一般使用Apache2作为其运行环境,通过Web Front可以看到直观的各种集群数据图表。

Ganglia的层次化结构做的非常好,由小到大可以分为node -> cluster -> grid,这三个层次。

  • 一个node就是一个需要监控的节点,一般是个主机,用IP表示。每个node上运行一个gmond进程用来采集数据,并提交给gmetad。
  • 一个cluster由多个node组成,就是一个集群,我们可以给集群定义名字。一个集群可以选一个node运行gmetad进程,汇总/拉取gmond提交的数据,并部署web front,将gmetad采集的数据用图表展示出来。
  • 一个grid由多个cluster组成,是一个更高层面的概念,我们可以给grid定义名字。grid中可以定义一个顶级的gmetad进程,汇总/拉取多个gmond、子gmetad提交的数据,部署web front,将顶级gmetad采集的数据用图表展示出来。

显然,这种方式非常灵活,可以实现多种结构的数据监控。由下图,我们可以清晰的看出这种层次化的结构,和不同的部署方式。

Ganglia运行模式(单播与多播):  

Ganglia的收集数据工作可以工作在单播(unicast)或多播(multicast)模式下,默认为多播模式。

  • 单播:发送自己收集到的监控数据到特定的一台或几台机器上,可以跨网段。
  • 多播:发送自己收集到的监控数据到同一网段内所有的机器上,同时收集同一网段内的所有机器发送过来的监控数据。因为是以广播包的形式发送,因此需要同一网段内。但同一网段内,又可以定义不同的发送通道。

1.3 ganglia三大组件

gmond:

gmond类似于传统监控系统中的代理,需要安装在每台主机上,负责和操作系统交互以获得需要关注的指标数据。

gmond再内部采用模块化设计,采用基于C语言编写、根据操作系统定制的插件进行监控。gmond为指标提供了大部分标准插件,而且可以增加更多的用C、C++或Python等语言编写的插件来支持新的指标。此外,内置的gmetric工具可以用来报告用任何语言编译的自定义指标数据。

gmond根据自身本地配置文件定义的调度方案进行轮询。监听数据时使用简单的监听/通告协议,通过XDR在集群内的主机之间共享。这些通告默认使用多播,而集群是由共享同一多播地址的主机所构成的。当然gmond也可以使用单播,将数据都汇聚到同一台中心节点。

因为每台gmond主机将指标数据多播到集群内的其他主机,每台gmond主机也记录了集群内其他主机的指标数据。远程轮询器通过默认的8649端口,向集群内任意节点请求获得该集群XML格式的所有数据。

如果服务器主机过多,因为只要轮询集群中任意节点就能获取所有集群内其他主机的性能指标数据,所以我们可以将众多的主机划分到不同的组里面,这样一来,收集数据的工作量将得到大大的减轻。

gmetad:

主要作用就是整合所有信息。

gmetad是一个简单的轮询器,对网络中每个集群进行轮询,并将每台主机上返回的所有指标数据写入各个集群对应的轮询数据库。轮询器对集群的“轮询”只需要打开一个用于读取的套接字,连接到目标gmond节点的8649端口即可,通过远程非常容易实现。

gmetad还有一些其他特性,如可以从其他的gmetad中轮询数据,gmetad通过tcp端口8651侦听远程gmetad连接,并且向授权主机提供XML格式的网格状态。从而构成一种联合层次结构。gmetad具有交互式查询功能,外部监控系统可以通过TCP 8652端口用简单文本协议进行轮询。gmetad也可以通过配置gmetad将指标数据转送到诸如Graphite外部系统发送数据。

gmetad默认将指标数据直接写入文件系统上的RRD文件,在有I/O限制的大型装置中,rrdcached充当gmetad和RRD文件之间的缓存。

gweb

ganglia可视化工具。显示ganglia收集的主机各项指标。

gweb允许在图标中通过点击-拖拽改变时间周期,包含从不同文本格式(CSV,JSON等)中便捷提供数据的工具,显示完整、使用的URL接口,使用户可以通过预知的URL将感兴趣的图表嵌入其他程序。

gweb是一种PHP程序,因为需要与轮询器创建的RRD数据库交互,所以gweb通常安装在和gmetad相同的物理硬件上。

1.4 Ganglia的工作模型

node:监控单个服务器

一台主机运行gmond进程,另一台主机运行gmetad进程进行数据采集。

cluster:监控一个集群

主机A,B,C,D,E模型一: 主机A,B,C,D作为被监控端,运行gmont进程。 主机E作为监控端运行gmetad进程。 模型二: 主机A,B,C:被监控端 主机D:运行gmont进程,负责采集A,B,C传送的数据,最终将数据传送给监控节点。 主机E:监控节点 模型三: 如见下图:

二、安装

yum安装Ganglia比起make install 安装Ganglia方式要简单很多,因为yum方式安装不用自己去下载编译安装各依赖包。

下面我介绍Ganglia在CentOS7_x86_64上的一个最简单的yum安装与配置的例子,只有1个Hadoop集群:

  • Hadoop cluster:Hadoop集群,1个name node,20个data node(使用HadoopNameNode作为该集群数据收集节点,IP为192.168.26.139)

2.1 Ganglia安装

2.1.1 中心节点的安装

epel包的安装(解决不能yum安装某些安装包的问题)

yum install -y epel-release

gmetad的安装:

yum install -y ganglia-gmetad ganglia-devel 

gmond的安装:

yum install -y ganglia-gmond

rrdtool的安装:

yum install -y rrdtool

httpd服务器的安装:

yum install -y httpd

ganglia-web及php安装:

yum install -y ganglia-web php

2.1.2 被监测节点的安装

epel包的安装(解决不能yum安装某些安装包的问题):

yum install -y epel-release

gmond的安装:

yum install -y gmond  (提示找不到,感觉应该换成上面那个 yum install -y ganglia-gmond) 

2.2 Ganglia配置

2.2.1  中心节点(HadoopNameNode)的配置

2.2.1.1 安装目录说明
ganglia配置文件目录:/etc/ganglia
rrd数据库存放目录:/var/lib/ganglia/rrds
httpd主站点目录:/var/www/html
ganglia-web安装目录:/usr/share/ganglia
ganglia-web配置目录:/etc/httpd/conf.d/ganglia.conf
2.2.1.2  相关配置文件修改

将ganglia-web安装目录链接到httpd主站点目录

ln -s /usr/share/ganglia /var/www/html

修改httpd主站点目录下ganglia站点目录的访问权限。将ganglia站点目录访问权限改为apache:apache,否则会报错

chown -R apache:apache /var/www/html/ganglia
chmod -R 755 /var/www/html/ganglia

修改rrd数据库存放目录访问权限。将rrd数据库存放目录访问权限改为nobody:nobody,否则会报错 

chown -R nobody:nobody /var/lib/ganglia/rrds

修改ganglia-web的访问权限:

vim /etc/httpd/conf.d/ganglia.conf

Alias /ganglia /usr/share/ganglia

<Location /ganglia>

	 Require all granted

	 #Require ip 10.1.2.3

	 #Require host example.org

</Location>

修改dwoo下面的权限

chmod 777 /var/lib/ganglia/dwoo/compiled

chmod 777 /var/lib/ganglia/dwoo/ cache

配置/etc/ganglia/gmetad.conf

data_source  "hadoopcluster" 192.168.26.139:8649 

(注意是所有节点都加上,如master:8649 slave0x:8649)

setuid_username nobody

配置/etc/ganglia/gmond.conf

cluster {

  name = "hadoop cluster"

  ...

}

udp_send_channel {

  # the host who gather this cluster's monitoring data and send these data   to gmetad node

  #注释掉多播模式的,以下出现这个都要注释掉

 #mcast_join = 239.2.11.71

 #添加单播模式的

 host = 192.168.26.139  

 port = 8649

}

udp_recv_channel {

  port = 8649

}

tcp_accept_channel {

  port = 8649

}

2.2.2 Hadoop cluster被监测节点的配置

配置/etc/ganglia/gmond.conf

cluster {

  name = "hadoop cluster"

  ...

}

udp_send_channel {

  # the host who gather this cluster's monitoring data and send these data   to gmetad node

 host = 192.168.26.139  
 port = 8649

}

udp_recv_channel {
  port = 8649

}

tcp_accept_channel {
  port = 8649

}

2.3 Ganglia启动

2.3.1  中心节点的启动

#start httpd, gmetad, gmond

systemctl start httpd.service
systemctl start gmetad.service
systemctl start gmond.service

systemctl enable httpd.service
systemctl enable gmetad.service
systemctl enable gmond.service

2.3.2 被监测节点的启动

#start gmond

systemctl start gmond.service
systemctl enable gmond.service

2.3.3 访问网页

浏览器访问 {namenode的ip}/ganglia 即可

效果如图

三、讨论

四、报错

以调试模式启动gmetad

gmetad-d 9

查看gmetad收集到的XML文件

telnet 192.168.52.105 8649(如果提示没有telnet命令

yum install telnet-server #安装 telnet服务
yum install telnet.*   #安装 telnet客户端

4.1  如果出现错误:There was an error collecting ganglia data (127.0.0.1:8652):fsockopen error: Permission denied

可能原因1:SELINUX配置问题

关闭selinux,vi /etc/selinux/config,把SELINUX=enforcing改成SELINUX=disable;该方法需要重启机器。 可以使用命令setenforce 0来关闭selinux而不需要重启,刷新页面,即可访问;不过此法只是权宜之计,如果想永久修改selinux设置,还是要使用第一种方法

可能原因2:rrds目录的访问权限未正确配置 给/var/lib/ganglia/rrds目录赋予nobody:nobody的可访问权限

4.2 如果出现错误:/ganglia无法访问,但同时,httpd server可以正常访问,则说明是/ganglia站点的访问权限或相关目录的权限配置有问题

可能原因1:/etc/httpd/conf.d/ganglia.conf配置文件未修改正确 注释掉其他内容,添加“Allow from all”

可能原因2:/var/www/html/ganglia目录没有赋予正确的访问权限

chown -R apache:apache /var/www/html/ganglia
chmod -R 755 /var/www/html/ganglia

4.3 浏览器访问ganglia出现各个节点的表格显示“ganglia no matching metrics detected”。

原因:arb/ganglia/rrds中对各个节点相应的文件夹是小写,如果节点的hostname中包含大写字母的话,这样就发现找到数据了。

解决方法:修改 gmetad.conf,

vim /etc/ganglia/gmetad.conf

将case_sensitive_hostnames的值设置为1

# In earlier versions of gmetad, hostnames were handled in a case

# sensitive manner

# If your hostname directories have been renamed to lower case,

# set this option to 0 to disable backward compatibility.

# From version 3.2, backwards compatibility will be disabled by default.

# default: 1   (for gmetad < 3.2)

# default: 0   (for gmetad >= 3.2)

case_sensitive_hostnames 1  #设置为1,则不会将大写变成小写

然后重启

systemctl restart gmetad.service

参考日志

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn