Ganglia监控扩展实现机制

默认安装完成的Ganglia仅向我们提供基础的系统监控信息,通过Ganglia插件可以实现两种扩展Ganglia监控功能的方法。
1、添加带内(in-band)插件,主要是通过gmetric命令来实现。
这是通常使用的一种方法,主要是通过crontab方法并调用Ganglia的gmetric命令来向gmond输入数据,进而实现统一监控。
这种方法简单,对于少量的监控可以采用,但是对于大规模自定义监控时,监控数据难以统一管理。

2、添加一些其他来源的带外(out-of-band)插件,主要是通过C或者Python接口来实现,通过gmetric接口扩展Ganglia监控。
在Ganglia3.1.x版本以后,增加了C或Python接口,通过这个接口可以自定义数据收集模块,并且可以将这些模块直接插入到gmond中以监控用户自定义的应用。

gmetric是Ganglia的一个命令行工具,它可以将数据直接发送到负责收集数据的gmond节点,或者广播给所有gmond节点。由此可见,采集数据的不一定全部都是gmond这个服务,
也可以直接通过应用程序调用Ganglia 提供的gmetric工具将数据直接写入gmond中,这就很容易的实现了ganglia监控的扩展。
因此,我们可以通过shell、perl、python等语言工具,通过调用gmetric将我们想要监控的数据直接写入gmond中,简单而快速的实现了Ganglia的监控扩展。

通过Python插件扩展Ganglia监控

一 要通过Python插件扩展Ganglia监控,必须满足如下条件:
1 Ganglia 3.1.x以后版本,
2 Python2.6.6或更高版本,
3 Python开发头文件(通常在python-devel这个软件包中)
4 在安装Ganglia客户端(gmond)的时候,需要加上“--with-python”参数
这样在安装完成后,会生成modpython.so文件,这个文件是Ganglia调用Python的动态链接库,要通过Python接口开发Ganglia插件,必须要编译安装此Python模块。

操作步骤:
ganglia的安装版本是ganglia3.7.2,安装目录是/opt/app/ganglia,要编写一个基于Python的Ganglia插件,需要进行如下操作:

1、修改modpython.conf文件(Ganglia客户端,在Ganglia安装完成后,modpython.conf文件位于/opt/app/ganglia/etc/conf.d目录下),此文件内容如下:
modules {
module {
name = "python_module" #python主模块名称
path = "modpython.so" #Ganglia调用Python的动态链接库,这个文件应该在Ganglia的安装目录的lib64/ganglia下面
params = "/opt/app/ganglia/lib64/ganglia" #指定我们编写的Python脚本放置路径,这个路径要保证是存在的。不然gmond服务无法启动
}
}
include ("/opt/app/ganglia/etc/conf.d/*.pyconf") #Python脚本配置文件存放路径

2、重启gmond服务,搭建完Python接口环境

3 搭建完Python接口环境,只是实现Ganglia监控扩展的第一步,接下来还要编写基于Python的Ganglia监控插件。
网上有很多已经编写好的各种应用服务的监控插件,我们只需要拿来使用即可 ,https://github.com/ganglia/gmond_python_modules 下载各种需要的Ganglia扩展监控插件
gmond_python_modules 文件目录介绍,例如:nginx_stauts的目录结构
conf.d目录下放的是配置文件nginx_status.pyconf,
python_modules目录下放的是Python插件的主程序nginx_status.py,
graph.d目录下放的是用于绘图的php程序

示例:ganglia配置nginx_status python接口插件

1、配置Nginx,开启状态监控:在Nginx配置文件nginx.conf中添加如下配置:
server {
listen 8000; #监听的端口
server_name IP地址; #当前机器的IP或域名
location /nginx_status {
stub_status on;
access_log off;
# allow xx.xx.xx.xx;#允许访问的IP地址
# deny all;
allow all;
}
}

重启Nginx

2、配置ganglia客户端,收集nginx_status数据
根据前面对modpython.conf文件的配置,我们将nginx_status.pyconf文件放到/opt/app/ganglia/etc/conf.d目录下,
将nginx_status.py文件放到/opt/app/ganglia/lib64/ganglia目录下。

nginx_status.py文件无需改动,nginx_status.pyconf文件需要做一些修改,修改后的文件内容如下:
modules {
module {
name = 'nginx_status' #模块名,该文件存放于/opt/app/ganglia/lib64/ganglia下面
language = 'python' #声明使用Python语言

paramstatus_url {
value = 'http://IP:8000/nginx_status' #这个就是查看nginx状态的URL地址,前面有配置说明
}
paramnginx_bin {
value = '/usr/local/nginx/sbin/nginx' #这里假定编译Nginx安装路径为/usr/local/nginx
}
paramrefresh_rate {
value = '15'
}
}
}

....# 其他部分不需要修改

3、绘图展示的PHP文件
在完成数据收集后,还需要将数据以图表的形式展示在Ganglia web界面中,所以还需要前台展示文件,将graph.d目录下的两个文件nginx_accepts_ratio_report.php、nginx_scoreboard_report.php放到Ganglia web的绘图模板目录
根据上面的设定,Ganglia web的安装目录是/var/www/html/ganglia,因此,将上面这两个PHP文件放到/var/www/html/ganglia/graph.d目录下即可。

4,完成上面的所有步骤后,重启Ganglia客户端gmond服务,在客户端通过“gmond–m”命令可以查看支持的模板,最后就可以在Ganglia web界面查看Nginx的运行状态。

Ganglia在实际应用中要考虑的问题

1、 网络IO可能存在瓶颈

在Ganglia分布式监控系统中,运行在被监控节点上的gmond进程消耗的网络资源是非常小的,通常在1~2MB之间,而gmond将收集到的数据仅保存在内存中,因此gmond消耗的网络资源基本可以忽略不记。但有一种情况,就是在采用单播模式下,所有gmond进程都会向一个gmond中央节点发送数据,而这个gmond中央节点可能存在网络开销,如果单播传输的节点过多,那么在中央节点上就会存在网络IO瓶颈。

另外,gmetad管理节点会收集所有gmond节点上的监控数据,同时Ganglia-Web也运行在gmetad所在的节点上,因此,gmetad所在节点的网络IO也会很大,可能存在网络IO瓶颈。

2、 CPU可能存在瓶颈

对于gmetad管理节点,它将收集所有gmond节点收集到的UDP数据包,如果一个节点每秒发送10个数据包,300个节点每秒将会发送3000个,假如每个数据包300字节,那么每秒就有近1MB的数据,这么多数据包需要的CPU处理能力也会增加。

gmetad在默认情况下每15秒到gmond取一次数据,同时gmetad请求完数据后还要汇总到xml文件,还需要对xml文件进行解析,如果监控的节点较多,比如1000个节点,那么收集到的xml文件可能有10~20MB左右。如果按照默认情况每隔15秒去解析一个20MB左右的xml文件,那么CPU将面临很大压力,而gmetad还要将数据写入rrd数据库,同时还要处理来自Web客户端的解析请求进而读rrd数据库,这些都会加重CPU的负载,因此在监控的节点比较多时,gmetad节点应该选取性能比较好的服务器,特别是CPU性能。

3、gmetad rrd数据写入可能存在瓶颈

gmetad进程在收集完成客户端的监控数据后,会通过rrdtool工具将数据写入到rrd数据库的存储目录。由于rrd拥有独特的存储方式,它将每个metric作为一个文件来存储,并且如果配置了数据采集的频率,gmetad还会为每个采集频率保存一个单独的文件,这就意味着,gmetad将metric值保存到rrd数据库的操作将是针对大量小文件的IO操作。假设集群有500个节点,每个节点有50个metric,那么gmetad将会存储25000个metric,如果这些metric都是每一秒更新一次,这将意味着每秒有25000个随机写入操作,而对于这种写入操作,一般的硬盘是无法支撑的。

4、ganglia使用过程中可能出现的问题

1、访问http://ip/ganglia/, 如果报下面的错误:

这是因为,没有修改默认的ganglia web配置文件conf_default.php里面“$conf['gweb_confdir']”的值,这个变量是指定ganglia web程序的安装目录,默认是“/var/lib/ganglia-web”,如果你不是放在这个目录下,那么就要修改这个值,这里我是将ganglia web程序放到了/var/www/html目录下了,所以要修改“$conf['gweb_confdir']”的值为“/var/www/html/ganglia”即可。

修改完成后,重新访问http://ip/ganglia/, 可能还会出现如下错误:

这个是因为没有写权限导致的,根据提示,首先创建这两个目录,然后做授权即可,操作如下:
[root@localhost ~]# mkdir -p /var/www/html/ganglia/dwoo/{compiled,cache}
[root@localhost ~]# chown -R apache:apache /var/www/html/ganglia/dwoo/{compiled,cache}
注意,这里将compiled和cache目录授权给了apache用户,这个用户是启动httpd服务的用户,如果是lamp架构,那么就看启动apache的是哪个用户,如果是lnmp架构,那么就看启动php-fpm的是哪个用户。

2、故障现象:

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

根据日志提示,这是没有权限写rrds元数据导致的问题,默认配置rrds数据的路径在配置文件conf_default.php里面的如下变量中:

$conf['gmetad_root'] = "/var/lib/ganglia";
$conf['rrds'] = "${conf['gmetad_root']}/rrds";

这是默认的路径,当然也可以指定自定义路径,不管指定什么路径,都要保证此路径有gmond进程的写权限,而gmond进程的启动用户在gmond.conf里面进行配置,默认是nobody用户,因此解决办法如下:

[root@localhost ~]# systemctl  status gmetad
gmetad.service - Ganglia Meta Daemon
Loaded: loaded (/usr/lib/systemd/system/gmetad.service; disabled; vendor preset: disabled)
Active: inactive (dead)
[root@localhost ~]# chown -R nobody:nobody /var/lib/ganglia/rrds
[root@localhost ~]# systemctl start gmetad

3、故障现象:

gmond服务启动后,节点也会出现对应图形,但是主机图里面没有曲线数值,图的下方提示:No matching metrics detected

针对这个问题,可能的原因有三个:

(1)、安装步骤是否正确,是否缺少相关的目录
(2)、查看message日志,是否目录权限错误,尤其是/var/lib/ganglia/rrds/是否有权限。
(3)、被监控的节点是不是开了防火墙、selinux之类的操作。

本例是因为entos7的firewalld没有关闭,下面是关闭防火墙服务后的效果图:

好吧,ganglia扩展监控就介绍到这里了,后面还有介绍ganglia与centreon的整合,实现更强大的分布式监控系统。

Ganglia监控扩展实现机制的更多相关文章

  1. 使用ganglia监控hadoop及hbase集群

    一.Ganglia简介 Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测量数以千计的节点.每台计算机都运行一个收集和发送度量数据(如处理器速度.内存使用量等)的名为 gm ...

  2. 第十二章 Ganglia监控Hadoop及Hbase集群性能(安装配置)

    1 Ganglia简介 Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测量数以千计的节点.每台计算机都运行一个收集和发送度量数据(如处理器速度.内存使用量等)的名为 gm ...

  3. 使用ganglia监控hadoop及hbase集群 分类: B3_LINUX 2015-03-06 20:53 646人阅读 评论(0) 收藏

    介绍性内容来自:http://www.uml.org.cn/sjjm/201305171.asp 一.Ganglia简介 Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测 ...

  4. dubbo源码分析5-dubbo的扩展点机制

    dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分 ...

  5. Ganglia监控Hadoop集群的安装部署[转]

    Ganglia监控Hadoop集群的安装部署 一. 安装环境 Ubuntu server 12.04 安装gmetad的机器:192.168.52.105 安装gmond的机 器:192.168.52 ...

  6. ganglia监控hadoop2.0配置方法

    ganglia监控hadoop2.0配置方法前提:hadoop2.0集群已安装ganglia监控工具第一步:Hadoop用户登录集群每一个节点,修改文件:vi /opt/hadoop-2.0.0-cd ...

  7. Ganglia监控搭建

    一.Ganglia介绍: Ganglia是一个监控服务器.集群的开源软件,能够用曲线图表现最近一个小时,最近一天,最近一周,最近一月,最近一年的服务器或者集群的cpu负载,内存,网络,硬盘等指标.Ga ...

  8. Ganglia 监控Hadoop

    Ganglia监控Hadoop集群的安装部署 一. 安装环境 Ubuntu server 12.04 安装gmetad的机器:192.168.52.105 安装gmond的机 器:192.168.52 ...

  9. 探索Windows Azure 监控和自动伸缩系列3 - 启用Azure监控扩展收集自定义监控数据

    上一篇我们介绍了获取Azure的监控指标和监控数据: http://www.cnblogs.com/teld/p/5113376.html 本篇我们继续:监控虚拟机的自定义性能计数器. 随着我们应用规 ...

随机推荐

  1. 使用SimpleDateFormat类来实现时间跟字符串的转化

    使用Date和SimpleDateFormat类表示时间 1.Date类 需要处理日期和时间的相关数据时可以使用 java.util 包中的 Date 类,这个类最主要的作用就是获取当前时间.下面看看 ...

  2. AD中批量创建域用户

    EXCEL表中的各列说明情况: A列:姓 B列:名 C列:姓名 D列:账号 E列:密码 此表格另存为person .csv 的格式到AD的C盘目录下,用记事本打开如下图所示: 打开CMD,右键以管理员 ...

  3. 离线手动部署docker镜像仓库——harbor仓库(HTTPS)

    实验环境: harbor服务器系统:CentOS Linux release 7.5.1804 (Core)harbor服务器IP:10.1.12.114harbor版本:v1.5.0docker版本 ...

  4. tomcat安装启动之后localhost:8080页面进不去,提示错误500

    具体的错误展示页面如下: 首先,需要考虑到是不是安装的tomcat版本和自己安装的jdk的版本一致,如果不一致,建议将tomcat换成和jdk一致或者高于jdk版本的tomcat版本.(比如安装的jd ...

  5. Flask--WTForms

    简介 WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 安装:pip3 install wtforms 用户登录注册示例 1. 用户登录 当用户登录时候,需要对用 ...

  6. scrapy-middlewares

    1.scrapy中间件 下载中间件Downloader Middlewares 下载器中间件处理请求与响应,对应两个方法 process_request(self, request, spider) ...

  7. 74.纯 CSS 创作一台 MacBook Pro

    原文地址:https://segmentfault.com/a/1190000015568609 HTML code: <div class="macbook"> &l ...

  8. 关于jfinal发送邮件走过的坑

    最近接到一个写发送邮件的功能开发,使用的是jfinal框架.原本打算使用javamail一步步来的,后来看到jfinal有自带的发邮件的插件(jfinal-mail-plugin),只需两三行代码便可 ...

  9. openvpn-monitor openvpn-server的监控插件

    项目地址 https://github.com/furlongm/openvpn-monitor

  10. TIMESTAMP(6)类型的时间差

    TIMESTAMP 数据类型 它包括了所有DATE数据类型的年月日时分秒的信息,而且包括了小数秒的信息. 以分钟为单位查询时间差 select ROUND(TO_NUMBER(to_date(to_c ...