一、什么是Ganglia
对于这个工具,大家可能比较陌生,但是它功能非常强大,如果我们想收集所有服务器、网络设备的数据,那么ganglia绝对是首选,在深入学习之前,还是先从基础概念了解起吧!
Ganglia是一款为HPC(高性能计算)集群而设计的可扩展的分布式监控系统,它可以监视和显示集群中的节点的各种状态信息,它由运行在各个节点上的gmond守护进程来采集CPU 、内存、硬盘利用率、I/O负载、网络流量情况等方面的数据,然后汇总到gmetad守护进程下,使用rrdtool存储数据,最后将历史数据以曲线方式通过PHP页面呈现。
Ganglia的特点如下:
良好的扩展性,分层架构设计能够适应大规模服务器集群的需要
负载开销低,支持高并发
广泛支持各种操作系统(UNIX等)和cpu架构,支持虚拟机
二、Ganglia的组成
Ganglia监控系统有三部分组成,分别是gmond、gmetad、webfrontend,作用如下。
gmond: 即为ganglia monitoring daemon,是一个守护进程,运行在每一个需要监测的节点上,用于收集本节点的信息并发送到其他节点,同时也接收其他节点发过了的数据,默认的监听端口为8649。
gmetad: 即为ganglia meta daemon,是一个守护进程,运行在一个数据汇聚节点上,定期检查每个监测节点的gmond进程并从那里获取数据,然后将数据指标存储在本地RRD存储引擎中。
webfrontend: 是一个基于web的图形化监控界面,需要和Gmetad安装在同一个节点上,它从gmetad取数据,并且读取RRD数据库,通过rrdtool生成图表,用于前台展示,界面美观、丰富,功能强大。
下图是一个简单的Ganglia监控系统结构图。
从图中可以看出,一个Ganglia监控系统是由多个gmond进程和一个主gmetad进程组成,所有gmond进程将收集到的监控数据汇总到gmetad管理端,而gmetad将数据存储到RRD数据库中,最后通过PHP程序在Web界面进行展示。
这是最简单的Ganglia运行结构图,在复杂的网络环境下,还有更复杂的Gnaglia监控架构。下图是Ganglia的另一种分布式监控架构图。
从这个图中可以看出,gmond可以等待gmetad将监控数据收集走,也可以将监控数据交给其它gmond,进而让其他gmond将数据最终交付给gmetad,同时,gmetad也可以收集其他gmetad的数据.比如,对于上图中的Cluster1和Cluster2集群,Cluster2就是一个gmetad,它将自身收集到的数据又一次的传输给了Cluster1集群;而Cluster1将所有集群的数据进行汇总,然后通过Web进行统一展现。
三、Ganglia的工作原理
在介绍Ganglia的工作原理之前,需要介绍一下在Ganglia中经常用到的几个名词,这些是了解Ganglia分布式构架的基础。在Ganglia分布式结构中,经常提到的几个名词有node、cluster和grid,这三部分构成了Ganglia分布式监控系统。
node: Ganglia监控系统中的最小单位,即被监控的单台服务器。
cluster:表示一个服务器集群,由多台服务器组成,是具有相同监控属性的一组服务器的集合。
grid: 表示一个网格。grid由多个服务器集群组成,即多个cluster组成一个grid。
从上面介绍可以看出这三者之间的关系:
一个grid对应一个gmetad,在gmetad配置文件中可以指定多个cluster。
一个node对应一个gmond,gmond负责采集其所在机器的数据,同时gmond还可以接收来自其他gmond的数据,而gmetad定时去每个node上收集监控数据。
1、Ganglia数据流向分析
在Ganglia分布式监控系统中,gmond和gmetad之间是如何传输数据呢?接下来介绍一下Ganglia是如何实现数据的传输和收集的。下图是Ganglia的数据流向图,也是Ganglia的内部工作原理。
下面简述下Ganglia基本运作流程。
1) gmond收集本机的监控数据,发送到其他机器上,并收集其他机器的监控数据,gmond之间通过udp通信,传递文件格式为XDL。
2) gmond节点间的数据传输方式支持单播点对点传送外,还支持多播传送。
3) gmetad周期性的到gmond节点或gmetad节点上获取(poll)数据,gmetad只有tcp通道,因此gmond与gmetad之间的数据都以XML格式传输。
4) gmetad既可以从gmond也可以从其他的gmetad得到XML数据。
5) gmetad将获取到的数据更新到rrds数据库中。
6) 通过web监控界面,从gmetad取数据,并且读取rrds数据库,生成图片显示出来。
2、Ganglia工作模式
Ganglia的收集数据工作可以在单播(unicast)或多播(multicast)模式下进行,默认为多播模式。
单播:每个被监控节点发送自己收集到的本机数据到指定的一台或几台机器上。单播模式可以跨越不同的网段。如果是多个网段的网络环境,就可以采用单播模式采集数据。
多播:每个被监控节点发送自己收集到的本机数据到同一网段内所有的机器上,同时也接收同一网段内的所有机器发送过来的监控数据。因为是以广播包的形式发送,因此这种模式需要所有主机