debian环境下编译部署ganglia,用于监控flume。

ganglia编译部署

ganglia主要包括gmond和gmeta,

  • gmond用于收集监测数据,可以发送也可以接收在同一个组播或单播通道上的统计信息。gmond有两个角色,一个是发送者,另一个是接收者。当mute=no时,gmond是发送者,会收集本节点上的基本指标,比如系统负载(load_one)、cpu和memory利用率等,也可以发送用户通过添加C/Python模块来自定义的指标。当deaf=no是接收者,主要用来聚合所有从别的节点上发来的指标(如flume agent发来的metrics信息),并把他们都保存在内存缓冲区中。gmond节点之间通过UDP收集数据,gmetad通过TCP从gmond节点获取数据
  • gmeta定期检查gmond,拉取gmond上的数据,并将他们的指标存储在RRD存储引擎中。

除此之外还有个web组件用于显示监控图,ganglia-web(或者ganglia-webfrontend)

下面开始编译ganglia,官网上gmond、gmeta和ganglia-web是分开的两个安装包。ganglia中只包括gmond和gmeta。

编译

apt-get install make gawk gcc g++ pkg-config python-libxml2 libcogl-pango-dev python-dev libxml2-dev libxslt-dev libaprutil1-dev libpcre* libconfuse*
可能不全,但也差不多。

上面的依赖包都安装之后还需要confuserrdtool,这两个需要编译安装,所以单独说明下。

安装confuse

1
2
3
4
5
wget http://download.savannah.gnu.org/releases/confuse/confuse-2.7.tar.gz
tar -zxvf confuse-2.7.tar.gz
cd confuse-2.7
./configure CFLAGS=-fPIC --disable-nls --prefix=/home/hadoop/confuse-2.7
make && make install #root用户执行

安装rrdtool

1
2
3
wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.6.0.tar.gz
./configure --prefix=/usr/local # 貌似安装到别的目录,需要将bin下的命令加到环境变量中,否则后面编译ganglia会报错
make && make install #root用户执行

依赖安装完毕,进入ganglia-3.7.2.tar.gz的解压目录中,执行编译命令

./configure --prefix=/usr/local/ganglia --with-gmetad --with-librrd=/usr/local/lib --sysconfdir=/etc/ganglia --enable-gexec --enable-status

--prefix用于指定ganglia编译之后的目录,--with-gmetad包含gmeta组件,--with-librrd=/usr/local/lib包含rrd数据库,--sysconfdir=/etc/ganglia将gmeta和gmond的配置文件放在此目录。

成功之后就可以执行make && make install安装ganglia了。

还需要安装apt-get install ganglia-modules-linux ganglia-monitor ganglia-monitor-python ganglia-webfrontend libganglia1 libganglia1-dev,要不然无法收集机器的基础属性,也不能正常显示图片(ganglia-webfrontend不安装无法正常显示图片)。

下面来编译ganglia-web,其实下载的ganglia-web-3.7.2.tar.gz已经是编译好的,直接执行安装命令(make && make install)就行了。但是ganglia-web需要依赖apache作为服务器,则还需要安装依赖apt-get install apache2.2-bin apache2.2-common apache2 libapache2-mod-php5 php5

这里也可以对ganglia-web的安装目录进行稍许的配置,配置在Makefile

主要改的配置选项如下:

1
2
3
4
5
6
7
8
9
10
11
12
# Location where gweb should be installed to (excluding conf, dwoo dirs).
# web页面文件,需要放在apache web文件夹里
GDESTDIR = /usr/share/ganglia-webfrontend

# Location where default apache configuration should be installed to.
GCONFDIR = /etc/ganglia-web

# Gweb statedir (where conf dir and Dwoo templates dir are stored)
GWEB_STATEDIR = /var/lib/ganglia-web

# Gmetad rootdir (parent location of rrd folder)
GMETAD_ROOTDIR = /var/lib/ganglia

上面的目录配置的有点散,可以对其进行修改,使其便于管理,修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
GDESTDIR = /var/lib/ganglia/web

# Location where default apache configuration should be installed to.
GCONFDIR = /var/lib/ganglia/etc/
#GCONFDIR = /etc/ganglia-web

# Gweb statedir (where conf dir and Dwoo templates dir are stored)
GWEB_STATEDIR = var/lib/ganglia

# Gmetad rootdir (parent location of rrd folder)
GMETAD_ROOTDIR = /var/lib/ganglia
# 可改可不改,默认是www-data
APACHE_USER = hadoop_portal

之所以选择/var/lib/ganglia这个目录,是因为rrd在此目录中。如果你用的版本和我一样,可能会遇到个小bug,将GDESTDIR和GWEB_STATEDIR路径中的第一个/去掉

部署

部署比较简单,修改两个配置文件就行,分别是gmond.conf和gmeta.conf,在目录/etc/ganglia(此路径是在编译ganglia时指定的)中。

gmeta.conf中只需添加数据源和gmod节点就可以了,

1
2
3
4
5
# 说明:这里的 "flume" 表示的是集群的名称,与gmod中的cluster名字一样,后面的内容是这个集群中所包含的主机信息,也就是要监控的主机ip
# 这里采用单播方式,则只有一个节点,并配上端口,如果不指定端口,默认是8649
data_source "flume" 127.0.0.1:8666
# 由于setuid默认是开启的,而setuid_username默认是nobody,可能会遇到权限问题,则改为启动用户hadoop
setuid_username "hadoop"

启动之前需要改下rrd所在目录的权限,改为启动gmeta的用户,命令chown -R hadoop:hadoop /var/lib/ganglia(如果rrds目录不存在,则新建/var/lib/ganglia/rrds目录)

现在就可以启动gmeta了,命令/usr/local/ganglia/sbin/gmetad start。(/usr/local/ganglia/是在编译时由–prefix=指定的)

然后通过ps -ef | grep gm查看是否有gmeta进程,如果没有就代表没有启动成功,可以使用gmetad --debug=4(或者gmeta debug=10 log message)进来debug启动。

gmond.conf文件修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
globals {
daemonize = yes
setuid = yes
# 与gmeta中setuid_username相同,启动gmond的用户
user = hadoop
debug_level = 0
max_udp_msg_len = 1472
# 发送者开关
mute = no
# 接收者开关
deaf = no
host_dmax = 0 /*secs */
cleanup_threshold = 300 /*secs */
gexec = no
send_metadata_interval = 0
}

cluster {
# gmeta中data_source中的cluster名字
name = "flume"
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
#发送者channel
# 如果不用监视本节点基础指标则不用配置,并设置mute为yes
udp_send_channel {
# 多播方式
/*mcast_join = 239.2.11.71 */
host = 127.0.0.1
port = 8666
ttl = 1
}
# 接收者channel
udp_recv_channel {
/* mcast_join = 239.2.11.71 */
port = 8666
bind = 127.0.0.1
}

tcp_accept_channel {
port = 8666
}

启动gmond,命令/usr/local/ganglia/sbin/gmond start,没有启动则用上面介绍的debug模式启动,查找错误原因。

最后就是启动ganglia-web,这个比较简单,只需要将GDESTDIR所指定的目录放到/var/www目录中就可以了。我在这建了个软连cd /var/www/ && ln -s /usr/share/ganglia-webfrontend ganglia

启动apache就可以访问了,apache启动命令apache2ctl -k start

输入127.0.0.1/ganglia就可以查看监控指标了。

如果服务器在本地不能访问,可以使用telnet localhost 8651来验证下gmeta是否成功(gmeta默认是8651端口)。

更改Apache的默认端口

在debian系统下apache默认安装目录是/etc/apache2/
更改默认端口需要修改两个配置文件,分别为/etc/apache2/ports.conf/etc/apache2/sites-available/default

更改内容如下:

1
2
3
4
5
#ports.conf
NameVirtualHost *:8001
Listen 8001
#default
VirtualHost *:8001

然后重启就ok了。可以使用命令netstat -lnp |grep apache查看配置是否生效。显示内容如下则表示生效
tcp6 0 0 :::8001 :::* LISTEN 8647/apache2

flume 监控

使用ganglia监控flume较为简单,只要在启动agent时指定ganglia中gmond的地址和端口就ok了,命令如下:
/bin/bash ${FLUME_PATH}/bin/flume-ng agent -n a1 -c ${FLUME_PATH}/conf -f ${FLUME_PATH}/conf/flume.conf -Dflume.monitoring.type=ganglia -Dflume.monitoring.hosts=127.0.0.1:8666 &