Ganglia Install And Config

本文是ganglia的安装和配置的笔记

Ganglia的安装

首先,ganglia由gmond、gmetad和gweb三部分组成。

gmond

gmond(Ganglia Monitoring Daemon)是一种轻量级服务,安装在每台需要手机指标数据的节点主机上。它通过侦听/通告协议与集群内其他节点共享数据。
gmond的安装很简单,其所依赖的库,libconfuse、pkgconfig、PCRE和APR等在大多数现行的linux上都有安装。

1
sudo yum install ganglia-gmond

gmetad

gmetad (Ganglia Meta Daemon)是一种从其他gmetad或gmond源收集指标数据,并将数据以RRD格式存储到磁盘的服务。gmetad为从主机组收集的特定指标信息提供了简单的查询机制,并支持分级授权,使得创建联合检测域成为可能。
gmetad除了需要安装gmond所需的依赖之外,还需要RDDtool库。它用来存储和显示从其他gmetad和gmond源收集的时间序列数据。

1
sudo yum install ganglia-gmetad

gweb

完整的Ganglia不能缺少网络接口:gweb(Ganglia Web)。gweb是一种利用浏览器显示gmetad所存储数据的PHP前端。
Ganglia 3.4的Web接口是一个独立的发布包,其源代码也是独立的。gweb 3.4支持gmond/gmetad 3.4.x及以上版本;gweb未来版本可能需要与gmond/gmetad未来版本相匹配。建议安装或更新gweb的时候查看安装文档,以获取更多信息。
安装gweb需要如下需求:

  • Apache Web Server
  • PHP 5.2级更新版本
  • PHP JSON扩展的安装和启用

首先安装Apache和PHP

1
yum install httpd php

用户还需要启用PHP的JSON扩展,通过检查/etc/php.d/json.ini文件来检查JSON的扩展状态,如果已经启用扩展,文件中应该包含下面的语句:

1
extension=json.ini

下载最新的gweb(https://sourceforge.net/projects/ganglia/files/gweb/),然后编译Makefile来安装gweb2:

1
2
tar -xvzf ganglia-web-major.minor.release.tar.gz
cd ganglia-web-major.minor.release

编译Makfile并设置变量DESTDIR和APACHE_USER:

1
2
DESTDIR = /var/www/html/ganglia2
APACHE_USER = apache

最后运行下面的命令:

1
make install

Ganglia的配置

gmond

gmond通过与主机操作系统交互以获取指标数据,并与同一集群内的其他主机共享数据。集群内的每个gmond以及同一个集群内其他主机所收集的数据,并默认向任意连接gmond端口的客户端提供整个集群状态的XML格式的dump文件。

拓扑结构

gmond默认拓扑为多播模式,也就是说集群内所有节点都收发指标数据,每个节点维护一个内存数据库–以哈希表的形式存储集群内所有节点的指标。gmond内部的发送和接收两部分互不相连。Gmond自身并不交互信息,而只是和网络进行交互。指标模块收集的本地数据通过发送部分直接传送到网络,而接收部分的内部数据库只存储网络中收集的指标数据。
单发节点的使用消除了大型集群的运行开销。单发和单收参数的出现使得一些gmond节点可以充当其他gmond节点的专用汇聚器和中继器。单收指的是那些不传送数据的节点,它甚至不收集本节点的指标数据,但是缺汇聚集群内其他gmond的指标数据。单发指的是那些不接收网络中任何指标数据,也不侦听多播成员状态信息的节点。

在多播不适用的情况下,这种单发/单收拓扑可以使用UDB单播来实现。

更进一步,将单发/单收拓扑和默认拓扑混合,创建一种更适合特定情形的系统结构。
1、至少存在一个收集集群内所有节点指标数据的gmond。
2、gmetad必须周期性轮询以保存整个集群状态gmond。

配置文件

运行下面的命令可以生成gmond默认配置:

1
gmond -t

配置文件由大括号括起来的截个section组成。这些section可以大致分为两类:处理主机和集群的配置;处理指标数据收集和调度的特定问题。所有的section名和属性是不区分大小写的,有些section是可选的,有些是必选的;有的可以出现多次,有的只能出现一次;有的section还可以包含section。
在需要大型复杂配置的情况下,include指令可以将gmond.conf文件划分为多个文件。如下列命令标识gmond可以加载/etc/ganglia/conf.d/中的所有的.conf文件:

1
include('/etc/ganglia/conf.d/*.conf')

有8个section处理主机自身配置。

section:globals

globals配置守护进程本身的通用特征,只出现一次。如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
globals {
daemonize = yes
setuid = yes
user = nobody
debug_level = 0
max_udp_msg_len = 1472
mute = no
deaf = no
allow_extra_data = yes
host_dmax = 86400
host_tmax = 20
cleanup_threshold = 300
gexec = no
send_metadata_interval = 0
}

属性名 类型 解释
daemonize 布尔 当值为true时,gmond将后台分散运行。
setuid 布尔 当值为true时,gmond将user属性指定的特定用户的UID作为有效UID;当值为false时,gmond将不会改变其有效用户。
debug_level 整数 当为0时,gmond将正常运行。当值大于0时,gmond将在前台运行并输出调试信息。值越大,输出的信息越详细。
max_udp_msg_len 整数 gmond发送包的最大长度。一般使用默认值即可。
mute 布尔 当值为true时,不管其他配置指令如何,gmond将不能发送数据。单收gmond只是不向其他gmond进程发送数据,但仍然会响应诸如gmetad的外部轮询。
deaf 布尔 当值为true时,不管其他配置指令如何,gmond将不能接收数据。在一些情况下,某些特定的节点会被预设为为单收,此时这些节点的性能指标将不会被测量,因为这些节点的任务是汇集,所以他们的性能数据会“污染”集群内其他的功能部分
allow_extra_data 布尔 当值为false时,gmond将不会发送XML的EXTRA_ELEMENT和EXTRA_DATA部分。该值主要应用于用户使用自己的前端并希望节省带宽时。
host_dmax 整型(秒) dmax是delete max的缩写。当值为0时,即使远程主机停止报告,gmond也不会从列表中将该主机删除。如果为正值,当gmond在该值指定的时间内如果没有得到某台主机的数据,gmond会认为对应的主机已经崩溃。
host_tmax 整型(秒) tmax是timeout max的缩写。代表gmond等待一台主机更新的最长时间。因为消息可能会在网络中丢失,所以如果在4倍的host_tmax时间接收不到某台机器的任何消息,则认为对应主机crash。
cleanup_threshold 整数(秒) gmond清理过期数据的最小时间间隔。
gexec 布尔 当值为true时,gmond允许主机运行gexec任务。郑重方式需要运行gexecd并安装合适的验证码。
send_metadata_interval 整数(秒) gmond两次发送元数据包的时间间隔。元数据包是用来描述所有激活指标的数据包。默认为0,表示gmond只有在出事启动和收到其他远程运行的gmond的节点的请求是才会发送元数据包。如果向集群中添加一台运行gmond的主机,则该主机节点需要向其他节点公布自身信息,并告知目前支持的指标标准。在多播模式下,由于任何一个节点都可以向集群内的其他节点请求发送元数据,因此该问题并不存在。然而在单播模式下,必须设重发间隔。间隔值是两次重发之间的最少秒数。
module_dir 路径(可选) 该指令用来标识已找到的指标收集模块的路径。如果省略,则认为编译时选项值:–with-moduledir。该选值为libganglia安装目录下名为ganglia的子目录。为了在特定gmond中找到该指令的默认值,可以通过下面的命令生成一个简单的配置文件:gmond -t。

section:cluster

每个gmond守护进程会使用在cluster中定义的属性来报告它所属集群的信息。默认为”unspecified”。使用默认值即可以正常工作。该配置在文件中只能出现一次,下面为默认值:

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

属性名 类型 解释
name 文本 指定集群名称。当轮询节点的集群状态的XML聚合时,把该名称插入CLUSTER元素内。轮询该节点的gmetad会使用该值来命名存储集群数据的rrd文件。该指令将取代gmetad.conf配置文件中指定的集群名称。
owner 文本 指定集群管理员。
latlong 文本 指定该集群在地区上的GPS坐标。
url 文本 指定携带集群特定信息(如用途和使用细节)的URL。

section:host

host提供运行gmond主机相关信息。目前只支持地址字符串属性。默认为:

1
2
3
host {
location = "unspecified"
}

属性名 类型 解释
location 文本 用来标识主机位置。

section:UDP channels

UDP发送通道和接收通道确定gmond节点间的交互方式。集群是由UDP通信通道所定义的,也就是说,集群只不过是共享同样发送和接收通道的一些gmond节点。
gmond集群内每个节点默认通过UDP将自身指标数据多播至其他节点,同时侦听其他节点的UDP多播。这种方式易于设置和维护:集群内每个节点共享多播地址,而且每个心节点可自动被发现。然而,有时需要通过单播地址指定某些节点。因此,任意数量的gmond发送和接收通道可以独立配置以满足特定需求。每个发送通道都可以定义gmond发布自己的指标数据的方式,而且每个接收通道都可以定义gmond接收其他节点指标数据的方式,可能单播,也可能多播。
gmond节点不能配置为向多个Ganglia集群发送指标数据。
UDP通道通过udp_(send|receive)_channel创建。

udp_send_channel

默认的UDP发送通道如下定义:

1
2
3
4
5
6
udp_send_channel {
#bind_hostname = yes
mcast_join = 239.2.11.1
port = 8649
ttl = 1
}

属性名 类型 解释
bind_hostname 布尔类型(可选,多播或单播) 通知gmond使用源地hi解析主机名。
mcast_join IP(可选,仅多播) 当指定该选项时,gmond将创建UDP套接字,并加入由IP地址指定的多播租。该选项创建一个多播通道,并与host互斥。
mcast_if 文本(可选,仅多播) 当指定该选项时,gmond将发送来自指定接口(如eth0)的数据。
host 文本格式或IP(可选,仅单播) 当指定该选项时,gmond将向已命名主机发送数据。该选项将创建一个单播通道,并与mcast_join互斥。
port 数值(可选,单播或多播) 指定gmond发送数据的端口号。如果未指定,则使用默认值8649。
ttl 数值(可选,单播或多播) time-to-live的缩写。该设置在多播环境中尤其重要,因为该值限制了指标数据所允许传播的越点数。当该值设置得比实际所需的更大时,指标数据将能够通过WAN连接传输到多个站点,甚至跳出WAN进入全局Internet。
udp_recv_channel

默认的UDP接收通道

1
2
3
4
5
udp_recv_channel {
mcast_join = 239.2.11.71
port = 8649
bind = 239.2.11.71
}

属性名 类型 解释
mcast_join IP(可选,仅多播) 指定该选项时,gmond将侦听指定IP的多播组所发送的多播数据包。如果未指定多播属性,gmond将在指定端口创建单播UDP服务。
mcast_if 文本(可选,仅多播) 当指定该选项时,gmond将侦听指定接口(如eth0)上的数据。
bind IP(可选,多播或单播) 当指定该选项时,gmond将绑定到指定的本地地址。
port 数字(可选,多播或单播) 指定gmond接收数据的端口。如果为指定,则使用默认值8649。
family inet4或inet6(可选,多播或单播) 默认IP版本为inet4.Ganglia不允许 IPv6 => IPv4的映射。如果用户想要同时对一个端口进行inet4和inet6,请为该端口定义两个分离的接收通道。
acl Ac定义(可选,多播或单播) 通过指定接入的控制列表,可以对接收通道进行精确的接入空中。

section: TCP Accept Channel

TCP接收通道是gmond节点创建向gmetad或其他外部轮询器汇报集群状态的通道。用户可以配置任意选项。默认TCP接收通道为:

1
2
3
tcp_accept_channel {
port = 8649
}

属性名 类型 解释
bind IP(可选) 当指定该选项时,gmond将绑定到指定的本地地址。
port 数字 gmond接受连接的端口号。
family inet4或inet6(可选,多播或单播) 默认IP版本为inet4。如果想要将端口绑定到inet6,设置inet6即可。Ganglia不允许IPv6 => IPv4的映射。如果用户想要同时对一个端口进行inet4和inet6,请为该端口定义两个分离的接收通道。
interface 文本(可选) 当指定该选项时,gmond将侦听指定接口(例如eth0)数据。
acl ACL(可选,多播或单播) 通过指定接入的访问控制列表可以对接收通道进行精细的控制。
Access control

udp_recv_channel指令和tcp_accept_channel指令可以包含一个接入控制列表。该列表允许用户指定gmond接收或拒绝连接的地址和地址范围。示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
acl {
default = "deny"
access {
ip = 192.168.0.0
mask = 24
action = "allow"
}
access {
ip = ::ff:1.2.3.0
mask = 120
action = "deny"
}
}

default属性为整个ACL定义了默认方式。任意的access模块可以指定主机或ip地址,以及这些地址是allow还是deny。mask属性是以CIDR记法定义的子网掩码,允许用户指定地址范围而非一个一个的具体地址。当ACL冲突时,以第一个匹配为准。

section:sFlow

sFlow适用于监测高速路由网络的工业标准技术,现在服务于通用操作系统和诸如Tomcat、memcached和Apache Web Server等流行应用。gmond可以通过配置来充当网络中sFlow代理聚合器,收集sFlow代理的数据并实现对gmetad的透明传输。下面是sFlow的默认配置:

1
2
3
4
5
6
7
8
9
10
#sflow {
# udp_port = 6343
# accept_vm_metrics = yes
# accept_jvm_metrics = yes
# multiple_jvm_instances = no
# accept_http_metrics = yes
# multiple_http_instances = no
# accept_memcache_metrics = yes
# multiple_memcache_instances = no
#}

属性名 类型 解释
udp_port 数字(可选) gmond接收sFlow数据的端口。

section:modules

该模块包含了加载指标模块的必要参数。指标模块是动态可加载的共享目标文件,用于扩展gmond可收集的指标。
每个modules必须至少包含一个module subsection。module subsection由5个属性组成。默认配置包含了默认安装中所有可用模块(module),如果不添加新模块则无需更改该内容。如下是配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
modules {
module {
name= "example_module"
language = "C/C++"
enable = yes
path = "modexample.so"
params = "An extra raw parameter"
param RandomMax {
value = 75
}
param ConstantValue {
value = 25
}
}
}

属性名 类型 解释
name 文本 如果模块由C/C++开发,则模块名由模块结构所决定。如果模块由诸如Python解释型语言开发完成,则模块名与源文件名相同。
language 文本(可选) 如果未指定,则默认为C/C++。目前只支持C、C++和Python。
enabled 布尔(可选) 通过配置文件设置模块是否可用。默认为yes。
path 文本 指示gmond预设的加载路径。如果path不是绝对路径,则该值将附加到globals section的module_path上。
param 文本格式(可选) 用来将字符串参数传送到模块初始化函数。通过包含多个param,可以将多个参数传递给模块初始化函数。每个param section必须命名,并包含一条value指令。

section: collection_group

collection_group指定了gmond包含的指标以及gmond手机和广播这些指标的周期。用户可以定义任意多的收集组,每个收集组必须包含至少一种metric section。
这些逻辑指标分组基于相同的收集间隔。这些在gmond.conf中定义的分组并不影响用于Web接口中的分组,也不能用这种方式来指定Web接口分组名称。部分默认配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
collection_group {
collect_once = yes
time_threshold = 1200
metric {
name = "cpu_num"
title = "CPU Count"
}
}
collection_group {
collect_every = 20
time_threshold = 90
metric {
name = "cpu_user"
value_threshold = "1.0"
title = "CPU User"
}
metric {
name = "cpu_system"
value_threshold = "1.0"
title = "CPU Sustem"
}
}

属性名 类型 解释
collect_once 布尔 有些指标不变,也就是说重启之间不存在变化。这些指标包括OS类型和系统CPU数量等,只在初始启动时收集一次,并将其collect_once属性设置为yes。该属性与collect_every相互排斥。
collect_every 整数(秒) 指定收集组轮询的间隔。
time_threshold 整数(秒) gmond发送collection_group所指定的指标数据到所有已配置的udp_send_channels的最大时间。
name 文本 指标收集模块定义的单个指标标准名称。每个加载模块一般定义好几种单独的指标。name可以由name_match参数替换。
value_threshold 数字 每次收集到指标数据时,会将新值与上一次的数值进行比较。当二者差别大于value_threshold时,整个收集组被发送至已定义的udp_send_channels。在不同的指标模块中,该值表示不同的指标单位。
title 文本 一种用户化的用于Web前端的指标名称。

gmetad

gmetad(Ganglia Meta Daemon)是一种安装在主机上用来收集和汇聚gmond所收集的指标数据的守护进程。gmetad默认使用RRD文件收集和汇聚指标数据,然而也可以通过配置gmetad将指标数据传送到助于Graphite的外部系统。
gmetad通过tcp端口8651侦听远程gmetad连接,并向授权主机提供XML格式的网络状态。gmetad也通过tcp端口8652对交互式请求做出应答。这种交互功能不仅可以看到网格状态XML树的总体结构,也可以看到简单的局部内容。gweb使用这种交互式查询方式来标识那些不适合RRD文件的信息。

gmetad拓扑

最简单的gmetad拓扑结构为一个gmetad进程轮询一个或多个gmond。gmetad并不局限于轮询gmond,gmetad也可以通过轮询另外的gmetad来创建层次化的gmetad结构。

gmetad.conf配置文件

gmetad.conf配置文件由单行属性及相应值组成。属性名不区分大小写,但是值区分。有些属性是可选的,有些属性是必须的;有些属性可有多个,有些属性只能有一个。

data_source

data_source属性是gmetad配置的核心。每一行data_source描述一个gmetad收集信息的gmond集群或gmetad网格。gmetad能够自动区别集群和网格,所以二者的data_source语法相同。当gmetad检测到data_source引用一个集群时,gmetad将为data_source保留一整套轮询数据库。当gmetad检测到data_source引用一个网格时,gmetad只会保留概要性的RRD。
默认配置文件中合法data_source示例:

1
data_source "my cluster" 10 localhost my.machine.edu:8649 1.2.3.5:8655

每个data_source由3个字段组成。第一个字段是唯一标识data_source的字符串。第二个字段是指定轮询间隔(单位秒)的时长。第三个字段以空格分隔的所要轮询数据的主机列表,这些地址以IP地址或DNS主机名的形式指定,并可以添加端口号后缀,如果为指明端口号,则使用默认值8649。

gmetad守护进程行为
属性 类型 表示
gridname 文本 能唯一标识网格的字符串。该字符串应该与gmond中所设置的标识不同。在gmond.conf的CLUSTER标识中,用来标识gmond实例能收集到所有的主机,而gridname属性则标识由GRID标识符指定的所有数据源,可以理解为在data_source中定义一个集群集合。
authority URL 网格的授权URL,被其他gmetad用来查找当前gmetad数据源的图表位置。默认值为”http://hostname/ganglia"。
trusted_hosts 文本 当前gmetad允许数据共享的主机列表,以空格作为分隔符。Localhost总是可信的。
all_trusted on或off 当值设置为on时,将重写trusted_host属性,允许数据与任意主机共享。
setuid_username UID gmetad设置UID的用户名。默认为nobody。
setuid on或off 当该值设置为off时,将不能设置UID。
xml_port 数字 gmetad侦听端口,默认为8651。
interactive_port 数字 gmetad交互式侦听端口。默认为8652。
server_threads 数字 允许同时连接到侦听端口的连接数,默认为4。
case_sensitive_hostnames 1或0 在gmetad之前版本中,RRD文件区分主机名大小写,但是现在已经有所改变。如果希望使用Ganglia 3.2之前版本创建RRD,设置为1即可。
RRDtool属性
属性 类型 表示
RRA 文本格式 代表自定义的罗宾环存档值。默认为(15秒步进)”RRD:AVERAGE:0.5:1:5856” “RRA:AVERAGE:0.5:4:20160” “RRA:AVERAGE:0.5:40:52704”。
umask 数字 指定已创建RRD文件及其目录的umask。默认为022。
rrd_rootdir 路径 指定RRD文件在本地文件系统存储的基本目录。
Graphite支持

通过如下的设置,可以将gmetad收集到的指标数据输出到Graphite。

属性 类型 表示
carbon_server 地址 远程carbon守护进程的主机名或IP。
carbon_port 数字(可选) carbon端口号,默认为2003。
graphite_prefix 文本 Graphite使用点分隔的路径来管理和查阅指标数据,所以可以在指标数据前面加上诸如datacenter1.gmetad的描述内容,以便Graphite更好的管理这些指标数据。
carbon_timeout 数字(毫秒) gmetad等待Graphite服务器响应的毫秒数。这个设置很重要,因为gmetad的carbon发送器不是线程的,需要收到来自下游carbon守护进程的响应后才能进行后续发送。默认为500。
gmetad交互式端口查询语法

gmetad通过TCP端口8652侦听交互式查询。这种交互式查询功能使得客户端程序可以用XML方式只查询某一部分的网格状态。
交互式查询通过一种文本协议(类似于SMTP或HTTP)来完成,是一种以斜线开始的层次话查询方式。例如,下面的查询将返回整个网格状态的XML数据:

1
/

为了缩减查询结果,可以指定集群名:

1
/cluster1

为了进一步缩减查询结果,还可以指定集群内的主机名:

1
/cluster1/host1

还可以在查询词后面添加过滤器来修改返回的指标数据类型(目前过滤器只有summary):

1
/cluster1?filter=summary

gweb

无需改变gweb的任何配置,gweb就可以启动并运行功能齐全的web客户端。

Apache虚拟主机配置

详情参考http://httpd.apache.org/docs/2.0/vhosts

gweb可选项

gweb是由conf.php文件进行配置的,其实该文件重写并扩展了conf_default.php中的默认配置。conf.php位于Web跟目录下。

应用设置

该类中的属性会影响gewb的功能参数,用户很少需要修改这些属性,但是有一些值得注意:

属性 类型 表示
templates 路径 指定gweb搜索模板文件的目录。
graphdir 路径 代表用户放置JSON格式的定制图表的路径。用户可能会以JSON格式定制报告图表,并保存在该目录,而且这些报告会显示在UI上。
rrds 路径 指定RRD文件目录。

外观和感觉

gweb可以功过配置(max_graphs)来限制一次显示的图表数目,也可以指定网络和主机的显示列数。一些布尔选项也可以影响初次启动时UI的展示形式。
conf.php文件中定义了许多修改UI图表功能属性的设置。

检查安装

gmond和gmetad都是通过TCP socket侦听入站连接的。为了检查gmond是否在指定主机上工作,telnet到gmond的TCP端口:

1
telnet localhost 8649

gmond会输出以XML格式的指标数据作为应答。如果gmond是单发或单收节点,它会反水一个仅携带CLUSTER标识符的空的XML文档。姜茶gmetad可以通过如下指令telnet:

1
telnet localhost 8651

正常运行的gmetad会输出XML格式的指标数据。

安装实例

安装使用的是安装包,而非自己编译。

安装gmetad节点

安装gmetad的节点需要安装gmetad、gmond、gweb、rrdtool、apache web server以及各自的依赖。依赖主要有:
gmetad节点需要同时配置gmetad.conf(/etc/ganglia/gmond.conf)、gmond.conf(/etc/ganglia/gmond.conf)和gweb的配置。gmond主要用于收集,gmetad主要用于轮询和存储。

配置ganglia.conf

配置文件位于/etc/httpd/conf.d/ganglia.conf。主要为了修改ganglia集群的访问规则。

1
2
3
4
5
6
7
8
cation /ganglia>
#Order deny,allow
Allow from all #来自任何位置的请求都允许
Allow from 127.0.0.1
Allow from ::1
# Allow from .example.com
</Location>

配置gmetad.conf

这里配置该文件(/etc/ganglia/gmetad.conf),主要是为了定义数据源、gmetad轮询的间隔和轮询的主机以及其他关于rrd存储的配置。配置如下:

1
2
data_source "hadoop" 10 server-001.yz #定义数据源、轮询间隔、轮询的主机
rrd_rootdir "/data10/ganglia/rrds" #定义rrd文件的存储位置,需要放在一个较大空间的磁盘

配置gmond

这里配置该文件(/etc/ganglia/gmond.conf),主要是配置指标数据汇聚节点,用于gmetad的轮询。配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#集群信息
cluster {
name = "hadoop"
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
#指标接收
udp_recv_channel {
port = 9649
bind = server-001.yz
retry_bind = true
}
#用户gmetad的轮询
tcp_accept_channel {
port = 8649
gzip_output = no
}

配置gweb

这里配置该文件(/etc/ganglia/conf.php),主要是设置web的信息,如果rrdtool的位置、rrd的位置等。该文件是/usr/share/ganglia/conf_default.php的扩展。配置信息如下:

1
2
3
$conf['gweb_confdir'] = "/data10/ganglia/"; #gweb的根目录
$conf['gmetad_root'] = "/data10/ganglia/"; #gmetad的根目录
$conf['rrdtool'] = "/usr/bin/rrdtool"; #rrdtool的位置

这里需要注意”gmetad_root”的目录需要是ganglia用户的,且有写权限。并且目录应该包含conf和dwoo。这两个目录中包含了有关gweb的数据显示等各种文件,该文件不应该由用户自己创建,可以从/var/lib/ganglia进行拷贝。

启动服务

1
2
3
service gmond start
service gmetad start
service httpd start

安装gmond节点

安装gmond节点需要安装gmond以及依赖。依赖和gmetad的相同。gmond主要用于收集节点的指标数据。

配置gmond.conf

这里配置该文件(/etc/ganglia/gmond.conf),主要是为了收集指标数据,并将数据以udp的方式发送给汇聚用的gmond。配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
cluster {
name = "hadoop"
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
udp_send_channel {
host = server-001.yz
port = 9649
ttl = 1
}

启动服务

1
service gmond start

访问http://server-001.yz/ganglia 就可以看到页面效果了。

常见问题

图表没有数据或者数据不可读

首先要确定是真的没有数据,还是gweb没有读到数据。是否有数据可以通过telnet gmetad或在rrd目录中查看来进行核实。本例中遇到的问题是有数据,但是gweb没有读到。
通过各种查询发现gweb配置文件中rdd和gweb配置的根目录与存放RDD的实际目录不相符,修改后可以正常显示。