Ganglia分组监控
官方文档:http://sourceforge.net/apps/trac/ganglia/wiki/ganglia_quick_start
行文之前,表达一下小郁闷。Ganglia官方把分组监控的帮助文档放到了Quick Start Guide,而不是Configuration,让我一番好找。
Ganglia的分组监控,实施起来其实很简单,官方文档已经给出了示例。
总结起来,实施分组监控,有下面几个关键点:
一是多播和单播。分组监控最好用单播方式,文档也给出了单播模式的配置方式。
二是send_metadata_interval设置的间隔时间,官方推荐30秒。
三、分组监控,要同时修改gmetad.conf和gmond.conf。gmetad.conf中的分组配置非常简单,不必细说。
四、分组的标识是gmond.conf配置文件中的cluster name值和port值,同一分组中的机器的这两个值都必须一致,不同组的机器,这两个值不同。
cluster name的值要与gmetad.conf中的相应条目保持一致;port值的配置需要在udp_send_channel、udp_recv_channel和tcp_accept_channel三个部分同时设定,注间端口不要冲突。
gmetad.conf,只修改了data_source,其它部分保持原状:
- data_source "Internal" 10 192.168.9.53:8649
- data_source "Tangshan" 10 10.64.131:8650 10.10.64.132:8650
- data_source "Jiaxing" 10 10.10.19.170:8653 10.10.19.94:8653
解释一下,每个集群中都有很多服务器,但我们不需要把集群中的每台服务器都写在data_source条目里,因为,虽然在理论上,Ganglia服务器端要到每个节点上去获取监控信息,但实际上不必如此;集群内的每台机器都会保留其它机器的信息,服务器端只需要连接集群内的任意一台机器,就可以整个集群内所有节点的监控信息。
在Tangshan和Jiaxing两个集群的配置中,我写了两台服务器,是一个冗余设计。Ganglia服务器端默认去第一台服务器获取信息,如果这台服务器因为某些原因而没有被获取到,服务器端会自动到第二台服务器上获取监控信息。
gmond.conf,以Tangshan集群为例,修改下列部分,其它保持默认:
- 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 = 0 /*secs */
- cleanup_threshold = 300 /*secs */
- gexec = no
- send_metadata_interval = 30 /*secs */
- }
- cluster {
- name = "Tangshan"
- owner = "hdfs"
- latlong = "unspecified"
- url = "unspecified"
- }
- host {
- location = "unspecified"
- }
- udp_send_channel {
- mcast_join = 239.2.11.71
- port = 8650
- ttl = 1
- }
- udp_recv_channel {
- mcast_join = 239.2.11.71
- port = 8650
- bind = 239.2.11.71
- }
- tcp_accept_channel {
- port = 8650
- acl {
- default = "deny"
- access {
- ip = 192.168.9.45
- mask = 32
- action = "allow"
- }
- access {
- ip = 10.10.64.0
- mask = 24
- action = "allow"
- }
- }
- }
其它分组,只需要修改cluster name,以及port值就可以了!要添加分组,也很简单。