ganglia-gmond.conf配置文件

时间:2024-12-24 21:36:56

运行下列命令可以生成gmond默认配置文件:

User@host:$ gmond -t

配置文件由大括弧括起来的几个section组成。这些section可以粗略划分为两个逻辑分类。第一类中的section处理主机和集群的配置;第二类中的section处理指标数据收集和调度的特定问题。

所有section名和属性不区分大小写,例如下列属性是等价的:

name NAME Name NaMe

有些section是可选的,而有些则是必需的;有些section在配置文件中可能多次出现,而有些section可能只出现一次;有些section还可能包含subsection。

在需要大型复杂配置的情况下,include指令可以将gmond.conf文件划分为多个文件。include指令支持typeglob的使用。例如下列命令表示gmond可以加载/etc/ganglia/confd./中所有以“.conf”结尾的文件:

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

注意: gmond.conf快速启动

为了快速启动和运行gmond,只需要设置默认配置文件中“cluster”section的name属性。

配置文件由第三方API——libconfuse进行语法分析。一般规则适用于libconfuse文件格式。尤其是,在表示布尔值时,可以使用yes、true和on表示正值,用no、false和off表示负值。布尔值不区分大小写。

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

section:globals。globals这一section配置守护进程本身的通用特性,它在配置文件中只出现一次。下面是Ganglia 3.3.1中的默认globals section。
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时,gmond将user属性指定的特定用户的UID作为有效UID;当值为false时,gmond将不会改变其有效用户。

debug_level(整数值)

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

max_udp_msg_len(整数值)

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

mute(布尔类型):

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

deaf(布尔类型):

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

allow_extra_data(布尔类型)

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

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

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

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

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

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

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

gexec(布尔类型)

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

override_hostname = "192.168.0.43"   指定本节点显示的名称

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

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

module_dir(路径;可选)

该指令用来标识已找到的指标收集模块的路径。如果省略,则默认为编译时选项值:--with-moduledir。该选项值即为libganglia安装目录下名为Ganglia的子目录。为了在特定gmond中找到该指令的默认值,可以通过下面命令生成一个简单配置文件:

# gmond -t

例如,在32位兼容英特尔的Linux主机上,默认值通常是/usr/lib/ganglia。

section:cluster。每个gmond守护进程会使用在cluster section中定义的属性来报告它所属集群的信息。默认值为字符串“unspecified”。使用默认值系统即可正常工作。该section在配置文件中可能只出现一次,下面为该section的默认配置:
cluster {
   name = "unspecified"
   owner = "unspecified"
   latlong = "unspecified"
   url = "unspecified"
 }

注意: cluster section中的属性和gmond中以XML格式输出的CLUSTER标识符的属性相对应。

name(文本格式)

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

owner(文本格式)

指定集群管理员。

latlong(文本格式)

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

url(文本格式)

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

注意: cluster section指定的name属性将该主机置于一个集群内。多播地址和UDP端口指定一个主机是否在某个集群内。name属性只是充当轮询时的标识符。

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

location(文本格式)

用来标识主机位置,描述的格式一般与站点位置有关, 经常使用rack,U[,blade]的标识方式。

section: UDP channels。UDP发送和接收通道确定gmond节点间的交互方式。集群是由UDP通信通道所定义的,也就是说,集群只不过是共享同样发送或接收通道的一些gmond节点。

gmond集群内每个节点默认通过UDP将自身指标数据多播至其他节点,同时侦听其他节点的类似UDP多播。这种方式很容易设置和维护:集群内每个节点共享多播地址,而且每个新节点可自动被发现。然而,正如在之前章节对单发和单收节点的介绍,有时需要通过单播地址指定某些节点。

出于这种原因, 任意数量的gmond发送和接收通道可以独立配置以满足特定环境需求。每个发送通道都可以定义gmond发布自己指标数据的一种新方式,而且每个接收通道都可以定义gmond接收其他节点指标数据的一种方式,可能是单播,也可能是多播;可能是IPv4,也可能是IPv6。

请注意gmond节点不能配置为向多个Ganglia集群发送指标数据,也不应该尝试从多个集群接收指标数据。

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_join(IP;可选;仅多播)

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

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

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

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

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

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

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

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

time-to-live的缩写。该设置在多播环境中尤其重要,因为该值限制了指标数据所允许传播的跃点(hop)数。当该值设置得比实际所需的更大时,指标数据将能够通过WAN连接传输到多个站点,甚至跳出WAN进入全局Internet。

下面是默认的UDP接收通道:
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。如果用户想要将该端口绑定到inet6端口,请指定family属性为inet6。Ganglia不允许IPv6=>IPv4的映射(出于便捷性和安全性考虑)。如果用户想同时对一个特殊端口进行inet4和inet6侦听,请为该端口定义两个分离的接收通道。

acl(ACL定义;可选;多播或单播)

通过指定接入控制列表(Access Control Line,ACL)可以对接收通道进行精细地接入控制。 详见后面对ACL语法的详细解释。

section: TCP Accept Channel。TCP接收通道(TCP Accept Channel)是gmond节点创建向gmetad或其他外部轮询器汇报集群状态的通道。用户可以配置任意多选项。默认TCP接收通道为:
tcp_accept_channel {
  port = 8649
}

bind(IP;可选)

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

port(数字)

gmong接收连接的端口号。

family(inet4|inet6;可选;多播或单播)

默认IP版本为inet4。如果用户想要将该端口绑定到inet6端口,请指定family属性为inet6。Ganglia不允许IPv6=>IPv4的映射(出于便捷性和安全性考虑)。如果用户想同时对一个特殊端口进行inet4和inet6侦听,请为该端口定义两个分离的接收通道。

interface(文本格式;可选)

当指定该选项时,gmond将侦听指定接口(例如eth0)数据。

acl(ACL定义;可选;多播或单播)

通过指定接入控制列表(ACL)可以对接收通道进行精细地接入控制。

Access control。udp_recv_channel指令和tcp_accept_channel指令可以包含一个接入控制列表(ACL)。该列表允许用户指定gmond接收或拒绝连接的地址和地址范围。下面是ACL的一个示例:
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冲突时,以第一个匹配项为准。

optional section: sFlow。sFlow是用于监测高速路由网络的工业标准技术。sFlow聚合器最初定位为嵌入式网络硬件,现在服务于通用操作系统和诸如Tomcat、memcached和Apache Web Server等流行应用。gmond可以通过配置来充当网络中sFlow代理的聚合器,收集sFlow代理的数据并实现对gmetad的透明传输。第8章将提供更多关于sFlow互操作性的信息。整个sFlow section是可选的。下面是sFlow的默认配置:
#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数据的端口。

其他剩余配置参数用来处理特定应用的sFlow数据类型,详见第8章。

section: modules。该section包含了加载指标模块的必要参数。指标模块是动态可加载的共享目标文件,用于扩展gmond可收集的指标。第5章将更为详细地介绍如何使用模块来扩展gmond。

每个modules section必须至少包含一个module subsection。module subsection由5个属性组成。默认配置包含了默认安装中所有可用模块(module),如果不添加新模块则无需更改该节。下面给出假设的模块example_module的配置示例:
modules {
      module {
        name = "example_module"
        language = "C/C++"
        enabled = 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(布尔类型,可选)

通过配置文件设置模块可用或不可用。如果enabled指令不包含在模块配置中,则默认为yes。

注意: 如果一个模块已经被禁用,但是它包含的指标仍存在于当前指标收集组的列表中时,gmond将发出警告信息,但是将忽略该指标继续正常运行。

path(文本格式)

指示gmond预设的加载模块路径(只支持C/C++编译的动态可加载模块)。如果path值不以正斜线开头,则该值将附加到globals section的module_path属性上。

param(文本格式;可选)

用来将字符串参数传送到模块初始化函数(只支持C/C++)。通过包含多个param section,可以将多个参数传送到模块初始化函数。每个param section必须命名,并包含一条value指令。

section: collection_group。collection_group实体指定了gmond包含的指标及gmond收集和广播这些指标的周期。用户可以定义任意多的收集组,每个收集组必须包含至少一种metric section。

这些逻辑指标分组基于相同的收集间隔。这些在gmond.conf中定义的分组并不影响用于Web接口中的分组,也不能用这种方式来指定Web接口的分组名称。节选部分默认配置如下:
collection_group {
   collect_once = yes
   time_threshold = 1200
   metric {
     name = "cpu_num"
     title = "CPU Count"
   }
 }
 collection_group {
   collect_every = 20
   time_threshold = 90
   /* CPU status */
   metric {
     name = "cpu_user"
     value_threshold = "1.0"
     title = "CPU User"
   }
   metric {
     name = "cpu_system"
     value_threshold = "1.0"
     title = "CPU System"
   }
 }

collect_once(布尔类型)

有些指标“不变”,也就是说在两次重启时不变化。这些指标包括OS类型和系统CPU数量等,只在初始启动时收集一次,并将其collect_once属性设置为yes。该属性与collect_every相互排斥。

collect_every(秒)

该值指定了收集组的轮询间隔。在上例中,cpu_user和cpu_system指标的收集间隔是20秒。
time_threshold(秒)

gmond发送collection_group所指定的指标数据到所有已配置的udp_send_channels的最大时间。

name(文本格式)

指标收集模块定义的单个指标标准名称。每个加载模块一般定义好几种单独的指标。name可以由name_match参数替换。使用name_match可以通过单个定义来配置多个符合某个正则表达式的指标,如Perl兼容的正则表达式(pcre)的语法: name_match = “multicpu_([a-z]+)([0-9]+)”。

注意: 通过在gmond上运行一个–m转换(switch )可以获得可用指标名列表。

value_threshold(数字)

每次收集到指标数据时,会将新值与上一次的数值进行比较。当二者差别大于value_threshold时,整个收集组被发送至已定义的udp_send_channels。在不同的指标模块中该值表示不同的指标单位,例如,对于CPU统计,该值代表百分比,网络统计则将该值理解为原始字节数。

注意: 当收集组中的任意一个指标超过value_threshold时,该收集组内的所有指标将发送到UDP接收通道。

title(文本格式)

一种用户化的用于Web前端的指标名称