Ganglia是一款非常优秀的开源的监控框架

Ganglia是一款非常优秀的开源的监控框架,下面引自百科的解释:
Ganglia是UC Berkeley发起的一个开源集群监视项目,设计用于测量数以千计的节点。Ganglia的核心包含gmond、gmetad以及一个Web前端。主要是用来监控系统性能,如:cpu 、mem、硬盘利用率, I/O负载、网络流量情况等,通过曲线很容易见到每个节点的工作状态,对合理调整、分配系统资源,提高系统整体性能起到重要作用。
每台计算机都运行一个收集和发送度量数据的名为 gmond 的守护进程。接收所有度量数据的主机可以显示这些数据并且可以将这些数据的精简表单传递到层次结构中。正因为有这种层次结构模式,才使得 Ganglia 可以实现良好的扩展。gmond 带来的系统负载非常少,这使得它成为在集群中各台计算机上运行的一段代码,而不会影响用户性能。所有这些数据多次收集会影响节点性能。网络中的 “抖动”发生在大量小消息同时出现时,可以通过将节点时钟保持一致,来避免这个问题。
gmetad可以部署在集群内任一台节点或者通过网络连接到集群的独立主机,它通过单播路由的方式与gmond通信,收集区域内节点的状态信息,并以XML数据的形式,保存在数据库中。
由RRDTool工具处理数据,并生成相应的的图形显示,以Web方式直观的提供给客户端。

一、Ganglia的组件
Ganglia包括如下程序,他们之间通过XML格式传递监控数据,达到监控效果。
Gmetad 这个程序负责收集各个cluster的数据,并更新到rrd数据库中。
Gmond 收集本机的监控数据,发送到其他机器上。收集其他机器的监控数据,供Gmetad读取。默认监听端口8649
web front-end 一个基于web的监控界面,需要和Gmetad安装在同一个节点上,从Gmetad取数据,并且读取rrd数据库,生成图片,显示出来。
二、Ganglia的工作模式
Ganglia的收集数据工作可以工作在单播(unicast)或多播(multicast)模式下,默认为多播模式。
单播:发送自己收集到的监控数据到特定的一台或几台机器上,可以跨网段
多播:发送自己收集到的监控数据到同一网段内所有的机器上,同时收集同一网段内的所有机器发送过来的监控数据。因为是以广播包的形式发送,因此需要同一网段内。但同一网段内,又可以定义不同的发送通道。

单台ganglia的拓扑图如下所示:


Ganglia是一款非常优秀的开源的监控框架
集群的ganglia的拓扑图如下所示:

Ganglia是一款非常优秀的开源的监控框架

gmond节点之间以及gmond与gmetad之间的数据都以xml格式传输,gmond节点间的数据传输方式除支持单播点对点传送外,还支持多播,如果数以百计的服务器堆叠在一个局域网内,每15秒发送一次数据,这个特性还是能节省一些网络开销  
为了更快的看懂ganglia报表,在报表中有几个名词需要弄清楚,这些也是架构层次的体现  
node: 最小单位,即单台服务器  
cluster: 服务器集群,由多台服务器组成  
grid: 网格,由多个服务器集群组成  
以上几个名词和实体间的关系是:  
1、一个grid对应一个gmetad,在gmetad.conf中可以指定多行data_source  
2、一个cluster在gmetad.conf中即为一行data_source,一行可指定一个或多个gmond供gmetad进行采集  
3、一个node即为一个gmond,gmond负责采集其所在机器的数据,同时gmond还可以暂存来自其它gmond的数据  
从名词与实体间的对应关系加上刚才的两幅数据流图可以看出,同样的需求可以有多种配置方案,这一点与大多数软件不太一样,所以在初次接触ganglia时容易搞晕,举个例子:  
一个cluster有多个gmond,可以在gmetad的data_source中罗列所有gmond,由gmetad来轮询所有gmond来获取数据,也可以将多个gmond的数据汇聚到一个gmond,gmetad轮询汇总的gmond从而获取整个cluster的数据  
gmond的几个特点:  
1、gmond可以等待gmetad亲自来把数据采集走,也可以将自己的数据交由其它gmond交付gmetad  
2、gmond节点间的通讯基于udp,接收gmetad的poll请求是基于tcp(port:8649),gmond可以同时将数据发送给多个gmond  
3、还有就是前面说到的gmond之间的通讯除支持单播还支持广播 

相关推荐