ganglia简介以及工作原理和配置

来源:互联网 发布:正规网络医生兼职平台 编辑:程序博客网 时间:2024/05/21 20:23

1 Ganglia简介

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

看下ganglia监控的一个图:

 

可以很只直观的观察系统的各个指标,特别是对于分布式系统来说,无疑非常重要,而且Hadoop,Hbase提供了集成了ganglia的配置文件。


2 ganglia组成以及工作流程

2.1 组成

在了ganglia的组成之前,先来看下一张图


从上图可以很直观的看到,一个监控系统大概包括:

Gmond,gmetad,rrdtool,Apache,PHP以及一个展示的web

组件:

1)gmond用于节点信息的收集和存储

收集:一般用于收集本节点,用gmond.confudp_rev_channel来配置

存储:并不是所有的gmond的都用来存储,可以找出其中的一台或者几台来存储即可,用gmond.confudp_send_channel来配置。

各个gmond节点之间的信息发送接收主要用udp协议

2)gmetad 用于轮询gmond节点存储的信息

Gmetad可以配置轮询的gmond节点,通过source 参数配置。

这里的个gmond节点就是上面udp_send_channel所配置的节点,可以是hostname或者ip

3)rrdtool 用于存储数据,画图

rrdtoolgmetad轮询收集到的数据持久化磁盘文件中,并且还可以利用这些数据画图,更好的展示这些数据

4)gweb用于展示收集到的数据

 2.2 工作流程


监控的集群节点的步骤如下:

第一步:在要收集的数据的每个节点安装gmond,主要用来收集节点的信息以及存储信息(这里的存储信息在后面会讲解)

第二步:只要部署在一台机器就可以了(部署在我们需要通过web访问的机器上),主要用来轮询收集gmond的信息,并以某种形式存储到磁盘上。

第三步:安装apache web服务器,以及php(由于gwebphp开发的),构建gweb的执行环境

第四步:安装gweb,以web的形式更清晰的展示刚刚收集的历史数据。

当然其中会用一些插件,后面会讲解怎么用以及怎么安装。

 

3 各个组件的配置说明

  3.1 gmond 

    位置  /etc/ganglia/gmond.conf

    3.1.1 Globals

 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 /*secs. Expires (removes from web interface) hosts in 1 day */
    host_tmax = 20 /*secs */
    cleanup_threshold = 300 /*secs */
    gexec = no
    send_metadata_interval = 0 /*secs */
 }

 

daemonize(布尔类型)

当值为true时,gmond将在后台分散运行。当在守护进程管理器(如daemontool)下运行gmond时,将此值设置为false

setuid(布尔类型)

当值为true时,gmonduser属性指定的特定用户的UID作为有效UID;当值为false时,gmond将不会改变其有效用户。

debug_level(整数值)

当值为0时,gmond将正常运行。当debug_level大于0时,gmond将在前台运行并输出调试信息。debug_level值越大,输出越详细。

max_udp_msg_len(整数值)

该值是gmond发送包所能包含的最大长度。一般情况下该值默认不变。

mute(布尔类型):

当值为true时,不管其他配置指令如何,gmond将不能发送数据。“单收”(mutegmond节点只不向其他gmond守护进程发送数据,但仍然会响应诸如gmetad的外部轮询器。

deaf(布尔类型):

当值为true时,不管其他配置指令如何,gmond将不能接收数据。在每个集群内拥有成千上万节点的大型网格中,或者在细致优化的HPC网格中(例如充分利用CPU的空闲周期),为减少汇聚集群状态的相关开销,经常将普通的计算节点设置为单发。在这些情形下,某些特点的节点被预置为单收,此时这些节点的性能指标将不会被测量,因为这些节点将不会用作网格的运算。因为这些节点的任务是汇聚,所以它们的性能数据会“污染”集群内其他的功能部分。

allow_extra_data(布尔类型)

当值为false时,gmond将不会发送XMLEXTRA_ELEMENTEXTRA_DATA部分。该值主要应用于用户使用自己的前端并希望节省带宽时。

host_dmax(以秒为单位的整数值)

dmaxdelete max的缩写。当值为0时,即使远程主机停止报告,gmond也不会从列表里删除该主机。如果host_dmax设置为正值,当gmond在“host_dmax”秒内接收不到某台主机的数据,gmond将删除该主机。

host_tmax(以秒为单位的整数值)

tmaxtimeout max的缩写,代表gmond等待一台主机更新的最长时间。因为消息可能在网络中丢失,所以如果在4倍的host_tmax时间内接收不到某台主机的任何消息,gmond就认为该主机已经崩溃。

cleanup_threshold(以秒为单位的整数值)

gmond清除过期数据的最小时间间隔。

gexec(布尔类型)

当值为true时,gmond将允许主机运行gexec任务。这种方式需要运行gexecd并安装合适的验证码。

send_metadata_interval(以秒为单位的整数值)

该值设置gmond两次发送元数据包的时间间隔。元数据包是用来描述所有激活指标的数据包。该指令默认设置为0,表示gmond只有在初始启动和收到其他远程运行的gmond节点请求时才会发送元数据包。如果向集群内添加一台运行gmond的主机,则该主机节点需要向其他节点公布自身信息,并告知目前支持的指标标准。在多播模式下,由于任何一个节点都可以向集群内的其他节点请求发送元数据,因此该问题并不存在。然而,在单播模式下必须设置重发间隔。间隔值是两次重发之间的最少秒数

3.1.2 cluster

cluster {
    name = "unspecified"
    owner = "unspecified"
    latlong = "unspecified"
    url = "unspecified"
 }

每个gmond守护进程会使用在cluster section中定义的属性来报告它所属集群的信息,使用默认值系统即可正常工作。

name(文本格式)

指定集群名称。当轮询节点的集群状态的XML集合时,把该名称插入CLUSTER元素内。轮询该节点的gmetad会使用该值来命名存储集群数据的RRD文件。该指令将取代gmetad.conf配置文件中指定的集群名称。

owner(文本格式)

指定集群管理员。

latlong(文本格式)

指定该集群在地区上的GPS坐标的经纬度。

url(文本格式)

指定携带集群特定信息(如集群用途和使用细节)的URL

3.1.3 host

host section提供运行gmond主机的相关信息。目前只支持地址字符串属性。默认host  section为:
host {
   location = "unspecified"
 }

location(文本格式) 

3.1.4 udp_send_channel

UDP通道是通过udp_(send|receive)_channel section创建的。下面给出默认的UDP发送通道:
udp_send_channel {
    #bind_hostname = yes
    mcast_join = 239.2.11.71
    port = 8649
    ttl = 1
 }

bind_hostname(布尔类型;可选;多播或单播)

通知gmond使用源地址解析主机名。

mcast_joinIP;可选;仅多播)

当指定该选项时,gmond将创建UDP套接字并加入由IP地址指定的多播组。该选项创建一个多播通道,并与host相互排斥。

mcast_if(文本格式;可选;仅多播)

当指定该选项时,gmond将发送来自指定接口(例如eth0)的数据。

host(文本格式或IP;可选;仅单播)

当指定该选项时,gmond将向已命名主机发送数据。该选项创建一个单播通道,并与mcast_join相互排斥。

port(数字;可选;多播或单播)

该选项指定gmond发送数据的端口号。如果未指定,则默认为端口8649

3.1.5 udp_recv_channel

udp_recv_channel {
    mcast_join = 239.2.11.71
    port = 8649
    bind = 239.2.11.71
 }

3.1.6 TCP Accept Channel

TCP Accept ChannelTCP接收通道(TCP Accept Channel)是gmond节点创建向gmetad或其他外部轮询器汇报集群状态的通道。用户可以配置任意多选项。

默认TCP接收通道为:
tcp_accept_channel {
   port = 8649
}

bindIP;可选)

当指定该选项时,gmond将捆绑到指定的本地地址。

port(数字)

gmong接收连接的端口号。


3.2  Gmetad

Gmetad 这个程序负责周期性的到各个datasource收集各个cluster的数据,并更新到rrd数据库中。可以把它理解为服务端。Gmond 收集本机的监控数据,发送到其他机器上,收集其他机器的监控数据,gmond之间通过udp通信,传递文件格式为xdl。收集的数据供Gmetad读取,默认监听端口8649 ,监听到gmetad请求后发送xml格式的文件。可以把它理解为客户端。

gmetad默认将指标数据直接写入文件系统上的RRD文件,在有I/O限制的大型装置中,rrdcached充当gmetadRRD文件之间的缓存,如下图

 

常用配置

gridname(文本格式)

能唯一标识网格的字符串。该字符串应该与gmond中所设置的标识符不同。在gmond.conf的 (at cluster { name = XXX” }CLUSTER标识符中,用来表示gmond实例能收集到所有主机,而gridname属性则表示由GRID标识符指定的所有数据源,可以理解为在data_source中定义的一个集群集合

data_source

每个data_source3个字段组成。第一个字段为唯一标识data_source的字符串;第二个字段为指定轮询间隔(单位:秒)的数字;第三个字段为以空格分开的所要轮询数据的主机列表,这些地址以IP地址或DNS主机名的形式指定,并可能添加“:端口号”形式的后缀,该端口号指明gmondtcp_accept_channel所在位置。如果未指明端口号,gmetad将尝试连接tcp/8649

setuid_usernameUID

gmetad设置UID的用户名。默认为nobody

rrd_rootdir(路径)

指定RRD文件在本地文件系统存储的基本目录。

3.3 gweb

  gweb是最容易配置,也是需要配置最少就能工作的守护进程。实际上,无需改变gweb的任何默认配置,gweb就可以启动并运行功能齐全的Web客户端。

一个基于web的监控界面,通常和Gmetad安装在同一个节点上(还需确认是否可以不在一个节点上,因为php的配置文件中ms可配置gmetad的地址及端口),它从Gmetad取数据,并且读取rrd数据库,生成图片,显示出来。

原创粉丝点击