Ganglia监控工具简介与部署

Contents
  1. 概述
  2. 为什么使用Ganglia
  3. Ganglia体系结构
  4. 集群部署
    1. 集群环境
    2. 部署过程
    3. 配置
    4. 启动
    5. 页面

对于监控系统,之前已经有过两个系列的文章,分别对ZabbixPrometheus做了简要的架构介绍和部署方式详解。本文对于本人玩儿过的第三种分布式文件系统监控工具——Ganglia的使用理由、系统架构和集群部署作详尽的介绍。

概述

Ganglia是UC Berkeley发起的一个开源集群监视项目,设计用于测量数以千计的节点。Ganglia的中文意思是神经中枢,现在支持多部分操作系统(包括linux、unix、windows),可支持2000个节点的网络监控(当然这不是上限,只是一个大集群使用的范例)。

Ganglia的核心包含gmond、gmetad以及一个Web前端。主要是用来监控系统性能,如:cpu 、mem、硬盘利用率, I/O负载、网络流量情况等,通过曲线很容易见到每个节点的工作状态,对合理调整、分配系统资源,提高系统整体性能起到重要作用。


为什么使用Ganglia

Ganglia是一种分布式监控系统。ganglia的设计便是基于大型集群进行设计的。主要体现在数据的获取方式以及分层设计。主要有以下三个优点:

  • 部署的方便性:ganglia类似与nagios的部署方式会更简单,更方便。有利于后期的大规模扩张;
  • 数据获取方式:Ganglia本身就是为集群监控进行设计的,这体现在其数据的获取方式(客户端主动推送)以及分层设计(node cluster grid);
  • 通信方式以及冗余:Ganglia通过组播进行数据交互,配置得当,可以实现冗余避免单点故障。另外,同样由于组播,数据可以在客户机本地进行存放的(安装rrdtool)。

Ganglia体系结构

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

  • gmond(ganglia monitor deamon):组播包的发送和接受。发送本地信息,接受其他节点信息
  • gmetad(ganglia metadata deamon):从监听节点轮询出数据,并对数据进行聚合、存储

除这两个Daemon进程外,Ganglia还依赖其他三个组件提供可视化和数据持久化的服务:

  • Ganglia网页:提供ganglia的访问页面
  • rrdtool: 数据存储以及提供画图功能
  • Apache与php:网站功能,对ganglia提供的网页进行解析

其中,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_structure


集群部署

在这里,仅介绍ubuntu上的部署方式,因为很简单!只需要安装两个包:ganglia-monitor和ganglia-webfrontend。其中ganglia-webfrontend只需要安装在提供页面展示的服务器上,并且如果你的ubuntu没有PHP和Apache2环境的话,它也会自动帮你安装。

在这里我直接介绍多播(ganglia默认的方式,此外还支持单播)方式的集群部署,至于单机的方式,其实只要把ganglia-monitor和ganglia-webfrontend装在一台机器上就可以了。

集群环境

gmond:4台(192.168.1.101、192.168.1.102、192.168.1.103、192.168.1.104)
gmetad + ganglia web:1台(192.168.1.104)
操作系统:Ubuntu 14.04

部署过程

在192.168.1.101、192.168.1.102、192.168.1.103这三台仅运行gmond的节点上安装ganglia-monitor:

1
sudo apt-get install ganglia-monitor

在192.168.1.104这台包含所有ganglia服务的节点上安装gmetad、rrdtool、ganglia-monitor和ganglia-webfrontend,这个过程会默认为没有Apache和PHP的环境的系统安装Apache2和PHP:

1
sudo apt-get install ganglia-webfrontend ganglia-monitor gmetad rrdtool

在ganglia-webfrontend安装完毕后,ganglia-webfrontend这个包默认会将Web相关的代码安装在”/usr/share/ganglia-webfrontend/”路径下,这样apache访问不到。因此,可以使用软链接,或者直接将目录移到”/var/www/”目录下:

1
sudo ln -s /usr/share/ganglia-webfrontend/ /var/www/ganglia

或者:

1
sudo mv /usr/share/ganglia-webfrontend/ /var/www/ganglia

配置

配置gmond:打开/etc/ganglia/gmond.conf 修改 cluster name :

1
2
3
4
5
6
cluster {
name = "ganglia"
owner = "root"
latlong = "unspecified"
url = "unspecified"
}

配置gmetad:打开/etc/ganglia/gmetad.conf 添加数据源网格名称:

1
2
3
data_source "ganglia" localhost
data_source "another source" 1.3.4.7
gridname "MyGrid"

启动

重启192.168.1.104的gmated和httpd:

1
2
service gmetad restart
service httpd restart

重启每个节点的gmond:

1
service gmond restart

页面

完成以上工作后,ganglia的部署就完成了,现在你可以在192.168.1.104上直接打开浏览器访问 http://localhost/ganglia ,就能看到图形界面了,或者你可以通过IP直接访问,如果修改了端口记得加上新端口访问。

Ganglia_frontpage