分布式ganglia自定义扩展监控及集群环境下的实施

今天和朋友聊起ganglia来,他想做性能分析,一开始选择是zabbix了,后来改成ganglia了,我的回答是 ganglia更适合做这些东西。 好多朋友不会ganglia,甚至没有接触过ganglia,这样我就先简单介绍下ganglia。

与Cacti、Nagios、Zabbix等工具相比,Ganglia 更多地与收集度量数据并随时跟踪这些数据有关,可以用于集群的性能监控、分析和优化。

Ganglia就是这样一种工具。Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测量数以千计的节点。Ganglia主要监控集群的性能指标,如cpu 、mem、硬盘利用率, I/O负载、网络流量情况等, 也可以监控自定义的性能指标。通过Ganglia绘制的曲线很容易见到每个节点的工作状态,对合理调整、分配系统资源,提高系统整体性能起到重要作用。

还有就是ganglia客户端gmond 带来的系统负载非常少,这使得它成为在集群中各台计算机上运行的一段代码,而不会影响用户性能。

上面话有些官方:
我自己的理解是,让ganglia收集性能信息,更好的做服务性能的分析。

ganglia的框架:
213856306
每个被检测的节点或集群运行一个gmond进程,进行监控数据的收集、汇总和发送。gmond即可以作为发送者(收集本机数据),也可以作为接收者(汇总多个节点的数据)。
通常在整个监控体系中只有一个gmetad进程。该进程定期检查所有的gmonds,主动收集数据,并存储在RRD存储引擎中。
ganglia-web是使用php编写的web界面,以图表的方式展现存储在RRD中的数据。通常与gmetad进程运行在一起。

对于ganglia分布式的理解,可以看下面的图~
122521672
在安装前先说明下,ganglia的安装会遇见各种各样的问题的,遇到问题可以搜,也可以找我问的。
要是大家没有这个耐心,可以先用ubuntu跑一个
在Ubuntu上安装Ganglia非常简单,首先安装下面三个包。因为要使用Web服务器才能看到图表,所以如果没有安装apache的话,会自动安装apache服务器。

sudo apt-get install ganglia-monitor ganglia-webfront

安装完成之后,gmetad和gmond两个服务会运行起来,使用下面的命令可以启动这两个服务。

sudo service gmetad start
sudo service ganglia-monitor start
sudo mv /usr/share/ganglia-webfrontend/ /var/www/ganglia

然后访问就行了!!!

下面是centos的安装过程 ~
#基础的开发包

yum -y install ntp make openssl openssl-devel pcre pcre-devel libpng
libpng-devel libjpeg-6b libjpeg-devel-6b freetype freetype-devel gd gd-devel zlib zlib-devel
gcc gcc-c++ libXpm libXpm-devel ncurses ncurses-devel libmcrypt libmcrypt-devel libxml2
libxml2-devel imake autoconf automake screen sysstat compat-libstdc++-33 curl curl-devel

#安装lamp环境:

yum -y install httpd mysql mysql-server mysql-connector-odbc php php-mysql php-common php-pdo apr apr-util* pcre pcre-devel
wget ftp://ftp.univie.ac.at/systems/linux/dag/redhat/el5/en/x86_64/dag/RPMS/libconfuse-2.6-2.el5.rf.x86_64.rpm
wget ftp://ftp.univie.ac.at/systems/linux/dag/redhat/el5/en/x86_64/dag/RPMS/libconfuse-devel-2.6-2.el5.rf.x86_64.rpm
rpm -ivh libconfuse*.rpm

#安装绘图工具:rrdtool

cd /root/tools
wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.4.5.tar.gz
tar zvxf rrdtool-1.4.5.tar.gz
cd rrdtool-1.4.5
./configure –prefix=/usr/local/rrdtool
make && make install
cd ..

#推荐大家直接用

yum -y install rrdtool
ln -s /usr/local/rrdtool/include/rrd.h /usr/include/rrd.h
ln -s /usr/local/rrdtool/lib/librrd.a /usr/lib/librrd.a

#大家也可以用yum的安装方法,yum的话,相对简单了很多 !!!epel源的ganglia是3.1的版本,要是想要最新的可以源码的安装
#安装ganglia

wget http://cdnetworks-kr-2.dl.sourceforge.net/project/ganglia/ganglia%20monitoring%20core/3.2.0/ganglia-3.2.0.tar.gz
tar zxvf ganglia-3.2.0.tar.gz
cd ganglia-3.2.0
./configure –prefix=/usr/local/ganglia –sysconfdir=/usr/local/ganglia –with-gmetad
make && make install
cd ..

客户端的安装就简单了~

./configure
make
make install

#这样就行了,要是有报错,大家搜搜问题所在
#网站目录

cd /root/tools/ganglia-3.2.0
cp -Rf web /var/www/html/ganglia
chown -R apache.apache /var/www/html/ganglia

#修改RRDTOOL的路径:
vi /var/www/html/ganglia/conf.php
修改约33行成如下:
which rrdtool看看rrdtool的位置是在那里
33 define("RRDTOOL", "/usr/local/rrdtool/bin/rrdtool");

#生成启动程序

cp gmetad/gmetad.init /etc/rc.d/init.d/gmetad
cp gmond/gmond.init /etc/rc.d/init.d/gmond

#开机自启动

chkconfig gmetad on
chkconfig gmond on

#被监控端的配置文件

gmond/gmond -t | tee /usr/local/ganglia/gmond.conf

#生成服务器端的配置文件

cp gmetad/gmetad.conf /usr/local/ganglia/

#存放rrdtool数据的目录

mkdir -p /var/lib/ganglia/rrds
mkdir -p /var/lib/ganglia/dwoo/
chown apache:apache /var/lib/ganglia/dwoo
chown apache:apache /var/lib/ganglia/rrds

gmetad.conf是服务器端的配置文件,其中里面最重要的参数是data_source,他是来定义被监控端的。例如:data_source "db1" 10.10.10.73

db1表示集群的名字,后面的ip是是被监控端的ip。Ok,这时候服务器端就可以启动了。
vim gmond.conf

cluster{
name= “db1”
owner= “unspecified”
latlong = “unspecified”
url =”unspecified”
}

启动gmetad

/etc/init.d/gmetad start

启动客户端。
修改/etc/init.d/gmond

把GMOND=/usr/sbin/gmond
修改为GMOND=/usr/local/ganglia/sbin/gmond

/etc/init.d/gmond start

启动apache.

service httpd start

访问http://服务器ip/ganglia

我这边因为服务器本身跑着跑着tornado,所有我把80改成8080啦。
我们用浏览器访问下,最好用firefox chrome,用ie莫名的提示js的问题。
215013919
其实我今天主要想讲自定义监控,以及模板的使用,估计好多人不用ganglia,所以就先说的安装和配置。
在安装过程中,会遇见各种各样的问题,碰到问题google下,一般是没有问题的。国外用ganglia的还真不少。
好,现在开始扯淡自定义监控:
215558410
这个命令跑了后,会在web界面能看到咱们添加的testno3这个数据图表了。
215702153
ganglia可以到处json的数据,而不用自己从rrdtool里面搞出来,然后封装json string
221038471

gmetric -n testno3 -v 11 -t int32 -u '% nima'  -S '10.10.10.73:web'

-n '指标名' 在web界面能看到的
-v 指标值 这个就是咱们能看到的数据
-t 数据类型 一般来说都是用int32 数值
-u '单位' 图表左面能看到的表题
-d 指标的存活时间
-c 指定ganglia配置文件
-S伪装客户端信息10.10.10.73代表ip地址,web代表主机名。

221246799
ganglia的发展超不错的,国内的规模上千台服务器以上的互联网公司都有用ganglia,尤其是云计算中的hadoop集群,说实话,还没见过用别的监控系统来监控hadoop性能数据的。

ganglia的社区还是很热的,他又是python写的,所以更适合咱们以后扩展了。
常见的监控,ganglia在github开源的监控组件已经都有了
https://github.com/ganglia/gmond_python_modules

这些东西用起来很简单的~ 他的导入要在终端下进行的,官方也没有提供ganglia的web管理平台。这让人有点郁闷。
把git里的东西clone下来,然后搞起 ~
将python_modules/目录下的文件复制到gmond节点的/usr/lib64/ganglia/python_modules目录。这是执行数据采集的脚本
将conf.d/目录下的文件复制到gmond节点的/etc/ganglia/conf.d/目录。这些文件定义了collection_group以及metric
重启gmond
将graph.d/目录下的文件复制到gmetad节点的/usr/share/ganglia/graph.d目录。这些文件定义了如何绘制metric的图形
重启gmetad,就可以看到我们需要的图表了
225947769
需要注意的是,你的配置文件里面的url要能访问nginx_status页面得到数据。
230112387
gmond是一个守护进程,运行在主机上,并在TCP的8649端口侦听。远程主机可以通过8649端口获取以xml文件格式显示的各项主机的性能参数。

telnet localhost 8649 > 123.txt

能看到他的收集到的信息。

Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<!DOCTYPE GANGLIA_XML [
   <!ELEMENT GANGLIA_XML (GRID|CLUSTER|HOST)*>
      <!ATTLIST GANGLIA_XML VERSION CDATA #REQUIRED>
      <!ATTLIST GANGLIA_XML SOURCE CDATA #REQUIRED>
   <!ELEMENT GRID (CLUSTER | GRID | HOSTS | METRICS)*>
      <!ATTLIST GRID NAME CDATA #REQUIRED>
      <!ATTLIST GRID AUTHORITY CDATA #REQUIRED>
      <!ATTLIST GRID LOCALTIME CDATA #IMPLIED>
   <!ELEMENT CLUSTER (HOST | HOSTS | METRICS)*>
      <!ATTLIST CLUSTER NAME CDATA #REQUIRED>
      <!ATTLIST CLUSTER OWNER CDATA #IMPLIED>
      <!ATTLIST CLUSTER LATLONG CDATA #IMPLIED>
      <!ATTLIST CLUSTER URL CDATA #IMPLIED>
      <!ATTLIST CLUSTER LOCALTIME CDATA #REQUIRED>
   <!ELEMENT HOST (METRIC)*>
      <!ATTLIST HOST NAME CDATA #REQUIRED>
      <!ATTLIST HOST IP CDATA #REQUIRED>
      <!ATTLIST HOST LOCATION CDATA #IMPLIED>
      <!ATTLIST HOST REPORTED CDATA #REQUIRED>
      <!ATTLIST HOST TN CDATA #IMPLIED>
      <!ATTLIST HOST TMAX CDATA #IMPLIED>
      <!ATTLIST HOST DMAX CDATA #IMPLIED>
      <!ATTLIST HOST GMOND_STARTED CDATA #IMPLIED>
   <!ELEMENT METRIC (EXTRA_DATA*)>
      <!ATTLIST METRIC NAME CDATA #REQUIRED>
      <!ATTLIST METRIC VAL CDATA #REQUIRED>
      <!ATTLIST METRIC TYPE (string | int8 | uint8 | int16 | uint16 | int32 | uint32 | float | double | timestamp) #REQUIRED>
      <!ATTLIST METRIC UNITS CDATA #IMPLIED>
      <!ATTLIST METRIC TN CDATA #IMPLIED>
      <!ATTLIST METRIC TMAX CDATA #IMPLIED>
      <!ATTLIST METRIC DMAX CDATA #IMPLIED>

太多了。。。。

咱们可以把信息收集到的信息,存放到mysql,mongodb里面。ganglia的数据是放到rrdtool里面的,咱们从里面拿数据,是要解析rrdtool文件的,看图多的时候,明显感觉有点慢的。咱们可以把这些个数据存入到数据库里面,做从集群啥的,啥样解析就不会有麻烦了。

至于集群的管理,大家可以试试saltstack,这个集群管理工具也是我在博客中常常提到的。
开启,关闭 可以用模块
安装的话,也可以自己写成一个模块
脚本的传送,这个用salt的file资源

总结下哈:
有朋友说ganglia不能做报警,他是可以做的,和nagios结合在一起的。有时间咱们再搞搞~还是感叹下 ganglia真是个好东西,他的监控的项目很全面,扩展也很全面,是性能监控分析的利器。他默认的监控项目很是详细。我公司也用ganglia的,主要是监控视频,cdn,hadoop,cloudstack项目。前面有说过,1000台以上规模的公司,都有用ganglia,我所接触的圈子都在用的。
有朋友问我 ganglia和graphite的区别 !!!

graphite 和 ganglia都是做性能监控分析的,还都是python写的。
用的是相似的东西和框架模型,web一个是django,一个是ganglia
对我来说,graphite更多的是做业务的数据,当然也可以做系统性能,但是模块不丰富,更多的是要自己写。ganglia不仅做系统性能图表,github上的模块丰富,也可以做详细的业务数据收集。

要是说有大的区别,那就能说 ganglia就是为集群监控而生的, 操作简单干练。大家的服务器都在各个机房,用graphite的话,需要把每个数据发送到server端。用ganglia的话,只需要把每个机房配置一个集群,然后从每个机房只是连接一个gmode就行了,集群内部自己是多播,所以每个服务器都是有其他人的数据的。 这个就是ganglia的分布式的概念。

还没有评论,快来抢沙发!

发表评论

  • 😉
  • 😐
  • 😡
  • 😈
  • 🙂
  • 😯
  • 🙁
  • 🙄
  • 😛
  • 😳
  • 😮
  • emoji-mrgree
  • 😆
  • 💡
  • 😀
  • 👿
  • 😥
  • 😎
  • ➡
  • 😕
  • ❓
  • ❗
  • 73 queries in 0.450 seconds