Intro
Ganglia是一个分布式的开源集群监控系统,主要包括gmond,gmetad,gweb三个模块,其独特的网状结构具备强大的伸缩性,通过组播(multicast)/UDP的的通信方式Ganglia可以很轻松监控成千上万(丝毫不夸张)的服务器集群,且不存在单点故障的问题。
Deploy
Ganglia代码托管在SourceForge上,代码中自带RPM编译定义文件,通过rpmbuild
可以很容易编译出RPM包:
rpmbuild -bb ganglia.spec
rpmbuild -bb ganglia-web.spec
以CentOS x86平台为例,最后得到一系列的软件包:
- libganglia-3.5.0-1.i386.rpm
- ganglia-devel-3.5.0-1.i386.rpm
- ganglia-gmond-3.5.0-1.i386.rpm
- ganglia-gmetad-3.5.0-1.i386.rpm
- ganglia-gmond-modules-python-3.5.0-1.i386.rpm
- ganglia-web-3.5.7-1.noarch.rpm
Config
gmond - Ganglia Monitoring Daemon
gmond是一个部署在服务器节点上的轻量级数据采集程序,通过简单的监听/广播协议,服务器的数据在集群各个节点间共享。配置文件位于/etc/ganglia/gmond.conf
,以组播的方式为例,比较基础的配置有:
globals {
mute = no /* 是否广播数据 */
deaf = no /* 是否监听其他节点的数据 */
}
udp_send_channel {
mcast_join = 239.2.11.71 /* 组播地址 */
port = 8639 /* 发送端口 */
ttl = 1 /* 最大路由跨域跳数 */
}
upd_recv_channel {
mcast_join = 239.2.11.71 /* 组播地址 */
port = 8649 /* 接收端口 */
}
若需要考虑安全问题可以通过ACL配置访问权限:
acl {
default = "deny"
access {
ip = 192.168.0.0
mask = 24
action = "allow"
}
}
gmetad - Ganglia Metad Daemon
gmetad负责从网络上的其它gmond/gmetad节点上收集信息数据,数据以RRD格式保存在本地磁盘。配置文件位于/etc/ganglia/gmetad.conf
,主要的配置项为:
/* 定义数据源,格式为 `标识` `采集间隔` `节点列表` */
data_source "my cluster" 10 localhost my.machine.edu:8649 1.2.3.5:8655
data_source "my grid" 50 1.3.4.7:8655 grid.org:8651 grid-backup.org:8651
gridname "NERV" /* 集群标识 */
rrd_rootdir "/var/lib/ganglia/rrds" /* RRD数据文件存放地址 */
data_source
中的采集间隔参数可以省略,默认为15秒,gmetad会根据节点列表的定义顺序收集数据,若某个节点失效会自动访问下个节点。gmetad会自动判断节点的类型(gmond/gmetad),若节点是gmetad的话则将只保存该集群的摘要RRD数据。
gweb - Ganglia Web
Ganglia自带一个网页前端,主要架构为PHP+Dwoo+jQuery,网站目录默认安装在/var/www/html/ganglia
,自带的jQuery UI主题比较难看,可以通过修改ganglia/templates/default/header.tpl
定制样式。在/var/lib/ganglia-web/conf
下可通过JSON文件自定义视图(Views),图表定义可参考/var/www/html/ganglia/graph.d/sample_report.php
及该目录下的文件。
gmond-modules (Python)
除了C/C++外,gmond还支持通过Python扩展监控模块,代码结构可参考/usr/lib/ganglia/python_modules/
目录下的example.py
文件,模块编写完后需要在/etc/ganglia/conf.d
下添加对应的pyconf
文件来启用(安装ganglia-gmond-modules-python
时会自动添加modpython.conf
,该配置负责导入pyconf
模块),需要注意的是配置文件名必须与gmond模块定义文件一致。
Go
Ganglia安装完成后会在/etc/init.d/
下添加对应的服务脚本,因此只要将gmond/gmetad服务添加到系统中就可以了:
chkconfig gmond on
service gmond start
Ganglia-Web作为正常的PHP网站部署配置就可以了,以Nginx为例:
{
# ...
root /var/www/html/ganglia;
index index.php;
location ~ \.php$ {
fastcgi_pass localhost:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~* \.(js|css|png|jpg|jpeg|git|icon)$ {
expires 30d;
}
# ...
}
上面只是粗略介绍了Ganglia的基本结构及部署方式,官网很遗憾没有更加详细的文档,不过倒是有一本《Monitoring with Ganglia》可以深入阅读。