Ganglia & RRD
Ganglia是伯克利开发的一个集群监控软件。可以监视和显示集群中的节点的各种状态信息,比如如:cpu 、mem、硬盘利用率, I/O负载、网络流量情况等,同时可以将历史数据以曲线方式通过php页面呈现。
Ganglia监控系统的核心有两部分:gmond 和 gmetad:
  • gmond在各个节点上运行,负责采集数据;
  • gmetad在主节点上运行,负责接收gmond采集上来的数据并将之储存在RRD中。
RRD(Round-Robin Database)是一种固定大小的环形的数据库,一个RRD文件下可以有多个RRA,每个RRA是一个环,环上可以储存的数据个数是固定个,新的数据被记录时会覆盖最旧的那条数据,从而周而复始的记录。
 
Ganglia将监控数据以RRD的形式储存并通过php展示在web页面上。Ganglia默认的是15秒在RRD中记录一次数据,而RRD默认的格式为:
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"
 
这是Ganglia创建的RRD的默认形式,一个RRD文件有五个RRA用来记录数据。
  • 第一个RRA一共储存着244个数据,每插入一条数据储存一个数据,Ganglia默认的15s记录一次,这就意味着默认的这个RRA记录着最近61分钟的数据,这也就是在web上看到的一小时的图。
  • 第二个RRA一共储存着244个数据,每插入24条数据取平均数,储存一个数据,15s * 24 = 360s,意味着6分钟储存一条数据。总共记录了 6min * 244 = 1464min = 24.4h 约为一天的数据。对应的是web上最近24h的数据图。
  • 第三个RRA,每插入168条数据取平均数储存一条数据,15s * 168 = 42min,42分钟记录一条数据,总共记录 42min * 244 = 7.1d 约为一周的数据。
  • 第四个RRA,记录最近四周的数据。对应web界面上Last month的数据。
  • 第五个RRA记录最近一年的数据。
 
为什么要更改Ganlia采样、统计及RRD记录的最小间隔
对于简单的集群监控,Ganglia的默认配置是足够的,能够满足集群管理员发现集群的性能表现和一些故障,并判断故障发生在哪里。
但是在进行细致的作业分析时,15s的最小采样间隔是不能够满足需求的。
以笔者研究的spark作业的性能表现为例,对于40G的数据,在4节点、16GB per node、32 cores per node的Spark集群上进行wordcount,作业的总共运行时间平均为53s,而map stage中每个task的运行时间在10s左右,reduce&save stage中每个task的运行时间不过2-4s。
由于spark高效的执行效率,spark运行过程中占用集群资源的行为变化是迅速的,15s的记录间隔是无法察觉的。
 
因此,为了让Ganglia能够更好的适应Spark的节奏,需要将Ganlia采样、统计及RRD记录的最小间隔由15s改到更小,笔者直接选择在1s。
更改Ganglia配置参数,以更改采样和记录的最小间隔
停止Ganglia的运行
为了避免出现运行错误,在更改配置前关闭ganglia的运行。
在主节点上,使用命令:
service gmetad stop
 
在各个节点上,使用命令:
service gmond stop
 
更改gmond配置(更改搜集数据的周期,以及传输传输周期)
gmond的配置在/etc/ganglia/gmond.conf中
对于只取一次值的metric,将time_threshold,因为这些值,如mem_total,会在web端php画图时用到,因为memory那张图中的memory used,并不是通过直接采集数据得到的,而是通过mem_total减去其他值计算得到的,因此,mem_total一开始就应该被获取,因此time_threshold需设为1(默认为1200)。
collection_group { collect_once = yes time_threshold = 1 metric { name = "cpu_num" title = "CPU Count" } ... metric { name = "mem_total" title = "Memory Total" } ... }
对于其他metric,如cpu group中的各个metric,采样与传输的时间也应设置为1(s)
collection_group { collect_every = 20 time_threshold = 90 /* CPU status */ metric { name = "cpu_user" value_threshold = "1.0" title = "CPU User" } metric { name = "cpu_system" value_threshold = "1.0" title = "CPU System" } ... }
collect_every = 1 time_threshold = 1
 
更改gmetad配置(更改记录的最小间隔)
gmetad的配置在/etc/ganglia/gmetad.conf中
# Format: # data_source "my cluster" [polling interval] address1:port addreses2:port ... # The keyword 'data_source' must immediately be followed by a unique # string which identifies the source, then an optional polling interval in # seconds. The source will be polled at this interval on average. # If the polling interval is omitted, 15sec is asssumed.
看到这里有关于[polling interval]的解释,即gmetad会根据从gmond搜集的数据,每一个间隔计算出这个间隔内的平均数将其写入rrd。
而这个参数,是一个非必要的参数,如果用户不指定的话,每15s记录一次。
因此,为了将Ganglia记录最小间隔及RRD中数据的最小时间间隔改为1s,需要在master名称后添加一个参数:1
data_source "my cluster" 1 localhost my.machine.edu:8649 ...
为了让web依然能够顺利的画出一天、一周、一月、一年的图,还应该修改RRD的格式。
原来的采样间隔是15s,现在的采样间隔是1s,就要把每个RRA的容量扩充,或者将除了第一个RRA之外的RRA的记录间隔改大。
两种调整RRD格式的方法:
1.
RRAs "RRA:AVERAGE:0.5:1:3660" "RRA:AVERAGE:0.5:24:3660" "RRA:AVERAGE:0.5:168:3660" "RRA:AVERAGE:0.5:672:3660"
2.
RRAs "RRA:AVERAGE:0.5:1:3660" "RRA:AVERAGE:0.5:360:244" "RRA:AVERAGE:0.5:2520:244" "RRA:AVERAGE:0.5:10080:244"
因为我只需要近一小时的详细数据,因此,我采用第二种方式,RRD的文件会小一些。
清除原有RRD
因为RRD的格式发生变化,和原有的RRD不同,因此,需要将原来的RRD删除,
RRD的文件储存位置的配置在gmetad.conf中:rrd_rootdir。
rrd_rootdir的默认位置在/var/lib/ganglia/rrds,将这个文件夹下的所有文件及文件夹删除即可。
启动Ganglia
在主节点上,使用命令:
service gmetad start
在各个节点上,使用命令:
service gmond start
查看更改之后的效果
service httpd restart
在http://masterhost/ganglia中可以看到更改之后的变化:
最后一张图明显能看出更改之后统计的数据更细腻。

Ganlia采样、统计及RRD记录周期(频次、间隔)的配置和更改的更多相关文章

  1. MySQL按时间统计每个小时记录数

    MySQL按时间统计每个小时记录数 方案1: ? 1 2 3 4 5 6 7 SELECT  @rownum := @rownum + 1 AS ID,         CONCAT((CASE WH ...

  2. sql查询技巧,按时间分段进行分组,每半小时一组统计组内记录数量

    今天拿到一个查询需求,需要统计某一天各个时间段内的记录数量. 具体是统计某天9:00至22:00时间段,每半小时内订单的数量,最后形成的数据形式如下: 时间段          订单数 9:00~9: ...

  3. SQLSERVER:通过sys.tables实现批量删表、快速统计多表记录和

    SQLSERVER:通过sys.tables实现批量删表,或者回滚表 begin try drop table #temp10 end try begin catch end catch select ...

  4. 记录分享公司Spring data相关配置

    起因 公司Spring Data相关的配置还是有点意思的,不过蛮复杂的...XML很多...我不太喜欢强行记住....所以我打算记录一下配置的大致思路和结构,以后可能会有用.... 总体结构 总体结构 ...

  5. 记录:sea.js和require.js配置 与 性能对比

    最近有点忙,很久无写博客,记录一下之前的配置require.js和sea.js的配置.(有误有望提出 require.js 文件目录 /app(项目使用js) /lib(require.js jq存放 ...

  6. 什么是Servlet,Servlet的作用,生命周期,如何创建、配置Servlet

    什么是Servlet,作用是? servlet是一个基于java技术的WEB组件,运行在服务器端,我们利用 sevlet可以很轻松的扩展WEB服务器的功能,使它满足特定的应用需要.servlet由se ...

  7. Nginx记录-nginx 负载均衡5种配置方式(转载)

    nginx 负载均衡5种配置方式 1.轮询(默认)   每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除.  2.weight 指定轮询几率,weight和访问比率成 ...

  8. 记录一下使用Ubuntu16.0.4配置和使用docker registry

    h1, h2, h3, h4, h5, h6, p, blockquote { margin: 5px; padding: 5; } body { font-family: "Helveti ...

  9. Spring Boot 2 实践记录之 使用 ConfigurationProperties 注解将配置属性匹配至配置类的属性

    在 Spring Boot 2 实践记录之 条件装配 一文中,曾经使用 Condition 类的 ConditionContext 参数获取了配置文件中的配置属性.但那是因为 Spring 提供了将上 ...

随机推荐

  1. mybatis第一次搭建出错

    ### Error building SqlSession. ### The error may exist in com/test/pojo/UserMapper.xml ### Cause: or ...

  2. MySQL单表多次查询和多表联合查询,哪个效率高?

    很多高性能的应用都会对关联查询进行分解. 简单地,可以对每个表进行一次单表查询,然后将结果在应用程序中进行关联.例如,下面这个查询: select * from tag join tag_post o ...

  3. Error:Execution failed for task ':app:preDebugAndroidTestBuild'. > Conflict with dependency 'com.android.support:support-annotations' in project ':app'. Resolved versions for app (26.1.0) and test app

    出现的问题: Error:Execution failed for task ':app:preDebugAndroidTestBuild'.> Conflict with dependency ...

  4. Oracle 并发创建索引

    建索引时,我们为了建索引快,会加上并行,加上并行之后,此列索引就会是并行了.访问有并行度的索引时,CBO可能可能会考虑并行执行,这可能会引发一些问题,如在服务器资源紧张的时候用并行会引起更加严重的争用 ...

  5. 雷林鹏分享:Composer 安装

    下午在安装 Laravel 框架过程中,遇到了不少问题,因为 Laravel 的安装依赖于 composer,这里就先介绍一下 composer 的安装方法: 安装方法: #下载 sudo curl ...

  6. NetSec2019 20165327 Exp1 PC平台逆向破解

    NetSec2019 20165327 Exp1 PC平台逆向破解 一.实践目标 本次实践的对象是一个名为pwn1(实验中用的 是5327pwnx)的linux可执行文件. 该程序正常执行流程是:ma ...

  7. HBase Block Cache(块缓存)

    Block Cache HBase提供了两种不同的BlockCache实现,用于缓存从HDFS读出的数据.这两种分别为: 默认的,存在于堆内存的(on-heap)LruBlockCache 存在堆外内 ...

  8. 怎么样获取小米手机4的ROOT超级权限

    小米手机4有何方法开通了Root超级权限?各位都清楚,Android手机有Root超级权限,一旦手机开通了root相关权限,能够实现更强大的功能,打比方各位部门的营销部门的妹纸,使用个别营销工具都需要 ...

  9. linux shell 脚本 svn自动更新项目并且打包 、发布、备份

    这里先准备一个配置文件,用于保存svn地址.目的路径.用户名跟密码 配置文件名问:toolConfig.properties #svn地址 svnAddress=https://192.168.1.2 ...

  10. spring boot2.0(二 ) lettcute访问redis

    前言 此处已经省略redis的安装,请自行百度查找redis的服务端安装过程. 1.pom文件配置: <project xmlns="http://maven.apache.org/P ...