linux下ganglia监控系统搭建

manquyuan00 2010-11-09

Ganglia监控软件主要是用来监控系统性能的软件,如:cpu、mem、硬盘利用率,I/O负载、网络流量情况等,通过曲线很容易见到每个节点的工作状态,对合理调整、分配系统资源,提高系统整体性能起到重要作用。支持浏览器方式访问,但不能监控节点硬件技术指标,ganglia是分布式的监控系统,有两个Daemon,分别是:客户端GangliaMonitoringDaemon(gmond)和服务端GangliaMetaDaemon(gmetad),还有GangliaPHPWebFrontend(基于web的动态访问方式)组成。是一个Linux下图形化监控系统运行性能的软件,界面美观、丰富,功能强大。RRDtool是系统存放和显示time-series(即网络带宽、温度、人数、服务器负载等)。并且它提出有用的图表由处理数据强制执行有些数据密度。

Ganglia是UCBerkeley发起的一个开源监视项目,设计用于测量数以千计的节点。每台计算机都运行一个收集和发送度量数据(如处理器速度、内存使用量等)的名为gmond的守护进程。它将从操作系统和指定主机中收集。接收所有度量数据的主机可以显示这些数据并且可以将这些数据的精简表单传递到层次结构中。正因为有这种层次结构模式,才使得Ganglia可以实现良好的扩展。gmond带来的系统负载非常少,这使得它成为在集群中各台计算机上运行的一段代码,而不会影响用户性能。

--------------------------------------------------------------------------------

1、lap(linux+apache+php)(略)

2、需要的软件包

通过yum源安装,系统光盘就有:

引用

yum-yinstallapr-develapr-utilcheck-develcairo-develpango-devellibxml2-develrpmbuildglib2-develdbus-develfreetype-develfontconfig-develgcc-c++expat-develpython-devellibXrender-devel

3、安装libconfuse

32位os下载:

引用

wgethttp://download.fedora.redhat.com/pub/epel/5/i386/libconfuse-2.5-4.el5.i386.rpm

wgethttp://download.fedora.redhat.com/pub/epel/5/i386/libconfuse-devel-2.5-4.el5.i386.rpm

64位os下载:

引用

wgethttp://download.fedora.redhat.com/pub/epel/5/x86_64/libconfuse-2.5-4.el5.x86_64.rpm

wgethttp://download.fedora.redhat.com/pub/epel/5/x86_64/libconfuse-devel-2.5-4.el5.x86_64.rpm

安装

引用

rpm–ivhlibconfuse-2.5-4.el5.i386.rpmlibconfuse-devel-2.5-4.el5.i386.rpm

4、安装RRDTool

引用

wgethttp://oss.oetiker.ch/rrdtool/pub/rrdtool.tar.gz

tarzxvfrrdtool*

cdrrdtool-*

./configure--prefix=/usr

make

makeinstall

5、安装ganglia

到http://ganglia.info网站下载最新版的ganglia,这里以3.1.2版为例

这里编译安装的时候需要注意:

安装之前用以下命令检查有没有rrd.h和librrd.a文件:

引用

ll/usr/include/rrd.h

ll/usr/lib/librrd.a

如果存在以上两个文件,则继续安装否则使用find命令查找这两个文件,并创建指向这两个文件的软链接

引用

find/-namerrd.h

find/-namelibrrd.a

比如说你找到的文件在/usr/local/下,则:

引用

ln-s/usr/local/rrd.h/usr/include/rrd.h

ln-s/usr/local/librrd.a/usr/lib/librrd.a

安装:

引用

tar–zxvfganglia-3.1.2.tar.gz

cdganglia-3.1.2.tar.gz

./configure--with-gmetad

make

makeinstall

如果安装过程中出现读取相关lib文件读取错误,请在/usr/lib(32os)或/usr/lib64下查找是否存在该lib文件,如果不存在,查找该文件并在/usr/lib(32os)或/usr/lib64创建指向该lib文件的软链接。

6、配置ganglia

step1、处理命令行文件

引用

cd/tmp/ganglia-3.1.2///假设你的ganglia在此目录

mkdir-p/var/www/html/ganglia///创建网站主目录下ganglia文件夹,用来访问ganglia

cp-aweb/*/var/www/html/ganglia///拷贝ganglia网站代码到该目录

cpgmetad/gmetad.init/etc/rc.d/init.d/gmetad//拷贝gmetad服务启动脚本

cpgmond/gmond.init/etc/rc.d/init.d/gmond//拷贝gmond服务启动脚本

mkdir/etc/ganglia//创建配置文件主目录

gmond-t|tee/etc/ganglia/gmond.conf//生成gmond服务配置文件

cpgmetad/gmetad.conf/etc/ganglia///拷贝gmetad服务配置文件

mkdir-p/var/lib/ganglia/rrds//创建rrd文件存放目录

chownnobody:nobody/var/lib/ganglia/rrds//属主和属组都为nobody

chkconfig--addgmetad//将服务交给chkconfig管理

chkconfig--addgmond//同上

step2、修改/etc/ganglia/gmond.conf

引用

vi/etc/ganglia/gmond.conf//修改以下字段

cluster{

name="clustername"//你要监控的集群名,一般我们只改这一项,可以是任意值

owner="unspecified"

latlong="unspecified"

url="unspecified"

}

step3、关于两块网卡服务器的设置

如果你的服务器有两块网卡,eth0使用公网地址,eth1使用局域网地址,而你的监控服务器和被监控服务器之间的通信你希望通过局域网地址实现以减少公网网卡的负载,那么可以使用以下命令:

引用

iprouteadd239.2.11.71deveth1

因为239.2.11.71是ganglia默认的多点传输通道,所以要加一条路由使它通过eth1,也就是内网网卡,239.2.11.71这个地址你可以在/etc/ganglia/gmond.conf中修改

step4、启动服务

引用

servicegmondstart

servicegmetadstart

servicehttpdrestart

这时服务端的配置已经结束,通过网页http://You_IP/ganglia已经可以访问,并且可以监控到监控服务器的信息。

7、客户端的配置

在监控服务器编写一个脚本文件,执行它可以将服务快速的发布到被监控主机上

step1、首先编写一个主机地址文件:

引用

vimynodes

添加你的主机名或服务器ip到该文件,我这里只写了5台主机

引用

192.168.10.1

192.168.10.2

192.168.10.3

192.168.10.4

192.168.10.5

step2、编写脚本实现服务的发布

引用

viganglia.sh

使用以下内容,这里使用的是64位OS,如果是32位OS,将下面的lib64改为lib

引用

foriin`catmynodes`;do

scp/usr/bin/gmetric$i:/usr/bin

scp/usr/sbin/gmond$i:/usr/sbin/gmond

ssh$imkdir-p/etc/ganglia/

scp/etc/ganglia/gmond.conf$i:/etc/ganglia/

scp/etc/init.d/gmond$i:/etc/init.d/

scp/usr/lib64/libganglia-3.1.2.so.0$i:/usr/lib64/

scp/lib64/libexpat.so.0$i:/lib64/

scp/usr/lib64/libconfuse.so.0$i:/usr/lib64/

scp/usr/lib64/libapr-1.so.0$i:/usr/lib64/

scp-r/usr/lib64/ganglia$i:/usr/lib64/

ssh$iservicegmondstart

done

step3、赋予脚本可执行权限并执行

引用

chmod755ganglia.sh

./ganglia.sh

至此ganglia客户端和服务器端的配置完成,可以通过web访问来监控你的群集了

8、使用gmetric定制你自己要监控的信息

step1、在使用gmetric前要确定自己被监控服务器有gmetric

引用

ll/usr/bin/gmetric

如果没有,通过scp从监控服务器拷贝

引用

[email protected]:/usr/bin/gmetric/usr/bin///假设你的监控服务器为192.168.10.100

step2、定制你自己的脚本,执行,并且将结果返回监控服务器

你可以在http://ganglia.info/gmetric/找到很多别人共享的脚本,以下是一个监控memcache服务的脚本:

引用

vi/root/mcd_gmetric.sh//以下内容

#!/bin/bash

###$Id:mcd_gmetric.sh166612006-11-0700:56:33Zben$

###Thisscriptqueriesamemcachedserverrunning

###onlocalhostandreportsafewstatisticsto

###ganglia.

###Itreports

###*mcd_curr_items-thenumberofobjectsstored

###*mcd_curr_bytes-currentbytesused

###*mcd_curr_conns-currentnumberofconnections

###*mcd_hit_perc-hits/getsforcurrenttimeduration

###(currenthitpercentage)

###Formoredescriptiononanyofthesemetrics,

###seetheprotocols.txtfileintheMCDdocs.

###CopyrightSimplyHired,Inc.2006

###Licensetouse,modify,anddistributeundertheGPL

###http://www.gnu.org/licenses/gpl.txt

VERSION=1.0

GMETRIC="/usr/bin/gmetric"

GMETRIC_ARGS="-c/etc/ganglia/gmond.conf"

STATEFILE="/var/lib/ganglia/metrics/mcd.stats"

ERROR_NOTROOT="/tmp/mcd_gmetric_notroot"

ERROR_CANT_CONNECT="/tmp/mcd_gmetric_cant_connect"

ERROR_CREATE="/tmp/mcd_gmetric_create_statefile_failed"

ERROR_GETS_EMPTY="/tmp/mcd_gets_empty"

MCD_CONF="/etc/sysconfig/memcached"

#getsystemconfiguration

if[-e${MCD_CONF}]

then

source${MCD_CONF}

MCD_PORT=${PORT}

fi

MCD_PORT=${MCD_PORT:-11211}

date=`date+%s`

if[$UID-ne0]

then

if[-e$ERROR_NOTROOT];thenexit1;fi

echo"Error:thisscriptmustberunasroot."

touch$ERROR_NOTROOT

exit1

fi

rm-f$ERROR_NOTROOT

if["x$1"=="x-h"]

then

echo"Usage:mcd_gmetric.sh[--clean]"

echo"--cleandeletealltmpfiles"

exit0

fi

if["x$1"=="x--clean"]

then

rm-f$STATEFILE$ERROR_NOTROOT$ERROR_CANT_CONNECT$ERROR_CREATE

retval=$?

if[$retval-ne0]

then

echo"failedtocleanup."

exit1

else

echo"Allcleanedup."

exit0

fi

fi

#iftheGMETRICprogramisn'tinstalled,compain

if[!-e$GMETRIC]

then

if[-e$ERROR_GMETRIC];thenexit1;fi

echo""

echo"Error:GMETRICdoesn'tseemtobeinstalled."

echo"$GMETRICdoesn'texist."

echo""

touch$ERROR_GMETRIC

exit1

fi

#getcurrentstatistics

exec3>&2#turnoffSTDERR

exec2>/dev/null

stats_array=(`echo"stats"|nclocalhost$MCD_PORT`)

retval=$?

exec2>&1#turnonSTDERR

exec3>&-

if[$retval-ne0]

then

if[-e$ERROR_CANT_CONNECT];thenexit1;fi

echo"Ican'tconnecttomcd."

echo"Bummer."

touch$ERROR_CANT_CONNECT

exit1

fi

mcd_curr_items=`echo${stats_array[23]}|tr-c-d[0-9]`#thistrthingisbecausethere'satrailing^Monthestringfromnetcatthatbreaksbc.

mcd_curr_bytes=`echo${stats_array[29]}|tr-c-d[0-9]`

mcd_curr_conns=`echo${stats_array[32]}|tr-c-d[0-9]`

mcd_total_gets=`echo${stats_array[41]}|tr-c-d[0-9]`

mcd_total_sets=`echo${stats_array[44]}|tr-c-d[0-9]`

mcd_total_hits=`echo${stats_array[47]}|tr-c-d[0-9]`

if[-z"$mcd_total_gets"]

then

#thisactuallyhappensratheroftenforsomereason,soI'mjustgoingtofailsilently.

#if[-e$ERROR_GETS_EMPTY];thenexit1;fi

#echo""

#echo"ERROR:mcd_total_getsempty."

#echo""

exit1

fi

rm-f$ERROR_GETS_EMPTY

#saveandturnoff/STDERRforthestatefiletests

exec3>&2

exec2>/dev/null

#ifthestatefiledoesn'texist,weeitherhavn't

#runyetorthere'ssomethingbiggerwrong.

if[!-e$STATEFILE]

then

if[!-d`dirname$STATEFILE`]

then

mkdir-p`dirname$STATEFILE`

fi

echo"$date$mcd_curr_items$mcd_curr_bytes$mcd_curr_conns$mcd_total_gets$mcd_total_sets$mcd_total_hits">$STATEFILE

if[!-e$STATEFILE]

then

#ifitdidn'texistandwecouldn'tcreate

#it,weshouldjustscreambloodymurderanddie.

#onlyscreamoncethough...

if[-e$ERROR_CREATE]

then

exit1

fi

echo""

echo"ERROR:couldn'tcreate$STATEFILE"

echo""

touch$ERROR_CREATE

exit1

fi

echo"Createdstatefile.Exitting."

exit0

fi

#restorestderr

exec2>&3

exec3>&-

old_stats_array=(`cat$STATEFILE`)

old_date=${old_stats_array[0]}

old_mcd_curr_items=${old_stats_array[1]}

old_mcd_curr_bytes=${old_stats_array[2]}

old_mcd_curr_conns=${old_stats_array[3]}

old_mcd_total_gets=${old_stats_array[4]}

old_mcd_total_sets=${old_stats_array[5]}

old_mcd_total_hits=${old_stats_array[6]}

echo"$date$mcd_curr_items$mcd_curr_bytes$mcd_curr_conns$mcd_total_gets$mcd_total_sets$mcd_total_hits">$STATEFILE

time_diff=$(($date-$old_date))

mcd_total_gets_diff=$(($mcd_total_gets-$old_mcd_total_gets))

mcd_total_sets_diff=$(($mcd_total_sets-$old_mcd_total_sets))

mcd_total_hits_diff=$(($mcd_total_hits-$old_mcd_total_hits))

if[$time_diff-eq0]

then

if[-e$ERROR_TIMEDIFF];thenexit1;fi

echo"somethingisbroken."

echo"time_diffis0."

touch$ERROR_TIMEDIFF

exit1

fi

#noneofthesenumbersshouldbelessthan1,butiftheyare,justsendback1.

if[$mcd_total_gets_diff-le1];thenmcd_total_gets_diff=1;fi

if[$mcd_total_sets_diff-le1];thenmcd_total_sets_diff=1;fi

if[$mcd_total_hits_diff-le1];thenmcd_total_hits_diff=1;fi

mcd_gets_per_sec=`echo"scale=3;${mcd_total_gets_diff}/${time_diff}"|bc`

mcd_sets_per_sec=`echo"scale=3;${mcd_total_sets_diff}/${time_diff}"|bc`

mcd_hits_per_sec=`echo"scale=3;${mcd_total_hits_diff}/${time_diff}"|bc`

mcd_hit_perc=`echo"scale=3;${mcd_total_hits_diff}*100/${mcd_total_gets_diff}"|bc`

$GMETRIC$GMETRIC_ARGS--name="mcd_seconds_measured"--value=${time_diff}--type=uint32--units="secs"

$GMETRIC$GMETRIC_ARGS--name="mcd_items_cached"--value=${mcd_curr_items}--type=uint32--units="items"

$GMETRIC$GMETRIC_ARGS--name="mcd_bytes_used"--value=${mcd_curr_bytes}--type=uint32--units="bytes"

$GMETRIC$GMETRIC_ARGS--name="mcd_conns"--value=${mcd_curr_conns}--type=uint32--units="connections"

$GMETRIC$GMETRIC_ARGS--name="mcd_gets"--value=${mcd_gets_per_sec}--type=float--units="gps"

$GMETRIC$GMETRIC_ARGS--name="mcd_sets"--value=${mcd_sets_per_sec}--type=float--units="sps"

$GMETRIC$GMETRIC_ARGS--name="mcd_cache_hits"--value=${mcd_hits_per_sec}--type=float--units="hps"

$GMETRIC$GMETRIC_ARGS--name="mcd_cache_hit%"--value=${mcd_hit_perc}--type=float--units="%"

赋予脚本可执行权限并执行:

引用

chmod755mcd_gmetric.sh

./mcd_gmetric.sh

这时已经将结果通过gmetric返回到监控服务器,在服务器该主机的信息中已经可以看到memcached服务的相关信息了

将这个服务添加到crontab

引用

crontab-e

/1****/root/mcd_gmetric.sh//设置每分钟将结果返回监控服务器

参考文档:

http://www.ibm.com/developerworks/cn/linux/l-ganglia-nagios-1/

http://idcnews.net/html/edu/20070101/288092.html

http://blog.csdn.net/Tobeabetterman_He/archive/2006/12/13/1441516.aspx

原文地址http://laijiang.cublog.cn

相关推荐

wangjunyi / 0评论 2012-06-27