本文是ganglia的安装和配置的笔记
Ganglia的安装
首先,ganglia由gmond、gmetad和gweb三部分组成。
gmond
gmond(Ganglia Monitoring Daemon)是一种轻量级服务,安装在每台需要手机指标数据的节点主机上。它通过侦听/通告协议与集群内其他节点共享数据。
gmond的安装很简单,其所依赖的库,libconfuse、pkgconfig、PCRE和APR等在大多数现行的linux上都有安装。
gmetad
gmetad (Ganglia Meta Daemon)是一种从其他gmetad或gmond源收集指标数据,并将数据以RRD格式存储到磁盘的服务。gmetad为从主机组收集的特定指标信息提供了简单的查询机制,并支持分级授权,使得创建联合检测域成为可能。
gmetad除了需要安装gmond所需的依赖之外,还需要RDDtool库。它用来存储和显示从其他gmetad和gmond源收集的时间序列数据。
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
用户还需要启用PHP的JSON扩展,通过检查/etc/php.d/json.ini文件来检查JSON的扩展状态,如果已经启用扩展,文件中应该包含下面的语句:
下载最新的gweb(https://sourceforge.net/projects/ganglia/files/gweb/),然后编译Makefile来安装gweb2:
编译Makfile并设置变量DESTDIR和APACHE_USER:
最后运行下面的命令:
Ganglia的配置
gmond
gmond通过与主机操作系统交互以获取指标数据,并与同一集群内的其他主机共享数据。集群内的每个gmond以及同一个集群内其他主机所收集的数据,并默认向任意连接gmond端口的客户端提供整个集群状态的XML格式的dump文件。
拓扑结构
gmond默认拓扑为多播模式,也就是说集群内所有节点都收发指标数据,每个节点维护一个内存数据库–以哈希表的形式存储集群内所有节点的指标。gmond内部的发送和接收两部分互不相连。Gmond自身并不交互信息,而只是和网络进行交互。指标模块收集的本地数据通过发送部分直接传送到网络,而接收部分的内部数据库只存储网络中收集的指标数据。
单发节点的使用消除了大型集群的运行开销。单发和单收参数的出现使得一些gmond节点可以充当其他gmond节点的专用汇聚器和中继器。单收指的是那些不传送数据的节点,它甚至不收集本节点的指标数据,但是缺汇聚集群内其他gmond的指标数据。单发指的是那些不接收网络中任何指标数据,也不侦听多播成员状态信息的节点。
在多播不适用的情况下,这种单发/单收拓扑可以使用UDB单播来实现。
更进一步,将单发/单收拓扑和默认拓扑混合,创建一种更适合特定情形的系统结构。
1、至少存在一个收集集群内所有节点指标数据的gmond。
2、gmetad必须周期性轮询以保存整个集群状态gmond。
配置文件
运行下面的命令可以生成gmond默认配置:
配置文件由大括号括起来的截个section组成。这些section可以大致分为两类:处理主机和集群的配置;处理指标数据收集和调度的特定问题。所有的section名和属性是不区分大小写的,有些section是可选的,有些是必选的;有的可以出现多次,有的只能出现一次;有的section还可以包含section。
在需要大型复杂配置的情况下,include指令可以将gmond.conf文件划分为多个文件。如下列命令标识gmond可以加载/etc/ganglia/conf.d/中的所有的.conf文件:
有8个section处理主机自身配置。
section:globals
globals配置守护进程本身的通用特征,只出现一次。如:
属性名 | 类型 | 解释 |
---|---|---|
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”。使用默认值即可以正常工作。该配置在文件中只能出现一次,下面为默认值:
属性名 | 类型 | 解释 |
---|---|---|
name | 文本 | 指定集群名称。当轮询节点的集群状态的XML聚合时,把该名称插入CLUSTER元素内。轮询该节点的gmetad会使用该值来命名存储集群数据的rrd文件。该指令将取代gmetad.conf配置文件中指定的集群名称。 |
owner | 文本 | 指定集群管理员。 |
latlong | 文本 | 指定该集群在地区上的GPS坐标。 |
url | 文本 | 指定携带集群特定信息(如用途和使用细节)的URL。 |
section:host
host提供运行gmond主机相关信息。目前只支持地址字符串属性。默认为:
属性名 | 类型 | 解释 |
---|---|---|
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发送通道如下定义:
属性名 | 类型 | 解释 |
---|---|---|
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接收通道
属性名 | 类型 | 解释 |
---|---|---|
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接收通道为:
属性名 | 类型 | 解释 |
---|---|---|
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接收或拒绝连接的地址和地址范围。示例如下:
default属性为整个ACL定义了默认方式。任意的access模块可以指定主机或ip地址,以及这些地址是allow还是deny。mask属性是以CIDR记法定义的子网掩码,允许用户指定地址范围而非一个一个的具体地址。当ACL冲突时,以第一个匹配为准。
section:sFlow
sFlow适用于监测高速路由网络的工业标准技术,现在服务于通用操作系统和诸如Tomcat、memcached和Apache Web Server等流行应用。gmond可以通过配置来充当网络中sFlow代理聚合器,收集sFlow代理的数据并实现对gmetad的透明传输。下面是sFlow的默认配置:
属性名 | 类型 | 解释 |
---|---|---|
udp_port | 数字(可选) | gmond接收sFlow数据的端口。 |
section:modules
该模块包含了加载指标模块的必要参数。指标模块是动态可加载的共享目标文件,用于扩展gmond可收集的指标。
每个modules必须至少包含一个module subsection。module subsection由5个属性组成。默认配置包含了默认安装中所有可用模块(module),如果不添加新模块则无需更改该内容。如下是配置示例:
属性名 | 类型 | 解释 |
---|---|---|
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接口分组名称。部分默认配置如下:
属性名 | 类型 | 解释 |
---|---|---|
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示例:
每个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数据:
为了缩减查询结果,可以指定集群名:
为了进一步缩减查询结果,还可以指定集群内的主机名:
还可以在查询词后面添加过滤器来修改返回的指标数据类型(目前过滤器只有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端口:
gmond会输出以XML格式的指标数据作为应答。如果gmond是单发或单收节点,它会反水一个仅携带CLUSTER标识符的空的XML文档。姜茶gmetad可以通过如下指令telnet:
正常运行的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集群的访问规则。
配置gmetad.conf
这里配置该文件(/etc/ganglia/gmetad.conf),主要是为了定义数据源、gmetad轮询的间隔和轮询的主机以及其他关于rrd存储的配置。配置如下:
配置gmond
这里配置该文件(/etc/ganglia/gmond.conf),主要是配置指标数据汇聚节点,用于gmetad的轮询。配置如下:
配置gweb
这里配置该文件(/etc/ganglia/conf.php),主要是设置web的信息,如果rrdtool的位置、rrd的位置等。该文件是/usr/share/ganglia/conf_default.php的扩展。配置信息如下:
这里需要注意”gmetad_root”的目录需要是ganglia用户的,且有写权限。并且目录应该包含conf和dwoo。这两个目录中包含了有关gweb的数据显示等各种文件,该文件不应该由用户自己创建,可以从/var/lib/ganglia进行拷贝。
启动服务
|
|
安装gmond节点
安装gmond节点需要安装gmond以及依赖。依赖和gmetad的相同。gmond主要用于收集节点的指标数据。
配置gmond.conf
这里配置该文件(/etc/ganglia/gmond.conf),主要是为了收集指标数据,并将数据以udp的方式发送给汇聚用的gmond。配置如下:
启动服务
|
|
访问http://server-001.yz/ganglia 就可以看到页面效果了。
常见问题
图表没有数据或者数据不可读
首先要确定是真的没有数据,还是gweb没有读到数据。是否有数据可以通过telnet gmetad或在rrd目录中查看来进行核实。本例中遇到的问题是有数据,但是gweb没有读到。
通过各种查询发现gweb配置文件中rdd和gweb配置的根目录与存放RDD的实际目录不相符,修改后可以正常显示。