主要功能在复杂爬虫中监控环境是否正常 一、ganglia简介 1.1 ganglia介绍 ganglia是一款为HPC(高性能计算)集群设计的可扩展性的分布式监控系统,它可以监视和显示集群中节点的各种状态信息,他由运行在各个节点上的gmond守护进程来采集CPU、内存、磁盘利用率、I/O负载、网络流量情况等方面的数据。然后汇总到gmetad守护进程下,使用rrdtool存储数据,然后将历史数据以曲线方式通过PHP页面呈现。 ganglia自带了很多监控项,详细的比较详细,等后面搭建成功后,可以从截图中看出。ganglia相关的PDF书和资料还是较少的。 1.2 ganglia三大组件 gmond: gmond类似于传统监控系统中的代理,需要安装在每台主机上,负责和操作系统交互以获得需要关注的指标数据。 gmond再内部采用模块化设计,采用基于C语言编写、根据操作系统定制的插件进行监控。gmond为指标提供了大部分标准插件,而且可以增加更多的用C、C++或Python等语言编写的插件来支持新的指标。此外,内置的gmetric工具可以用来报告用任何语言编译的自定义指标数据。 gmond根据自身本地配置文件定义的调度方案进行轮询。监听数据时使用简单的监听/通告协议,通过XDR在集群内的主机之间共享。这些通告默认使用多播,而集群是由共享同一多播地址的主机所构成的。当然gmond也可以使用单播,将数据都汇聚到同一台中心节点。 因为每台gmond主机将指标数据多播到集群内的其他主机,每台gmond主机也记录了集群内其他主机的指标数据。远程轮询器通过默认的8649端口,向集群内任意节点请求获得该集群XML格式的所有数据。 如果服务器主机过多,因为只要轮询集群中任意节点就能获取所有集群内其他主机的性能指标数据,所以我们可以将众多的主机划分到不同的组里面,这样一来,收集数据的工作量将得到大大的减轻。 gmetad: 主要作用就是整合所有信息。 gmetad是一个简单的轮询器,对网络中每个集群进行轮询,并将每台主机上返回的所有指标数据写入各个集群对应的轮询数据库。轮询器对集群的"轮询"只需要打开一个用于读取的套接字,连接到目标gmond节点的8649端口即可,通过远程非常容易实现。 gmetad还有一些其他特性,如可以从其他的gmetad中轮询数据,gmetad通过tcp端口8651侦听远程gmetad连接,并且向授权主机提供XML格式的网格状态。从而构成一种联合层次结构。gmetad具有交互式查询功能,外部监控系统可以通过TCP 8652端口用简单文本协议进行轮询。gmetad也可以通过配置gmetad将指标数据转送到诸如Graphite外部系统发送数据。 gmetad默认将指标数据直接写入文件系统上的RRD文件,在有I/O限制的大型装置中,rrdcached充当gmetad和RRD文件之间的缓存。 gweb: ganglia可视化工具。显示ganglia收集的主机各项指标。 gweb允许在图标中通过点击-拖拽改变时间周期,包含从不同文本格式(CSV,JSON等)中便捷提供数据的工具,显示完整、使用的URL接口,使用户可以通过预知的URL将感兴趣的图表嵌入其他程序。 gweb是一种PHP程序,因为需要与轮询器创建的RRD数据库交互,所以gweb通常安装在和gmetad相同的物理硬件上。 二、Ganglia测试集群rpm包方式环境部署 2.1 服务端的安装 ganglia的官网:http://ganglia.info 下载链接:http://ganglia.info/?page_id=66 第一步:yum安装相关软件包组 # yum -y install apr-devel apr-util check-devel cairo-devel pango-devel libxml2-devel rpm-build glib2-devel dbus-devel freetype-devel fontconfig-devel gcc gcc-c++ expat-devel python-devel libXrender-devel # yum install -y libart_lgpl-devel pcre-devel libtool # yum install -y rrdtool rrdtool-devel 第二步:安装gmetad 先要制作一个最简单的epel第三方yum安装配置: # cat /etc/yum.repos.d/epel.repo [epel] name=CentOS-$releasever - Epel baseurl=http://dl.fedoraproject.org/pub/epel/$releasever/$basearch/ gpgcheck=0 # yum install libconfuse libconfuse-devel -y # cd /tools/ #wgethttps://sourceforge.net/projects/ganglia/files/ganglia%20monitoring%20core/3.7.2/ganglia-3.7.2.tar.gz #tar zxf ganglia-3.7.2.tar.gz [root@localhost ganglia-3.7.2]# ls -l ganglia.spec #因为有这个ganglia.spec,所以说是支持rpm安装的 -rw-r--r--. 1 1000 1000 23494 7月 2 2015 ganglia.spec # rpmbuild -tb /tools/ganglia-3.7.2.tar.gz #-tb表示从tar包中build二进制文件 # cd /root/rpmbuild/RPMS/x86_64/ [root@localhost x86_64]# ll 总用量 824 -rw-r--r--. 1 root root 434360 1月 9 18:49 ganglia-debuginfo-3.7.2-1.x86_64.rpm -rw-r--r--. 1 root root 49136 1月 9 18:49 ganglia-devel-3.7.2-1.x86_64.rpm -rw-r--r--. 1 root root 56228 1月 9 18:49 ganglia-gmetad-3.7.2-1.x86_64.rpm -rw-r--r--. 1 root root 119048 1月 9 18:49 ganglia-gmond-3.7.2-1.x86_64.rpm -rw-r--r--. 1 root root 128120 1月 9 18:49 ganglia-gmond-modules-python-3.7.2-1.x86_64.rpm -rw-r--r--. 1 root root 42756 1月 9 18:49 libganglia-3.7.2-1.x86_64.rpm # rpm -ivh /root/rpmbuild/RPMS/x86_64/* Preparing... ########################################### [100%] 1:libganglia ########################################### [ 17%] 2:ganglia-gmond ########################################### [ 33%] 3:ganglia-gmond-modules-p########################################### [ 50%] 4:ganglia-devel ########################################### [ 67%] 5:ganglia-gmetad ########################################### [ 83%] 6:ganglia-debuginfo ########################################### [100%] 这样以rpm包安装之后: /etc/ganglia/ #为主配置文件目录 /var/lib/ganglia/rrds #为rrds图信息存储目录 # rpm -ql ganglia-gmetad-3.7.2-1 #如:通过这个命令也可以看出,gmetad的rpm包相关的目录 /etc/ganglia/gmetad.conf /etc/init.d/gmetad /etc/sysconfig/gmetad /usr/sbin/gmetad /usr/share/man/man1/gmetad.1.gz /usr/share/man/man1/gmetad.py.1.gz /var/lib/ganglia /var/lib/ganglia/rrds 第三步:安装gweb # yum install httpd httpd-devel php -y # yum -y install rsync # cd /tools/ # wget https://sourceforge.net/projects/ganglia/files/ganglia-web/3.7.2/ganglia-web-3.7.2.tar.gz # tar zxf /tools/ganglia-web-3.7.2.tar.gz -C /var/www/html/ # cd /var/www/html/ # mv ganglia-web-3.7.2 ganglia # cd /var/www/html/ganglia/ # make install #执行这步,会创建相关的目录 第四步:启动相关服务并查看效果 # /etc/init.d/gmond restart # /etc/init.d/gmetad restart # /etc/init.d/httpd restart # netstat -lntup #查看状态 Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:8649 0.0.0.0:* LISTEN 14639/gmond #gmond默认是8649端口 tcp 0 0 0.0.0.0:8651 0.0.0.0:* LISTEN 14747/gmetad #gmetad启两个端口 tcp 0 0 0.0.0.0:8652 0.0.0.0:* LISTEN 14747/gmetad tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1351/sshd tcp 0 0 :::80 :::* LISTEN 14472/httpd tcp 0 0 :::22 :::* LISTEN 1351/sshd udp 0 0 239.2.11.71:8649 0.0.0.0:* 14639/gmond #默认是组播形式 访问url:http://192.168.1.101/ganglia/ 2.2 gmond 节点的安装 #yum -y install apr-devel apr-util check-devel cairo-devel pango-devel libxml2-devel rpm-build glib2-devel dbus-devel freetype-devel fontconfig-devel gcc gcc-c++ expat-devel python-devel libXrender-devel # yum install libconfuse libconfuse-devel -y 需要下面四个rpm包:发送到其他客户端上面,rpm -ivh *一下就好 ganglia-devel-3.7.2-1.x86_64.rpm ganglia-gmond-3.7.2-1.x86_64.rpm ganglia-gmond-modules-python-3.7.2-1.x86_64.rpm libganglia-3.7.2-1.x86_64.rpm # /etc/init.d/gmond #启动gmond服务便可,因为默认配置就是一个组播组,组播地址和端口都是统一的。 =========================分割线========================================================================================== 注一: 访问url:http://192.168.1.101/ganglia/ ,如果没做# cd /var/www/html/ganglia/ && make install的话会报下面的错误: Fatal error: Errors were detected in your configuration. Unable to create directory for overlay events file: /var/lib/ganglia-web/conf Unable to create overlay events file: /var/lib/ganglia-web/conf/events.json Unable to create directory for event color map file: /var/lib/ganglia-web/conf Unable to create event color map file: /var/lib/ganglia-web/conf/event_color.json DWOO compiled templates directory ""/var/lib/ganglia-web/dwoo/compiled"" is not writeable. Please adjust$conf[""dwoo_compiled_dir""]. DWOO cache directory ""/var/lib/ganglia-web/dwoo/cache"" is not writeable. Please adjust$conf[""dwoo_cache_dir""]. Views directory ""/var/lib/ganglia-web/conf"" is not readable. Please adjust$conf[""views_dir""]. Directory used to store configuration information ""/var/lib/ganglia-web/conf"" is not readable. Please adjust$conf[""conf_dir""]. in /var/www/html/ganglia/eval_conf.php on line 126 解决办法: # ln -s /var/lib/ganglia /var/lib/ganglia-web # mkdir -p /var/lib/ganglia-web/dwoo/{compiled,cache} -p # chown -R apache:apache /var/lib/ganglia 注二: There was an error collecting ganglia data (127.0.0.1:8652): fsockopen error: Connection refused 查看message日志: localhost /usr/sbin/gmetad[14747]: RRD_create: creating ""/var/lib/ganglia/rrds/__SummaryInfo__/diskstat_vda_writes.rrd"": Permission denied localhost /usr/sbin/gmetad[14747]: Unable to write meta data for metric diskstat_vda_writes to RRD 解决办法: # /etc/init.d/gmetad status #查看状态gmetad是死状态 gmetad 已死,但是 subsys 被锁 # chown nobody:nobody /var/lib/ganglia/rrds -R # /etc/init.d/gmetad restart 注三: 注意: Centos7的系列,用这种rpm安装的方式是会报错的: # rpm -ivh *.rpm 错误:依赖检测失败: libpcre.so.0()(64bit) 被 ganglia-gmond-3.7.2-1.x86_64 需要 libpcre.so.0()(64bit) 被 ganglia-gmond-modules-python-3.7.2-1.x86_64 需要 libpython2.6.so.1.0()(64bit) 被 ganglia-gmond-modules-python-3.7.2-1.x86_64 需要 libpcre.so.0()(64bit) 被 libganglia-3.7.2-1.x86_64 需要 原因: 从上图中可以看出,要找对应的库文件没有,如libpython2.6.so.1.0,这是Centos6版本里面才有的,Centos7默认是libpython2.7。 而我们下载的ganglia也是最新版了,所以系统如果有Centos7的版本了,就不能用这种rpm包省事的方法安装了。就要换成编译安装的形式了,而我们线上一般也是采取编译安装的形式,因为编译安装可以指定对应的目录和参数。 注四: 服务器启动,节点也加载了你会发现只有主机图,但是主机图里面没有曲线数值:图的下方提示:No matching metrics detected 第一:安装步骤是否正确,是否缺少相关的目录 第二:查看message日志,是否目录权限错误,尤其是/var/lib/ganglia/rrds/是否有权限报警。 第三:被监控的节点是不是开了防火墙之类的操作。 就以192.168.1.103举例(Centos7的firewalld没有关闭):下面是关闭防火墙服务后的效果图 =========================分割线=========================================================================== 博文来自:www.51niux.com 三、Ganglia测试集群编译安装方式环境部署 3.1 服务器端的操作: 第一步:安装gmetad # yum -y install apr-devel apr-util check-devel cairo-devel pango-devel libxml2-devel rpm-build glib2-devel dbus-devel freetype-devel fontconfig-devel gcc gcc-c++ expat-devel python-devel libXrender-devel # yum install -y libart_lgpl-devel pcre-devel libtool # yum install -y rrdtool rrdtool-devel # mkdir /tools # cd /tools/ # wgethttp://download.savannah.gnu.org/releases/confuse/confuse-2.7.tar.gz # tar zxf confuse-2.7.tar.gz # cd confuse-2.7 # ./configure --prefix=/usr/local/ganglia-tools/confuse CFLAGS=-fPIC --disable-nls --libdir=/usr/local/ganglia-tools/confuse/lib64 # make && make install # cd /tools/ # wgethttps://sourceforge.net/projects/ganglia/files/ganglia%20monitoring%20core/3.7.2/ganglia-3.7.2.tar.gz # tar zxf ganglia-3.7.2.tar.gz # cd ganglia-3.7.2 # ./configure --prefix=/usr/local/ganglia --enable-gexec --enable-status --with-gmetad --with-libconfuse=/usr/local/ganglia-tools/confuse #enable-gexec是gmond节点 # make && make install # cp gmetad/gmetad.init /etc/init.d/gmetad # ln -s /usr/local/ganglia/sbin/gmetad /usr/sbin/gmetad 第二步:安装gweb 参照上面第一种安装方式便可以,这里没什么变化。 # chown apache:apache -R /var/lib/ganglia-web/ 第三步:修改配置 1. 修改启动脚本 # vi /etc/init.d/gmetad GMETAD=/usr/sbin/gmetad #这句话可以自行更改gmetad的命令,当然也能向我们前面做了软连接 start() { [ -f /usr/local/ganglia/etc/gmetad.conf ] || exit 6 #这里将配置文件改成现在的位置,不然启动没反应 2. 创建rrds目录 # mkdir /var/lib/ganglia/rrds -p # chown -R nobody:nobody /var/lib/ganglia/rrds 3. 修改gmetad配置文件 因为我们这里就先让它当一个单纯的gweb节点和gmetad节点,不给其启动gmond服务,假设它没有再哪个多播集群里。 # vi /usr/local/ganglia/etc/gmetad.conf data_source "my cluster" 192.168.1.102:8649 #这也是我们以后经常修改的地方,""里面是组名称 后面是去哪个IP的那个端口去采集gmond数据 第四步:启动服务 # /etc/init.d/gmetad restart 3.2 客户端的操作: # yum -y install apr-devel apr-util check-devel cairo-devel pango-devel libxml2-devel rpm-build glib2-devel dbus-devel freetype-devel fontconfig-devel gcc gcc-c++ expat-devel python-devel libXrender-devel # yum install -y libart_lgpl-devel pcre-devel libtool # mkdir /tools # cd /tools/ # wgethttp://download.savannah.gnu.org/releases/confuse/confuse-2.7.tar.gz # tar zxf confuse-2.7.tar.gz # cd confuse-2.7 # ./configure --prefix=/usr/local/ganglia-tools/confuse CFLAGS=-fPIC --disable-nls --libdir=/usr/local/ganglia-tools/confuse/lib64 # make && make install # cd /tools/ # wgethttps://sourceforge.net/projects/ganglia/files/ganglia%20monitoring%20core/3.7.2/ganglia-3.7.2.tar.gz # tar zxf ganglia-3.7.2.tar.gz # cd ganglia-3.7.2 # ./configure --prefix=/usr/local/ganglia --enable-gexec --enable-status --with-libconfuse=/usr/local/ganglia-tools/confuse #enable-gexec是gmond节点 # make && make install # /usr/local/ganglia/sbin/gmond -t >/usr/local/ganglia/etc/gmond.conf #生成gmond配置文件 # cp /tools/ganglia-3.7.2/gmond/gmond.init /etc/init.d/gmond # /etc/init.d/gmond restart 注: 测试结果是OK的,这里就截图了。线上环境,我们一般会创建一个监控用于,专门用来存放相关的监控程序,所以你看我的编译过程都指定了安装位置,但是一般不会放到/usr/local下面,会都指向安装到我们的监控用户或者监控目录下面。另外客户端有一个编译安装成功了,可以直接把生成的目录发送到其他的客户端上面,一样也可以使用的,不需要每台机器都进行一次编译过程。当然yum安装软件包组还是需要的。 四、ganglia目录及配置文件详解 4.1 gmond节点的目录结构 # tree -L 3 ├── bin │ ├── ganglia-config │ ├── gmetric │ └── gstat ├── etc │ ├── conf.d │ │ └── modpython.conf │ └── gmond.conf ├── include │ ├── ganglia_gexec.h │ ├── ganglia.h │ ├── gm_file.h │ ├── gm_metric.h │ ├── gm_mmn.h │ ├── gm_msg.h │ ├── gm_protocol.h │ └── gm_value.h ├── lib64 │ ├── ganglia │ │ ├── modcpu.so │ │ ├── moddisk.so │ │ ├── modload.so │ │ ├── modmem.so │ │ ├── modmulticpu.so │ │ ├── modnet.so │ │ ├── modproc.so │ │ ├── modpython.so │ │ └── modsys.so │ ├── libganglia.a │ ├── libganglia.la │ ├── libganglia.so -> libganglia.so.0.0.0 │ ├── libganglia.so.0 -> libganglia.so.0.0.0 │ └── libganglia.so.0.0.0 ├── sbin │ └── gmond └── share └── man ├── man1 └── man5 4.2 gmond配置文件详解 # /usr/local/ganglia/sbin/gmond -t #查看gmond的默认配置 配置文件由{}括起来的几个section组成。section名和属性不区分大小写。 globals { #section:globals. globals在配置中只出现一次。 daemonize = yes #当值为true(yes|true|on)时,gmond将在后台分散运行。设置为false由守护进程管理器运行gmond。 setuid = yes #这是gmond将user属性指定的特定用户的UID作为有效UID;值为false时,gmond将不会改变其有效用户。 user = nobody #用户名 debug_level = 0 #值为0,gmond正常运行,大于0,gmond前台运行并输出调试信息。debug_level值越大,输出越详细。 max_udp_msg_len = 1472 #gmond发送包所能包含的最大长度。一般不改变此值。 mute = no #设置为no,gmond就是可以发送数据。设置为yes,就是单收,但是仍然会相应诸如gmetad的外部轮询器。 deaf = no #当值为true时,gmond将不能接收数据。设置no就是可以接收数据。 allow_extra_data = yes #当值为false时,gmond将不会发送XML的EXTRA_ELEMENT和EXTRA_DATA部分。这是是发送。 host_dmax = 86400 #设置为0,gmond不会从队列中删除不在报告的主机。这里的意思是在86400秒内,接收不到某台主机的数据,gmond将删除。 host_tmax = 20 #当gmond等到20秒*4的时间内,接收不到某台主机的任何消息,gmond就认为该主机已经崩溃。 cleanup_threshold = 300 #gmond清除过期数据的最小时间间隔为300秒。 gexec = no #当值为true时,gmond将允许主机运行gexec任务。这种方式需要允许gexecd并安装合适的验证码。 send_metadata_interval = 0 #这是设置gmond两次发送元数据包的时间间隔。单位是秒。默认设置为0,表示gmond只有在启动和收集到其他远程允许的gmond节点请求时才会发送元数据包。但是如果单播环境下必须设置重发间隔。 # override_hostname = "mywebserver.domain.com"" #这里是gweb界面要显示的名称,可以是IP或者字符串,默认是注释状态。默认情况下,gmond在显示主机名时将使用反向DNS解析。 } =================================特别注意:================================ 如果你是Centos7的环境,如果你设置了override_hostname的话,你会发现的你message日志里面会狂刷一条日志: # tail -f /var/log/messages Jan 13 16:23:14 localhost /usr/sbin/gmond[1360]: Incorrect format for spoof argument. exiting.#012 Jan 13 16:23:14 localhost /usr/sbin/gmond[1360]: Incorrect format for spoof argument. exiting.#012 Jan 13 16:23:14 localhost /usr/sbin/gmond[1360]: Incorrect format for spoof argument. exiting.#012 Jan 13 16:23:14 localhost /usr/sbin/gmond[1360]: Incorrect format for spoof argument. exiting.#012 Jan 13 16:23:14 localhost /usr/sbin/gmond[1360]: Incorrect format for spoof argument. exiting.#012 解决办法: 就是Centos7系列版本里面不要加override_hostname这一项。 多说两句: 如果你是单播环境,单播的接收节点最好不要在/etc/hosts定义类似于:192.168.1.103 test2 和最好不要再加一个127.0.0.1的本地通过,不然gweb上面会显示两个图形,一个是localhost(因为默认127.0.0.1对应的是localhost),一个是test2. =================================特别注意:================================ cluster { #section:cluster。每个gmond守护进程会使用在cluster section中定义的属性来报告它所属集群的信息。 name = "unspecified" #指定集群名称。当轮训节点的集群状态的XML集合时,把该名称插入CLUSTER元素内。轮询该节点的gmetad会使用该值来命名存储集群数据的RRD文件。该指令将取代gmetad.conf配置文件中指定的集群名称。 owner = "unspecified" #指定集群管理员 latlong = "unspecified" #指定该集群再地区上的GPS坐标的经纬度。 url = "unspecified" #指定接待集群特定信息(如集群用途和使用细节)的URL } 注:多播地址和UDP端口指定一个主机是否在某个集群内。name属性只是充当轮训时的标识符。 host { #section:host提供运行gmond主机的相关信息。目前只支持地址字符串属性。 location = "unspecified" #用来描述主机位置,描述的格式一般与站点位置有关,如:rack,U[,blade] } udp_send_channel { #UDP发送和接收通过确定gmond节点间的交互方式。gmond集群内每个节点默认通过udp将自身数据多播或单播至其他节点或中心节点,如果是多播的形式的话还会侦听其他节点的类似UDP多播。UDP通过是通过udp_(send|receive)_channel section创建的。 #bind_hostname = yes #通知gmond使用源地址解析主机名 mcast_join = 239.2.11.71 #gmond将创建udp套接字并加入由239.2.11.71指定的多播组。该选项与host相互排斥。 port = 8649 #指定gmond发送数据的端口号,未指定的话默认是8649 ttl = 1 #该设置在多播环境比较重要,当该值设置的比实际所需的更大时,指标数据将能够通过WAN连接传输到多个站点。 注:还有两个参数 mcast_if #gmond将发送来自指定接口(例如eth0)的数据 host IP地址#gmond将向已命名主机发送数据,这就是单播。 } udp_recv_channel { #udp接收通道 mcast_join = 239.2.11.71 #gmond侦听指定IP的多播组所发送的多播数据包。如果未指定多播属性,gmond将在指定端口创建单播UDP服务器。 port = 8649 #gmond接收数据的端口号。未指定的话默认是8649 bind = 239.2.11.71 #当指定该选项时,gmond将捆绑到指定的本地地址。 retry_bind = true # buffer = 10485760 #UDP缓冲区大小。 如果你正在处理大量的指标应该将它向上 10MB甚至更高。 注:另外还有几个参数: bind IP地址#gmond将捆绑到指定的本地地址 family (inet4|inet6) #默认版本为inet4.如果用户对一个特殊的端口进行IPV4和IPV6侦听,为此端口定义两个分离的接收通道。 mcast_if 网卡名称#gmond将侦听指定接口(例如eth0)数据 acl #通过指定接入控制列表(ACL)可以对接收通道进行精细的接入控制。 } tcp_accept_channel { #TCP接收通道是gmond节点创建向gmetad或其他外部轮询器汇报集群状态的通道。用户可以配置多选项。 port = 8649 #gmond接收连接的端口号。 gzip_output = no #对XML输出不进行压缩 注:另外还有几个参数 bind IP地址#gmond将捆绑到指定的本地地址 family (inet4|inet6) #默认版本为inet4.如果用户对一个特殊的端口进行IPV4和IPV6侦听,为此端口定义两个分离的接收通道。 interface 网卡名称#gmond将侦听指定接口(例如eth0)数据 acl #通过指定接入控制列表(ACL)可以对接收通道进行精细的接入控制。 } #udp_recv_channel { #定义个sFlow的接收通道,默认这里都是注释的。 # port = 6343 #} #sflow { #sflow是用于监测高速路由忘了的工业标准技术。gmond通过配置充当网络中sFlow代理的聚合器,收集sFlow代理的数据并实现对gmetad的透明传输。 # udp_port = 6343 #gmond接收sFlow数据的端口。其他配置参数用来处理特定应用的sFlow数据类型。 # accept_vm_metrics = yes # accept_jvm_metrics = yes # multiple_jvm_instances = no # accept_http_metrics = yes # multiple_http_instances = no # accept_memcache_metrics = yes # multiple_memcache_instances = no #} modules { #包含了加载指定模块的必要参数。指标模板是动态可加载的共享目标文件,用于扩展gmond可收集的指标。如果模块已经与gmond静态链接,它会不需要加载路径。 但是所有动态可加载模块必须包括负载路径。每个modules必须包含至少一个module subsection。 module { name = "core_metrics" #模块如果由python开发,模块名与源文件名相同。如果用C/C++开发,则模块名由模块结构所决定。 #如果未指定开发模块的源代码语言,默认为C/C++。如:language = "C/C++" } module { name = "cpu_module" path = "modcpu.so" #gmond预设的加载模块路径,默认在ganglia安装目录的lib64/ganglia/下. } module { name = "disk_module" path = "moddisk.so" } module { name = "load_module" path = "modload.so" } module { name = "mem_module" path = "modmem.so" } module { name = "net_module" path = "modnet.so" } module { name = "proc_module" path = "modproc.so" } module { name = "sys_module" path = "modsys.so" } } collection_group { #指定了gmond包含的指标及gmond收集和广播这些指标的周期。可以定义多收集组,每个收集组必须包含至少一种metric section collect_once = yes #有些指标重启也是不变化的,如系统CPU数量等,只在初始启动时手机一次,设置为yes。与collect_every相互排斥。 time_threshold = 20 metric { name = "heartbeat" } } collection_group { collect_every = 60 #收集组的轮询间隔,为60秒。 time_threshold = 60 #gmond发送collection_group所指定的指标数据到所有已配置的udp_send_channels的最大时间。 metric { name = "cpu_num" #指标手机模块定义的单个指标标准名称。 title = "CPU Count" #用于Web前端的指标名称。 } metric { name = "cpu_speed" title = "CPU Speed" } metric { name = "mem_total" title = "Memory Total" } metric { name = "swap_total" title = "Swap Space Total" } metric { name = "boottime" title = "Last Boot Time" } metric { name = "machine_type" title = "Machine Type" } metric { name = "os_name" title = "Operating System" } metric { name = "os_release" title = "Operating System Release" } metric { name = "location" title = "Location" } } collection_group { collect_once = yes time_threshold = 300 metric { name = "gexec" title = "Gexec Status" } } collection_group { collect_every = 20 time_threshold = 90 metric { name = "cpu_user" value_threshold = "1.0" #每次收集到指标数据时,会将新值与上一次的数值进行比较。当二者差别大于value_threshold时,整个收集组被发送至已定义的udp_send_channels。在不同的指定模块中该值表示不同的指标单位。例如,对于CPU统计,该值代表百分比,网络统计则将该值理解为原始字节数。 title = "CPU User" } metric { name = "cpu_system" value_threshold = "1.0" title = "CPU System" } metric { name = "cpu_idle" value_threshold = "5.0" title = "CPU Idle" } metric { name = "cpu_nice" value_threshold = "1.0" title = "CPU Nice" } metric { name = "cpu_aidle" value_threshold = "5.0" title = "CPU aidle" } metric { name = "cpu_wio" value_threshold = "1.0" title = "CPU wio" } metric { name = "cpu_steal" value_threshold = "1.0" title = "CPU steal" } metric { name = "cpu_intr" value_threshold = "1.0" title = "CPU intr" } metric { name = "cpu_sintr" value_threshold = "1.0" title = "CPU sintr" } } collection_group { collect_every = 20 time_threshold = 90 /* Load Averages */ metric { name = "load_one" value_threshold = "1.0" title = "One Minute Load Average" } metric { name = "load_five" value_threshold = "1.0" title = "Five Minute Load Average" } metric { name = "load_fifteen" value_threshold = "1.0" title = "Fifteen Minute Load Average" } } collection_group { collect_every = 80 time_threshold = 950 metric { name = "proc_run" value_threshold = "1.0" title = "Total Running Processes" } metric { name = "proc_total" value_threshold = "1.0" title = "Total Processes" } } collection_group { collect_every = 40 time_threshold = 180 metric { name = "mem_free" value_threshold = "1024.0" title = "Free Memory" } metric { name = "mem_shared" value_threshold = "1024.0" title = "Shared Memory" } metric { name = "mem_buffers" value_threshold = "1024.0" title = "Memory Buffers" } metric { name = "mem_cached" value_threshold = "1024.0" title = "Cached Memory" } metric { name = "swap_free" value_threshold = "1024.0" title = "Free Swap Space" } } collection_group { collect_every = 40 time_threshold = 300 metric { name = "bytes_out" value_threshold = 4096 title = "Bytes Sent" } metric { name = "bytes_in" value_threshold = 4096 title = "Bytes Received" } metric { name = "pkts_in" value_threshold = 256 title = "Packets Received" } metric { name = "pkts_out" value_threshold = 256 title = "Packets Sent" } } collection_group { collect_every = 1800 time_threshold = 3600 metric { name = "disk_total" value_threshold = 1.0 title = "Total Disk Space" } } collection_group { collect_every = 40 time_threshold = 180 metric { name = "disk_free" value_threshold = 1.0 title = "Disk Space Available" } metric { name = "part_max_used" value_threshold = 1.0 title = "Maximum Disk Space Used" } } include ("/usr/local/ganglia/etc/conf.d/*.conf") #在需要配置复杂配置的情况下,include指令可以将gmond.conf文件划分为多个文件。 注: gmond.conf快速启动。只需要设置默认配置文件中的"cluster"section的name属性。 博文来自:www.51niux.com 4.3 gmetad配置文件详解 # cat /usr/local/ganglia/etc/gmetad.conf # scalable off #scalable off时候,gmetad将强制为网格data_source保留一整套RRD文件。 data_source "my cluster" 192.168.1.102:8649 #data_source属性是gmetad配置的核心。每一行data_source描述一个gmetad收集信息的gmond集群或gmetad网格。格式由三段组成。第一段:"my cluster"为唯一标识,第二段:为指定轮询间隔(单位:秒)的数字。第三段:主机:IP 为去哪个节点的哪个端口去收集这个集群的gmond汇聚数据,多主机间用空格隔开。定义多主机的话,如果第一个从第一个主机上没有收集到数据就会去第二个主机上收集。 # gridname "MyGrid" #gridname能唯一标识网格的字符串。可以理解为data_source中定义的一个集群集合。 # authority "URL地址"#网格的授权URL,被其他gmetad用来找到当前gmetad数据源的图标位置。默认值为:http://hostname/ganglia/ # trusted_hosts 127.0.0.1 169.229.50.165 my.gmetad.org #当前gmetad允许数据共享的主机列表,以空格作为分隔,localhost总是被允许的。 # all_trusted on #允许数据和任意主机共享,默认是关闭状态。 # setuid off #当值设置为off时候,将不能设置UID,默认是开启on状态。 # setuid_username "nobody" #gmetad设置的UID的用户名,默认为nobody。 # xml_port 8651 #gmetad监听端口,默认是8651 # interactive_port 8652 #gmetad交互式的监听端口,默认是8652 # server_threads 10 #允许同时连接到监听端口的连接数,默认为4 case_sensitive_hostnames 0 #ganglia3.2之后默认为0,之前的版本RRD文件区分主机名大小写,要设置为1,但现在已经有所改变了。 #RRAs "RRA:AVERAGE:0.5:1:5856" "RRA:AVERAGE:0.5:4:20160" "RRA:AVERAGE:0.5:40:52704" #默认是15秒步进 # umask 022 #指定已创建RRD文件及目录的umask。默认为022. # rrd_rootdir "/some/other/place" #指定RRD文件在本地文件系统存储的基本目录,默认是/var/lib/ganglia/rrds 下面是Graphite支持,通过设置下列属性,可以将gmetad收集到的数据传输到Graphite。 # carbon_server "my.graphite.box" #远程carbon守护进程的主机名或IP # carbon_port 2003 #carbon端口号,默认是2003 # graphite_prefix "datacenter1.gmetad" #graphite使用点分隔的路径来管理和查阅指标数据,在数据指标前加上描述信息。 # carbon_timeout 500 #gmetad等待Graphite服务器响应的毫秒数。因为gmetad的carbon发送器不是线程的,需要收到来自下游carbon守护进程的响应才能进行后续发送。默认为500. 4.4 gweb配置重点解释 gweb现在的主要配置文件是web站点根目录下的:conf_default.php,当然也可以将conf_default.php拷贝成conf.php,conf.php里面的设置就会将默认设置覆盖点。里面的属性名区分大小写。 # cat /var/www/html/ganglia/conf_default.php #配置文件在ganglia站点目录的根下 $conf[""gmetad_root""] = "/var/lib/ganglia"; $conf[""rrds""] = "${conf[""gmetad_root""]}/rrds"; #rrds属性由gmetad_root衍生。这里是rrds所存放的位置,如果gmetad将rrds存放位置发生了更改,这里也要跟着发生修改。 $conf[""rrdtool""] = "/usr/bin/rrdtool"; #rrdtool程序的目录告知gweb $conf[""graphdir""]= $conf[""gweb_root""] . ""/graph.d""; #代表用户放置JSON格式的定制图表的路径。用户可能会以JSON格式定制报告图标,并保存在该目录,而这些报告会显示在UI上。 $conf[""max_graphs""] = 0; #一次显示的图标数目,0为不限制。如设置成数字8,那只显示8个主机,剩下的主机需要点击图形下方的按钮:show more hosts(剩余的主机数量) $conf[""rrdcached_socket""] = ""; #指定rrdcached_socket连接路径。rrdcached是一种高性能缓存守护进程,通过缓存和合并写入来减轻与RRD数据写入相关的负载(这种方式提升效果并不显著)。如:$conf[""rrdcached_socket""] = "unix:/var/run/rrdcached/rrdcached.sock"; $conf[""graph_engine""] = "rrdtool"; #gweb使用rrdtool工具作为在UI上生成图标的工具。$conf[""graph_engine""] = "graphite";是使用Graphite,这种方式需要安装whisper和Ganglia webapp补丁版本。 4.5 gmetad所存储的rrds文件简述 # tree -L 1 /var/lib/ganglia/rrds/unspecified/ #因为我们现在就一个unspecified组,如果有多个组,再rrds下面会有好多以组命名的目录。 /var/lib/ganglia/rrds/unspecified/ ├── 192.168.1.101 #此组下面,每个主机一个目录 ├── 192.168.1.102 ├── 192.168.1.103 ├── 192.168.1.104 ├── 192.168.1.105 ├── 192.168.1.106 ├── 192.168.1.107 ├── 192.168.1.108 ├── 192.168.1.109 ├── 192.168.1.110 ├── 192.168.1.111 ├── 192.168.1.112 └── __SummaryInfo__ #这里记录了一些这个组的汇总信 # tree -L 1 /var/lib/ganglia/rrds/unspecified/192.168.1.102/ #而在每个主机目录下面,不同的指标会存到对应的rrd文件里面。 /var/lib/ganglia/rrds/unspecified/192.168.1.102/ ├── boottime.rrd ├── bytes_in.rrd ├── bytes_out.rrd ├── cpu_aidle.rrd ├── cpu_ctxt.rrd ├── cpu_idle.rrd ├── cpu_intr.rrd ├── cpu_nice.rrd ├── cpu_num.rrd ├── cpu_sintr.rrd ├── cpu_speed.rrd ├── cpu_steal.rrd ├── cpu_system.rrd ├── cpu_user.rrd ├── cpu_wio.rrd ├── disk_free_absolute_rootfs.rrd ├── disk_free_percent_rootfs.rrd ├── disk_free.rrd ├── diskstat_vda_io_time.rrd ├── diskstat_vda_percent_io_time.rrd ├── diskstat_vda_read_bytes_per_sec.rrd ├── diskstat_vda_reads_merged.rrd ├── diskstat_vda_reads.rrd ├── diskstat_vda_read_time.rrd ├── diskstat_vda_weighted_io_time.rrd ├── diskstat_vda_write_bytes_per_sec.rrd ├── diskstat_vda_writes_merged.rrd ├── diskstat_vda_writes.rrd ├── diskstat_vda_write_time.rrd ├── disk_total.rrd ├── entropy_avail.rrd ├── load_fifteen.rrd ├── load_five.rrd ├── load_one.rrd ├── mem_anonpages.rrd ├── mem_buffers.rrd ├── mem_cached.rrd ├── mem_dirty.rrd ├── mem_free.rrd ├── mem_hardware_corrupted.rrd ├── mem_mapped.rrd ├── mem_shared.rrd ├── mem_total.rrd ├── mem_writeback.rrd ├── part_max_used.rrd ├── pkts_in.rrd ├── pkts_out.rrd ├── proc_run.rrd ├── procs_blocked.rrd ├── procs_created.rrd ├── procstat_gmond_cpu.rrd ├── procstat_gmond_mem.rrd ├── proc_total.rrd ├── rx_bytes_eth0.rrd ├── rx_drops_eth0.rrd ├── rx_errs_eth0.rrd ├── rx_pkts_eth0.rrd ├── softirq_blockiopoll.rrd ├── softirq_block.rrd ├── softirq_hi.rrd ├── softirq_hrtimer.rrd ├── softirq_netrx.rrd ├── softirq_nettx.rrd ├── softirq_rcu.rrd ├── softirq_sched.rrd ├── softirq_tasklet.rrd ├── softirq_timer.rrd ├── swap_free.rrd ├── swap_total.rrd ├── tcp_attemptfails.rrd ├── tcpext_listendrops.rrd ├── tcpext_tcploss_percentage.rrd ├── tcp_insegs.rrd ├── tcp_outsegs.rrd ├── tcp_retrans_percentage.rrd ├── tx_bytes_eth0.rrd ├── tx_drops_eth0.rrd ├── tx_errs_eth0.rrd ├── tx_pkts_eth0.rrd ├── udp_indatagrams.rrd ├── udp_inerrors.rrd ├── udp_outdatagrams.rrd ├── vm_pgmajfault.rrd ├── vm_pgpgin.rrd ├── vm_pgpgout.rrd └── vm_vmeff.rrd