共计 20795 个字符,预计需要花费 52 分钟才能阅读完成。
1 环境安装配置
1.1 依赖软件下载
Ganglia 是伯克利开发的一个集群监控软件。可以监视和显示集群中的节点的各种状态信息,比如如:cpu、mem、硬盘利用率,I/ O 负载、网络流量情况等,同时可以将历史数据以曲线方式通过 php 页面呈现。
而 ganglia 又依赖于一个 web 服务器用来显示集群状态,用 rrdtool 来存储数据和生成曲线图,需要 xml 解析因此需要 expat,配置文件解析需要 libconfuse。安装 apche 的 httpd 还需要支持 php4 以上,同时还有一些依赖软件。
在 RedHat 可以通过如下命令安装这些依赖软件:
yum -y install apr-devel apr-util check-devel cairo-devel pango-devel libxml2-devel rpmbuild glib2-devel dbus-devel freetype-devel fontconfig-devel gcc-c++ expat-devel python-devel libXrender-devel
libconfuse 可以通过如下命令得到:
wget http://download.Fedora.redhat.com/pub/epel/5/x86_64/libconfuse-2.5-4.el5.x86_64.rpm
wget http://download.fedora.redhat.com/pub/epel/5/x86_64/libconfuse-devel-2.5-4.el5.x86_64.rpm
1.2 安装配置步骤
1.2.1 安装
这里采用下载源码编译安装,到 http://ganglia.info 网站下载最新版的 ganglia,下载后解压。
./configure –with-librrd=/rrd/path –with-gmetad –prefix=/usr/local/ganglia
make
make install
如果中间出现依赖软件问题,则需要安装缺少的那个软件包。安装完毕后,需要进行配置,其配置文件一般放在 /etc/ganglia 目录下,名称为 gmetad.conf。当然对于路径并没有严格要求,因为 gmetad 可以在启动时指定所用的配置文件。
安装 ganglia 后,还需要安装 apache 服务器,同时需要有 php 模块支持,否则最终的显示页面无法正常显示。推荐采用 yum install httpd php
否则如果没有配置正确,则有可能 apache 不能和 php 正确关联。
安装完毕后可以输入 http://localhost/test.php, 编一个 php 页面测试下是否成功安装。
1.2.2 配置
如果采用源码安装,根据前面的—prefix,ganglia 会被安装到 /usr/local/ganglia 目录下。
首先建一个目录,该目录用来存放 ganglia 的 web 页面
mkdir -p /var/www/html/ganglia/
该目录用来存放后面用来显示数据的 web 页面。
由于采用源码编译的,并没有将 gmetad 和 gmond 加为服务,执行以下命令。
cp gmetad/gmetad.Init /etc/rc.d/Init.d/gmetad // 拷贝 gmetad 服务启动脚本
cp gmond/gmond.Init /etc/rc.d/Init.d/gmond // 拷贝 gmond 服务启动脚本
mkdir /etc/ganglia // 创建配置文件主目录
gmond -t | tee /etc/ganglia/gmond.conf // 生成 gmond 服务配置文件
cp gmetad/gmetad.conf /etc/ganglia/ // 拷贝 gmetad 服务配置文件
mkdir -p /var/lib/ganglia/rrds // 创建 rrd 文件存放目录
chown nobody:nobody /var/lib/ganglia/rrds // 属主和属组都为 nobody
chkconfig –add gmetad // 将服务交给 chkconfig 管理
chkconfig –add gmond // 同上
修改配置文件 /etc/gmetad.conf 通常只需要修改如下的参数:
data_source “Clustername” host1 host2
将集群名称改为你自己的,host1 host2 是 gmetad 用来得到集群信息的 xml 文件的数据源,如果没有写端口,则采用默认的 8649 端口,gmetad 默认每隔 15 秒通过 tcp 连接去该主机下载 xml 文件。所以他们可以是 gmond 的 8649 端口,也可以是 gmetad 的 8651 端口,它们都可以提供集群信息的 xml 格式的数据下载。
host1 host2 是 or 的关系,如果 host1 无法下载,则才会尝试去 host2 下载,所以它们应该都是同一个集群的节点,保存着同样的数据。采用 multicast 模式时,每台 gmond 节点都有本 cluster 内节点机器的所有监控数据,因此不需要把所有节点写入 data_source 中。建议写入不低于 2 个,在 host1 节点死机的时候,会自动找 host2 节点取数据。
此外 gmetad 还有如下的属性设置:
RRD database storage defInition
RRAs “RRA:AVERAGE:0.5:1:244” “RRA:AVERAGE:0.5:24:244” “RRA:AVERAGE:0.5:168:244” “RRA:AVERAGE:0.5:672:244” “RRA:AVERAGE:0.5:5760:374”
RRD files location
访问控制 Access control
trusted_hosts address1 address2 … DN1 DN2 …
all_trusted OFF/on
rrd 保存数据的目录
rrd_rootdir “/var/lib/ganglia/rrds”
Network
xml_port 8651 #可以 telnet 到该端口,得到 gmetad 的 xml 文件
interactive_port 8652 #php 页面数据交互使用的端口
1.2.3 php 页面的配置
需要到 /var/www/html/ganglia/ 目录下查找
php.conf
$gmetad_root = “/var/lib/ganglia”; #gmetad 写入的 rrd 数据库的路径
$rrds = “$gmetad_root/rrds”;
$ganglia_ip = “localhost”; #gmetad 服务器的地址
$ganglia_port = 8652; #gmetad 服务器的交互式提供监控数据端口
默认情况下,web 前端每 300 秒(5 分钟)刷新一次,可以修改刷新间隔时间,通过修改 config.php 文件实现,它里面包括有所有的 Ganglia Web 参数。
1.2.4 ganglia 客户端配置
vi /etc/ganglia/gmond.conf
主要是三个地方需要修改,cluster name,udp_send_channel,udp_recv_channel。注意单播与多播模式的区别,在多播模式下,加入该多播组的节点都会收到组内所有其他节点的数据,所以每个相当于一个备份。单播模式下,只是点到点的发送数据,数据只会发向特定的那个 host,这种模式下通常具有一个中央收集节点。
cluster {
name = “Cluster1” #本节点属于哪个 cluster
owner = “chifeng” #谁是该节点的所有者
latlong = “unspecified” #在地球上的坐标,经度、纬度?
url = “unspecified”
}
udp_send_channel {#udp 包的发送通道
mcast_join = 239.2.11.71 #多播,工作在 239.2.11.71 通道下。如果使用单播模式,则要写 host = host1(接受数据的目标主机),单播模式下也可以配置多个 udp_send_channel
port = 8649 #监听端口
ttl = 1
}
udp_recv_channel {#接收 udp 包配置
mcast_join = 239.2.11.71 #同样工作在 239.2.11.71 通道下,如果使用单播模式,则要写 host = localip,就是必须是本机的 ip
port = 8649 #监听端口
bind = 239.2.11.71 #绑定
}
tcp_accept_channel {
port = 8649 #通过 tcp 协议监听的端口,远端可以通过链接 8649 端口得到监控数据,gmetad 就是通过该端口得到 xml 数据
}
还有其他的一些配置项,通常情况下不需要修改,其含义如下:
Collection_group section:
collect_once – Specifies that the group of static metrics
collect_every – Collection interval (only valid for non-static)
time_threshold – Max data send interval
Metric section:
Name – Metric name (see“gmond –m”)
Value_threshold – Metric variance threshold (send if exceeded)
实例如下:
collection_group {
collect_every = 80
time_threshold = 950
metric {
name = “proc_run”
value_threshold = “1.0”
}
metric {
name = “proc_total”
value_threshold = “1.0”
}
}
1.3 命令集合
说明:命令集合,是指我在安装配置时所使用的那些命令行命令,这些可以作为自动化部署脚步的一个基础。后面可以考虑编写自动化部署的脚步。
服务端:
1) 安装 expat-2.0.1.tar.gz
tar xvzf expat-2.0.1.tar.gz
cd expat*;./configure –prefix=/usr/local/apr;make;make install
2) 安装 confuse-2.6
./configure –prefix=/usr/local/confuse-2.6 CFLAGS=-fPIC –disable-nls;make;make install
3) 安装 apr
tar xvjf apr-1.3.2.tar.bz2
cd apr-1.3.2;./configure –prefix=/usr/local/apr;make;make install
安装 apr-util-1.3.2.tar.bz2
tar xvjf apr-util-1.3.2.tar.bz2
cd apr-util-1.3.2;./configure –with-apr=/usr/local/apr –with-expat=/usr/local/expat
make;make install
cp /usr/local/apr-1.3.2/include/apr-1/* /usr/local/apr-1.3.2/include/ 目录,因为 ganglia 安装时默认会去 /usr/local/apr/include 下寻找 apr 的库文件。
4) 安装 rrdtool-1.2.27.tar.gz
tar xvzf rrdtool-1.2.27.tar.gz
cd rrdtool-1.2.27;./configure –prefix=/usr/local/rrdtool
make;make install
5)cp /usr/local/apr/bin/apr-1* /usr/local/bin/ 拷过这个后 OK 否则会编译出问题
报错如下:
Checking for apr
checking for apr-1-config… no
configure: error: apr-1-config binary not found in pat
6) 安装 ganglia
./configure –with-librrd=/opt/rrdtool-1.4.4 –with-gmetad –prefix=/usr/local/ganglia –with-libconfuse=/usr/local/confuse-2.6
7)make;make install
8) 安装 apache 服务器和 php 支持
yum -y install httpd mysqld php-mysql php
客户端:
wget http://download.fedora.redhat.com/pub/epel/5/x86_64/libconfuse-2.5-4.el5.x86_64.rpm
wget http://download.fedora.redhat.com/pub/epel/5/x86_64/libconfuse-devel-2.5-4.el5.x86_64.rpm
scp apr-*.* 10.250.13.45:~/
scp libconfuse-*.* 10.250.13.45:~/
scp ganglia-*.gz 10.250.13.45:~/
scp ganglia-devel-*.rpm 10.250.13.45:~/
scp *.conf 10.250.13.45:~/
ssh 10.250.13.45
sudo su –
yum install expat
cd /home/admin
tar -xvf apr-1.4.*.gz
cd apr*
./configure –prefix=/usr/local/apr
make
make install
cd ..
tar -xvf apr-util-1.3.9.*
cd apr-util*
./configure –with-apr=/usr/local/apr
make
make install
cd ..
rpm -ivh libconfuse-2.5-4.el5.x86_64.rpm
rpm -ivh libconfuse-devel-2.5-4.el5.x86_64.rpm
tar -xvf ganglia-3.1.*.gz
cd ganglia*
cp /usr/local/apr/bin/apr-1* /usr/local/bin/
./configure –with-apr=/usr/local/apr
find / -name “libpython2.5*”
cp /usr/local/lib/libpython2.5.so /usr/lib/libpython2.5.so
make
make install
cd ..
rpm -ivh ganglia-devel-3.1.1-1.x86_64.rpm –nodeps
cd /etc
mkdir ganglia
cp /home/admin/*.conf /etc/ganglia/
cd /etc/ganglia
vi gmond.conf ;edit udp send and recv host.
vi /usr/local/etc/gmond.conf
gmond –debug=10
ps -e|grep gmond
kill -9 id
gmond
如果必要需要重新修改 gmond.conf
scp test 10.250.13.42:~/
scp test 10.250.13.43:~/
scp test 10.250.13.44:~/
scp test 10.250.13.45:~/
vi /etc/profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:”/usr/local/lib64/”
source /etc/profile
1.4 问题及解决
1.4.1 安装问题
◎缺少库文件,通常在 make 过程中出现该错误,ld 找不到对应的库比如 libpython2.5.so
解决方法:find 命令查找这两个文件,并 ln –s 创建指向这两个文件的软链接引用。find / -name libpython*
◎如果安装过程中出现依赖错误, 通常在 configure 时出现
解决方法:首先利用 find 查找,如果找到可以阅读 readme, 查看是否有参数支持指明该路径。不行考虑拷贝到默认目录,还是不行则可以加入参数—nodeps,然后 download 该 lib,通常包含在其 devel 包里,需要去网上查找包含该 lib 的文件,然后安装。
1.4.2 配置及运行问题
◎测试 gmond 和 gmetad 是否运行成功
Telent localhost 8649
Telent localhost 8651
如果没有反应
解决方法:很可能是因为服务没有启动,或者使用的不是默认端口,ps –e|grep gmond,查找服务是否启动。查看 gmond.conf 看所使用的 tcp recv 端口。
还找不到原因,就可以用调试模式启动查看原因
gmond –debug=10
如果出现 udp 之类的端口绑定错误,比如是已被 bind,则查看是否有端口已被利用 lsof –i:port。
还可能是配置文件配置不正确,比如我曾经将 udp_recv_channel 的 host 修改成与 udp_send_channel 相同的值,就发生了端口错误,udp_recv_channel 的 host 必须是本机的 ip(一个机子可能有多个 ip)。如果是权限禁止,则考虑当前用户身份,或者换成 root 试下。
测试 php 前端支持是否成功
http://localhost/ganglia
◎php 页面显示为文件或者提示下载文件
解决方法:说明 apache 的 php 模块没有安装配置好。使用 yum install 或者重新下载安装 php 模块,并在 apache 的 conf 文件里配置好。
◎显示页面无图象展示
首先检查 selinux 是否关闭
然后查看 conf.php 文件里的 rrdtool 路径是否正确,该文件是否存在,注意该路径是 rrdtool 可执行文件的路径不是其安装目录。
然后查看 /var/lib/ganglia/rrds 是否存在,能否被写。chown nobody:nobody /var/lib/ganglia/rrds # make sure RRDTool can write here.
查看 php.conf 里的 gmetad 的路径地址端口是否正确。
使用 Ganglia 监控 Hadoop 集群 http://www.linuxidc.com/Linux/2012-05/61349.htm
在 VMware Workstation 的 Ubuntu 下安装和配置 Hadoop 与 Ganglia http://www.linuxidc.com/Linux/2013-06/85856.htm
Ganglia 安装部署之一建立 Grid http://www.linuxidc.com/Linux/2013-05/83673.htm
Ganglia 极其简单安装教程 yum 版 http://www.linuxidc.com/Linux/2012-12/76536.htm
Ganglia 快速开始向导(翻译自官方 wiki)http://www.linuxidc.com/Linux/2013-11/92747.htm
CentOS 集群上安装 Ganglia-3.6.0 监控 Hadoop-2.2.0 和 HBase-0.96.0 http://www.linuxidc.com/Linux/2014-01/95804.htm
Ganglia 在 CentOS 6.5 的安装 http://www.linuxidc.com/Linux/2014-05/102024.htm
在 Ubuntu 14.04 Server 上安装 Ganglia http://www.linuxidc.com/Linux/2014-08/105838.htm
更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2015-08/121296p2.htm
2 原理
Ganglia 项目是由加州大学发起的,现在已经成为一个应用非常广泛集群监控软件。可以监视和显示集群中的节点的各种状态信息,比如如:cpu、mem、硬盘利用率,I/ O 负载、网络流量情况等,同时可以将历史数据以曲线方式通过 php 页面呈现。同时具有很好的扩展性,允许用户加入自己所要监控的状态信息。
2.1 ganglia 工作原理
图 1 Ganglia 整体结构图
Ganglia 包括如下几个程序,他们之间通过 XDL(xml 的压缩格式) 或者 XML 格式传递监控数据,达到监控效果。集群内的节点,通过运行 gmond 收集发布节点状态信息,然后 gmetad 周期性的轮询 gmond 收集到的信息,然后存入 rrd 数据库,通过 web 服务器可以对其进行查询展示。
Gmetad 这个程序负责周期性的到各个 datasource 收集各个 cluster 的数据,并更新到 rrd 数据库中。可以把它理解为服务端。
Gmond 收集本机的监控数据,发送到其他机器上,收集其他机器的监控数据,gmond 之间通过 udp 通信,传递文件格式为 xdl。收集的数据供 Gmetad 读取,默认监听端口 8649,监听到 gmetad 请求后发送 xml 格式的文件。可以把它理解为客户端。
web front-end 一个基于 web 的监控界面,通常和 Gmetad 安装在同一个节点上 (还需确认是否可以不在一个节点上,因为 php 的配置文件中 ms 可配置 gmetad 的地址及端口),它从 Gmetad 取数据,并且读取 rrd 数据库,生成图片,显示出来。
如上图所示,gmetad 周期性的去 gmond 节点或者 gmetad 节点 poll 数据。一个 gmetad 可以设置多个 datasource,每个 datasource 可以有多个备份,一个失败还可以去其他 host 取数据。
如果是 muticast 模式的话,gmond 之间还会通过多播来相互传递数据。Gmond 本身具有 udp send 和 recv 通道,还有一个 tcp recv 通道。其中 udp 通道用于向其他 gmond 节点发送或接受数据,tcp 则用来 export xml 文件,主要接受来自 gmetad 的请求。Gmetad 只有 tcp 通道,一方面他向 datasource 发送请求,另一方面会使用一个 tcp 端口,发布自身收集的 xml 文件,默认使用 8651 端口。所以 gmetad 即可以从 gmond 也可以从其他的 gmetad 得到 xml 数据。
Gmond 节点内部模块图如下所示:
图 2 Gmond 节点模块结构图
如上图所示,主要由三个模块组成,collect and publish 模块,该模块周期性的调用一些内部指令获得 metric data,然后将这些数据通过 udp 通道发布给其他 gmond 节点。Listen Threads,监听其他 gmond 节点的发送的 udp 数据,然后将数据存放到内存中。XML export thread 负责将数据以 xml 格式发布出去,比如交给 gmetad。
下面重点介绍下 unicast 模式下 ganglia 系统内的数据流。
图 3 单播状况下集群节点间的数据流
如上图所示,多个 gmond 节点通过 udp 向单播的目标 host 的 gmond 发送数据,gmetad 然后向该目标 host 的 gmond 请求 xml 文件,然后存入 rrdtool 数据库。在 unicast 模式中,图中方框内的组件通常是位于集群内的同一个节点。该节点负责收集存储 显示被监控的各节点的状态信息。
2.2 自定义 metrics
向 ganglia 加入自定义 metric 有两种方法,一种是通过命令行的方式运行 gmetric,另一种是通过 ganglia 提供的面向 c 和 python 的扩展模块,加入自定义的模块支持。
2.3 优点及可能存在的问题
2.3.1 优点
- 自动收集数据
集群内各个节点的信息收集可以通过 ganglia 系统自动的收集起来,这个收集是独立进行地。其通信性能都是经过良好设计和优化的。具体的机制是:周期性的将这些信息发送给 gmond,这样信息就加入了 ganglia 监控系统。通过 ganglia 的监控机制完成监控数据的收集显示的功能。Ganglia 系统的机制可以参考 2.1ganglia 工作原理。
- 图形界面
数据可以通过图形显示出来。通过登录 web 服务器即可查看。目前可以通过该视图查看集群及单独节点的状态曲线。同时具有基本的排序机制,可以根据值降序或者升序排序。可以查看过去 1 小时 1 天 1 周 1 年等时间段的状态曲线。
- 数据库 rrdtool 存储了历史数据
由于采用了 rrd 存储数据,这样我们不单可以查看当前的状态,还可以查看之前的状态历史,同时可以将 metrics 随时间的变化以曲线的方式变现表现出来。而单独的向文件写日志很难保存和方便地查看之前的历史记录。而且有可能使得日志文件很大。RRDtool 具有如下优点:
1)除了存储数据之外,它具有可以创建图形的工具;
2)它的数据库文件大小是固定的,新的数据添加到已有数据的后面,当到了文件末尾的时候就开始从文件开始写数据,Round Robin 就是指这个意思;
3)一般的数据库只能存储数据本身,而 rrd 可以存储相对与以前的数据的变动
4)一般的数据库是在提供数据的时候才更新,而 RRD 是在每一个预先设好的时间间隔都会更新,每次更新的时候,time stamp 也会存储进去
2.3.2 可能存在的问题及瓶颈
- 开销估计:网络 IO CPU
只运行 gmond 进程的节点开销很小,通常需要 1m 左右内存,cpu 大概 1% 不到,同时 gmond 只把数据保存在内存中,因此 io 开销可以忽略。同时向其他节点单播本身的信息本身的网络压力也不会很大。因此对于只运行 gmond 的节点来说,开销很小。如果采用了 unicast 模式,主要的开销就会在各节点的 gmond 进程向中央节点发送的 udp 数据带来的网络开销,此外 gmond 和 gmetad 的通信,web 服务也在该中央节点上进行。这样主要的瓶颈就在中央节点上,其网络 IO CPU 的压力都会很大。
对于网络来说,中央节点将收到来自其他所有节点发送的 udp 包,如果一个节点每秒发 10 个包,500 个节点将会发出 5000 个,每个包有 200 字节,就有 1m 字节,5000 个包的处理所需要的 cpu 使用也会上升。
对于内存来说每个状态信息存储在内存大概要耗费 300byte,如果一个 job 有 10 万个 instance,每个 instance 又有 10 个状态需要监控,那么将耗费 10000*10*300=30m 的内存,其对应的 xml 文件大小也应该是 10m 级别的。
对于 IO 来说,Gmetad 默认 15 秒向 gmond 取一次 xml 数据,如果 gmond 和 gmetad 都是在同一个节点,这样就相当于本地 io 请求。同时 gmetad 请求完 xml 文件后,还需要对其解析,也就是说按默认设置每 15 秒需要解析一个 10m 级别的 xml 文件,这样 cpu 的压力就会很大。同时它还有写入 RRD 数据库,还要处理来自 web 客户端的解析请求,也会读 RRD 数据库。这样本身的 IO CPU 网络压力就很大,因此这个节点至少应该是个空闲的而且能力比较强的节点。
- Gmetad RRD 写入瓶颈
需要格外注意的是 gmetad 守护进程使用 RRDtool,会在 /var/lib/ganglia/rrds/ 目录下的一个子目录存储这些 rrd 数据信息,如果集群节点超过 100 个,你可能应将这个目录放在 RAM 文件系统上,因为这个数据库的磁盘 I / O 将会非常高。由于 RRD 特有的存储方式,它会为每个 metric 存放一个文件,如果配置了多个采样频率,它还会为每个采样频率保存一个单独的文件。这就意味着 gmetad 将 metric 的值保存到 rrd 数据库的操作,将是针对大量小文件的 IO,假设集群有 300 个节点,每个节点有 50 个 metric,那么意味着 gmetad 会记录 15000 个 metric,如果这些 metric 都是一秒更新一次,那么意味着每秒 15000 的随机写入操作,通常来说硬盘都是撑不住的。
一个可能的解决方法就是将集群内的节点划分为多个子集,为每个子集配置一个中央收集节点。但这样会带来部署和结果查看的不方便性。另外可以通过 RRDcached 来缓解这个 gmetad 使用 RRDTool 的问题大量随机写入,它会缓存这些写入,批量进行更新。此外就是降低 metric 的采样频率,减少 metrics 的数目,尽量减少这种写入请求量。如果机器具有多块磁盘,尽量利用多个磁盘来保存 RRD 数据。还有就是使用上面我们所说的将 rrd 目录加载为 tmpfs。
- 使用的服务及端口以及依赖的库
Ganglia 的 gmond 进程使用了 udp 进行单播,默认端口 8649,同时还有负责 tcp 监控的端口 8651 8652 8650 也会被使用,这些端口需要在集群内部打开,这些使用的端口可以进行配置。另外 apache 也需要一个端口提供服务,这个端口会被从外部访问,默认是 80。
- 同一个 host 的不同进程的相同 Metirc 可能混淆
由于 ganglia 本身是根据 host+metric_name 来区分不同的状态参数的,也就是它无法区分同一 host 内的不同进程相同的名称的状态变量。但是对于单纯的一个状态量,虽然可能是多个进程的状态,但对它来说只能看到一个名称,所以当多个进程同时向它报告具有同一个名称的状态的 value 时,它无法区分出进程间的不同。如果要区分它们,就需要加入一个命名机制区分它们。
程序运行完毕,该程序对应的自定义的那些 metric 不会消失,这意味着虽然程序运行结束,但我们依然可以查看其历史记录。但另一方面这样也会带来新的问题,由于我们采用的针对 metric 的命名机制,会导致 metric 积累到很多,这样会导致 xml 变得越来越大,增加中央节点解析该文件时的压力,也不方面查阅。目前有一个可行的方法就是修改 gmetad 的配置文件,减少数据的保存时间的设置。
2.3.3 运行需要做的部署工作
基于 ganglia 的监控运行时,需要各个客户端安装 gangliang 的客户端 gmond。收集数据的那个节点还需要安装 ganglia 的服务端 gmetad,为了可以从 web 显示结果,还需要安装 http 服务器。安装这些还有很多依赖软件。具体参见 1 环境安装配置。
3 高级扩展
3.1 直接读取 xml 文件
除了使用 ganglia 内置的网页页面外,也可以自行得到 xml 文件去进行自己的分析。通常需要自己编写一个脚本来完成该任务。通过直接 telnet gmond 或者 gmetad 的 tcp 服务监听端口,可以直接得到 xml 文件,然后我们就可以对该 xml 文件进行需要的处理了。在单播模式下,应该 telnet 那个 gmond 的中央节点,登录该节点才能得到集群内所有节点的信息,否则只能得到单独节点的信息。
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-08/121296.htm
1 环境安装配置
1.1 依赖软件下载
Ganglia 是伯克利开发的一个集群监控软件。可以监视和显示集群中的节点的各种状态信息,比如如:cpu、mem、硬盘利用率,I/ O 负载、网络流量情况等,同时可以将历史数据以曲线方式通过 php 页面呈现。
而 ganglia 又依赖于一个 web 服务器用来显示集群状态,用 rrdtool 来存储数据和生成曲线图,需要 xml 解析因此需要 expat,配置文件解析需要 libconfuse。安装 apche 的 httpd 还需要支持 php4 以上,同时还有一些依赖软件。
在 RedHat 可以通过如下命令安装这些依赖软件:
yum -y install apr-devel apr-util check-devel cairo-devel pango-devel libxml2-devel rpmbuild glib2-devel dbus-devel freetype-devel fontconfig-devel gcc-c++ expat-devel python-devel libXrender-devel
libconfuse 可以通过如下命令得到:
wget http://download.Fedora.redhat.com/pub/epel/5/x86_64/libconfuse-2.5-4.el5.x86_64.rpm
wget http://download.fedora.redhat.com/pub/epel/5/x86_64/libconfuse-devel-2.5-4.el5.x86_64.rpm
1.2 安装配置步骤
1.2.1 安装
这里采用下载源码编译安装,到 http://ganglia.info 网站下载最新版的 ganglia,下载后解压。
./configure –with-librrd=/rrd/path –with-gmetad –prefix=/usr/local/ganglia
make
make install
如果中间出现依赖软件问题,则需要安装缺少的那个软件包。安装完毕后,需要进行配置,其配置文件一般放在 /etc/ganglia 目录下,名称为 gmetad.conf。当然对于路径并没有严格要求,因为 gmetad 可以在启动时指定所用的配置文件。
安装 ganglia 后,还需要安装 apache 服务器,同时需要有 php 模块支持,否则最终的显示页面无法正常显示。推荐采用 yum install httpd php
否则如果没有配置正确,则有可能 apache 不能和 php 正确关联。
安装完毕后可以输入 http://localhost/test.php, 编一个 php 页面测试下是否成功安装。
1.2.2 配置
如果采用源码安装,根据前面的—prefix,ganglia 会被安装到 /usr/local/ganglia 目录下。
首先建一个目录,该目录用来存放 ganglia 的 web 页面
mkdir -p /var/www/html/ganglia/
该目录用来存放后面用来显示数据的 web 页面。
由于采用源码编译的,并没有将 gmetad 和 gmond 加为服务,执行以下命令。
cp gmetad/gmetad.Init /etc/rc.d/Init.d/gmetad // 拷贝 gmetad 服务启动脚本
cp gmond/gmond.Init /etc/rc.d/Init.d/gmond // 拷贝 gmond 服务启动脚本
mkdir /etc/ganglia // 创建配置文件主目录
gmond -t | tee /etc/ganglia/gmond.conf // 生成 gmond 服务配置文件
cp gmetad/gmetad.conf /etc/ganglia/ // 拷贝 gmetad 服务配置文件
mkdir -p /var/lib/ganglia/rrds // 创建 rrd 文件存放目录
chown nobody:nobody /var/lib/ganglia/rrds // 属主和属组都为 nobody
chkconfig –add gmetad // 将服务交给 chkconfig 管理
chkconfig –add gmond // 同上
修改配置文件 /etc/gmetad.conf 通常只需要修改如下的参数:
data_source “Clustername” host1 host2
将集群名称改为你自己的,host1 host2 是 gmetad 用来得到集群信息的 xml 文件的数据源,如果没有写端口,则采用默认的 8649 端口,gmetad 默认每隔 15 秒通过 tcp 连接去该主机下载 xml 文件。所以他们可以是 gmond 的 8649 端口,也可以是 gmetad 的 8651 端口,它们都可以提供集群信息的 xml 格式的数据下载。
host1 host2 是 or 的关系,如果 host1 无法下载,则才会尝试去 host2 下载,所以它们应该都是同一个集群的节点,保存着同样的数据。采用 multicast 模式时,每台 gmond 节点都有本 cluster 内节点机器的所有监控数据,因此不需要把所有节点写入 data_source 中。建议写入不低于 2 个,在 host1 节点死机的时候,会自动找 host2 节点取数据。
此外 gmetad 还有如下的属性设置:
RRD database storage defInition
RRAs “RRA:AVERAGE:0.5:1:244” “RRA:AVERAGE:0.5:24:244” “RRA:AVERAGE:0.5:168:244” “RRA:AVERAGE:0.5:672:244” “RRA:AVERAGE:0.5:5760:374”
RRD files location
访问控制 Access control
trusted_hosts address1 address2 … DN1 DN2 …
all_trusted OFF/on
rrd 保存数据的目录
rrd_rootdir “/var/lib/ganglia/rrds”
Network
xml_port 8651 #可以 telnet 到该端口,得到 gmetad 的 xml 文件
interactive_port 8652 #php 页面数据交互使用的端口
1.2.3 php 页面的配置
需要到 /var/www/html/ganglia/ 目录下查找
php.conf
$gmetad_root = “/var/lib/ganglia”; #gmetad 写入的 rrd 数据库的路径
$rrds = “$gmetad_root/rrds”;
$ganglia_ip = “localhost”; #gmetad 服务器的地址
$ganglia_port = 8652; #gmetad 服务器的交互式提供监控数据端口
默认情况下,web 前端每 300 秒(5 分钟)刷新一次,可以修改刷新间隔时间,通过修改 config.php 文件实现,它里面包括有所有的 Ganglia Web 参数。
1.2.4 ganglia 客户端配置
vi /etc/ganglia/gmond.conf
主要是三个地方需要修改,cluster name,udp_send_channel,udp_recv_channel。注意单播与多播模式的区别,在多播模式下,加入该多播组的节点都会收到组内所有其他节点的数据,所以每个相当于一个备份。单播模式下,只是点到点的发送数据,数据只会发向特定的那个 host,这种模式下通常具有一个中央收集节点。
cluster {
name = “Cluster1” #本节点属于哪个 cluster
owner = “chifeng” #谁是该节点的所有者
latlong = “unspecified” #在地球上的坐标,经度、纬度?
url = “unspecified”
}
udp_send_channel {#udp 包的发送通道
mcast_join = 239.2.11.71 #多播,工作在 239.2.11.71 通道下。如果使用单播模式,则要写 host = host1(接受数据的目标主机),单播模式下也可以配置多个 udp_send_channel
port = 8649 #监听端口
ttl = 1
}
udp_recv_channel {#接收 udp 包配置
mcast_join = 239.2.11.71 #同样工作在 239.2.11.71 通道下,如果使用单播模式,则要写 host = localip,就是必须是本机的 ip
port = 8649 #监听端口
bind = 239.2.11.71 #绑定
}
tcp_accept_channel {
port = 8649 #通过 tcp 协议监听的端口,远端可以通过链接 8649 端口得到监控数据,gmetad 就是通过该端口得到 xml 数据
}
还有其他的一些配置项,通常情况下不需要修改,其含义如下:
Collection_group section:
collect_once – Specifies that the group of static metrics
collect_every – Collection interval (only valid for non-static)
time_threshold – Max data send interval
Metric section:
Name – Metric name (see“gmond –m”)
Value_threshold – Metric variance threshold (send if exceeded)
实例如下:
collection_group {
collect_every = 80
time_threshold = 950
metric {
name = “proc_run”
value_threshold = “1.0”
}
metric {
name = “proc_total”
value_threshold = “1.0”
}
}
1.3 命令集合
说明:命令集合,是指我在安装配置时所使用的那些命令行命令,这些可以作为自动化部署脚步的一个基础。后面可以考虑编写自动化部署的脚步。
服务端:
1) 安装 expat-2.0.1.tar.gz
tar xvzf expat-2.0.1.tar.gz
cd expat*;./configure –prefix=/usr/local/apr;make;make install
2) 安装 confuse-2.6
./configure –prefix=/usr/local/confuse-2.6 CFLAGS=-fPIC –disable-nls;make;make install
3) 安装 apr
tar xvjf apr-1.3.2.tar.bz2
cd apr-1.3.2;./configure –prefix=/usr/local/apr;make;make install
安装 apr-util-1.3.2.tar.bz2
tar xvjf apr-util-1.3.2.tar.bz2
cd apr-util-1.3.2;./configure –with-apr=/usr/local/apr –with-expat=/usr/local/expat
make;make install
cp /usr/local/apr-1.3.2/include/apr-1/* /usr/local/apr-1.3.2/include/ 目录,因为 ganglia 安装时默认会去 /usr/local/apr/include 下寻找 apr 的库文件。
4) 安装 rrdtool-1.2.27.tar.gz
tar xvzf rrdtool-1.2.27.tar.gz
cd rrdtool-1.2.27;./configure –prefix=/usr/local/rrdtool
make;make install
5)cp /usr/local/apr/bin/apr-1* /usr/local/bin/ 拷过这个后 OK 否则会编译出问题
报错如下:
Checking for apr
checking for apr-1-config… no
configure: error: apr-1-config binary not found in pat
6) 安装 ganglia
./configure –with-librrd=/opt/rrdtool-1.4.4 –with-gmetad –prefix=/usr/local/ganglia –with-libconfuse=/usr/local/confuse-2.6
7)make;make install
8) 安装 apache 服务器和 php 支持
yum -y install httpd mysqld php-mysql php
客户端:
wget http://download.fedora.redhat.com/pub/epel/5/x86_64/libconfuse-2.5-4.el5.x86_64.rpm
wget http://download.fedora.redhat.com/pub/epel/5/x86_64/libconfuse-devel-2.5-4.el5.x86_64.rpm
scp apr-*.* 10.250.13.45:~/
scp libconfuse-*.* 10.250.13.45:~/
scp ganglia-*.gz 10.250.13.45:~/
scp ganglia-devel-*.rpm 10.250.13.45:~/
scp *.conf 10.250.13.45:~/
ssh 10.250.13.45
sudo su –
yum install expat
cd /home/admin
tar -xvf apr-1.4.*.gz
cd apr*
./configure –prefix=/usr/local/apr
make
make install
cd ..
tar -xvf apr-util-1.3.9.*
cd apr-util*
./configure –with-apr=/usr/local/apr
make
make install
cd ..
rpm -ivh libconfuse-2.5-4.el5.x86_64.rpm
rpm -ivh libconfuse-devel-2.5-4.el5.x86_64.rpm
tar -xvf ganglia-3.1.*.gz
cd ganglia*
cp /usr/local/apr/bin/apr-1* /usr/local/bin/
./configure –with-apr=/usr/local/apr
find / -name “libpython2.5*”
cp /usr/local/lib/libpython2.5.so /usr/lib/libpython2.5.so
make
make install
cd ..
rpm -ivh ganglia-devel-3.1.1-1.x86_64.rpm –nodeps
cd /etc
mkdir ganglia
cp /home/admin/*.conf /etc/ganglia/
cd /etc/ganglia
vi gmond.conf ;edit udp send and recv host.
vi /usr/local/etc/gmond.conf
gmond –debug=10
ps -e|grep gmond
kill -9 id
gmond
如果必要需要重新修改 gmond.conf
scp test 10.250.13.42:~/
scp test 10.250.13.43:~/
scp test 10.250.13.44:~/
scp test 10.250.13.45:~/
vi /etc/profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:”/usr/local/lib64/”
source /etc/profile
1.4 问题及解决
1.4.1 安装问题
◎缺少库文件,通常在 make 过程中出现该错误,ld 找不到对应的库比如 libpython2.5.so
解决方法:find 命令查找这两个文件,并 ln –s 创建指向这两个文件的软链接引用。find / -name libpython*
◎如果安装过程中出现依赖错误, 通常在 configure 时出现
解决方法:首先利用 find 查找,如果找到可以阅读 readme, 查看是否有参数支持指明该路径。不行考虑拷贝到默认目录,还是不行则可以加入参数—nodeps,然后 download 该 lib,通常包含在其 devel 包里,需要去网上查找包含该 lib 的文件,然后安装。
1.4.2 配置及运行问题
◎测试 gmond 和 gmetad 是否运行成功
Telent localhost 8649
Telent localhost 8651
如果没有反应
解决方法:很可能是因为服务没有启动,或者使用的不是默认端口,ps –e|grep gmond,查找服务是否启动。查看 gmond.conf 看所使用的 tcp recv 端口。
还找不到原因,就可以用调试模式启动查看原因
gmond –debug=10
如果出现 udp 之类的端口绑定错误,比如是已被 bind,则查看是否有端口已被利用 lsof –i:port。
还可能是配置文件配置不正确,比如我曾经将 udp_recv_channel 的 host 修改成与 udp_send_channel 相同的值,就发生了端口错误,udp_recv_channel 的 host 必须是本机的 ip(一个机子可能有多个 ip)。如果是权限禁止,则考虑当前用户身份,或者换成 root 试下。
测试 php 前端支持是否成功
http://localhost/ganglia
◎php 页面显示为文件或者提示下载文件
解决方法:说明 apache 的 php 模块没有安装配置好。使用 yum install 或者重新下载安装 php 模块,并在 apache 的 conf 文件里配置好。
◎显示页面无图象展示
首先检查 selinux 是否关闭
然后查看 conf.php 文件里的 rrdtool 路径是否正确,该文件是否存在,注意该路径是 rrdtool 可执行文件的路径不是其安装目录。
然后查看 /var/lib/ganglia/rrds 是否存在,能否被写。chown nobody:nobody /var/lib/ganglia/rrds # make sure RRDTool can write here.
查看 php.conf 里的 gmetad 的路径地址端口是否正确。
使用 Ganglia 监控 Hadoop 集群 http://www.linuxidc.com/Linux/2012-05/61349.htm
在 VMware Workstation 的 Ubuntu 下安装和配置 Hadoop 与 Ganglia http://www.linuxidc.com/Linux/2013-06/85856.htm
Ganglia 安装部署之一建立 Grid http://www.linuxidc.com/Linux/2013-05/83673.htm
Ganglia 极其简单安装教程 yum 版 http://www.linuxidc.com/Linux/2012-12/76536.htm
Ganglia 快速开始向导(翻译自官方 wiki)http://www.linuxidc.com/Linux/2013-11/92747.htm
CentOS 集群上安装 Ganglia-3.6.0 监控 Hadoop-2.2.0 和 HBase-0.96.0 http://www.linuxidc.com/Linux/2014-01/95804.htm
Ganglia 在 CentOS 6.5 的安装 http://www.linuxidc.com/Linux/2014-05/102024.htm
在 Ubuntu 14.04 Server 上安装 Ganglia http://www.linuxidc.com/Linux/2014-08/105838.htm
更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2015-08/121296p2.htm