1.概述

RRDtool 代表 “Round Robin Database tool” ,作者同时也是 MRTG 软件的发明人。官方站点位于http://oss.oetiker.ch/rrdtool/ 。 所谓的“Round Robin” 其实是一种存储数据的方式,使用固定大小的空间来存储数据,并有一个指针指向最新的数据的位置。我们可以把用于存储数据的数据库的空间看成一个圆,上面有很多刻度。这些刻度所在的位置就代表用于存储数据的地方。所谓指针,可以认为是从圆心指向这些刻度的一条直线。指针会随着数据的读写自动移动。要注意的是,这个圆没有起点和终点,所以指针可以一直移动,而不用担心到达终点后就无法前进的问题。在一段时间后,当所有的空间都存满了数据,就又从头开始存放。这样整个存储空间的大小就是一个固定的数值。所以RRDtool 就是使用类似的方式来存放数据的工具, RRDtool 所使用的数据库文件的后缀名是'.rrd。著名的hadoop集群监控工具ganglia也是使用RRD数据库来存储数据和展示数据的。其原理如下图:

2.特点

首先 RRDtool 存储数据,扮演了一个后台工具的角色。但同时 RRDtool 又允许创建图表,这使得RRDtool看起来又像是前端工具。其他的数据库只能存储数据,不能创建图表。

RRDtool 的每个 rrd 文件的大小是固定的,而普通的数据库文件的大小是随着时间而增加的。

其他数据库只是被动的接受数据, RRDtool 可以对收到的数据进行计算,例如前后两个数据的变化程度(rate of change),并存储该结果。

RRDtool 要求定时获取数据,其他数据库则没有该要求。如果在一个时间间隔内(heartbeat)没有收到值,则会用 UNKN (unknow)代替,其他数据库则不会这样。

3. 安装RRDTool

3.1.安装yum源

[root@node1 ~] # rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@node1 ~] # rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

3.2.同步时间

[root@node1 ~] # ntpdate 202.120.2.101

3.3.下载rrdtool的RPM包

[root@node1 ~] # wget ftp://195.220.108.108/linux/centos/6.4/os/x86_64/Packages/rrdtool-1.3.8-6.el6.x86_64.rpm

3.4.yum安装rrdtool

[root@node1 ~] # yum -y localinstall --nogpgcheck rrdtool-1.3.8-6.el6.x86_64.rpm

3.5.查看一下安装文件

[root@node1 ~] # rpm -qa | grep rrdtool
rrdtool-1.3.8-6.el6.x86_64
[root@node1 ~] # rpm -ql rrdtool
/usr/bin/rrdcgi
/usr/bin/rrdtool #命令行工具
/usr/bin/rrdupdate
/usr/lib64/librrd .so.4 #下面是库文件
/usr/lib64/librrd .so.4.0.7
/usr/lib64/librrd_th .so.4
/usr/lib64/librrd_th .so.4.0.7
/usr/share/man/man1/bin_dec_hex .1.gz #下面是帮助文档
/usr/share/man/man1/cdeftutorial .1.gz
/usr/share/man/man1/rpntutorial .1.gz
/usr/share/man/man1/rrd-beginners .1.gz
/usr/share/man/man1/rrdbuild .1.gz
/usr/share/man/man1/rrdcgi .1.gz
/usr/share/man/man1/rrdcreate .1.gz
/usr/share/man/man1/rrddump .1.gz
/usr/share/man/man1/rrdfetch .1.gz
/usr/share/man/man1/rrdfirst .1.gz
/usr/share/man/man1/rrdgraph .1.gz
/usr/share/man/man1/rrdgraph_data .1.gz
/usr/share/man/man1/rrdgraph_examples .1.gz
/usr/share/man/man1/rrdgraph_graph .1.gz
/usr/share/man/man1/rrdgraph_rpn .1.gz
/usr/share/man/man1/rrdinfo .1.gz
/usr/share/man/man1/rrdlast .1.gz
/usr/share/man/man1/rrdlastupdate .1.gz
/usr/share/man/man1/rrdresize .1.gz
/usr/share/man/man1/rrdrestore .1.gz
/usr/share/man/man1/rrdthreads .1.gz
/usr/share/man/man1/rrdtool .1.gz
/usr/share/man/man1/rrdtune .1.gz
/usr/share/man/man1/rrdtutorial .1.gz
/usr/share/man/man1/rrdupdate .1.gz
/usr/share/man/man1/rrdxport .1.gz
/usr/share/rrdtool

3.6.查看一下命令行工具

[root@node1 ~] # rrdtool -h
RRDtool 1.3.8 Copyright 1997-2009 by Tobias Oetiker <tobi@oetiker.ch>Compiled Aug 21 2010 10:57:18
Usage: rrdtool [options] command command_options
Valid commands: create, update, updatev, graph, graphv, dump, restore,last, lastupdate, first, info, fetch, tune,resize, xport
RRDtool is distributed under the Terms of the GNU General
Public License Version 2. (www.gnu.org /copyleft/gpl .html)
For more information read the RRD manpages

4. rrdtool命令详解

4.1.创建RRD数据库

create 语法

rrdtool create filename
[--start|-b start time ]
[--step|-s step]
DS:ds-name:DST:dst arguments #最后获取的数据是PDP,更新数据时要考滤DS顺序(*把所有要更新的数据,按照DS定义的顺序用冒号格开*)
RRA:CF:cf arguments #最后获取的数据是CDP,绘图时使用的是这些数据

参数详解:

  • DS:DS 用于定义 Data Soure 。也就是用于存放结果的变量名。DS是用来申明数据源的,也可以理解为申明数据变量,也就是你要检测的端口对应的变量名,这个参数在画图的时候还要使用的。
  • DST:DST 就是DS的类型。有 COUNTER、GUAGE、DERIVE、ABSOLUTE、COMPUTE 5种。由于网卡流量属于计数器型,所以这里应该为 COUNTER 。

*RRA:RRA 用于指定数据如何存放。我们可以把一个RRA 看成一个表,各保存不同 interval 的统计结果。RRA的作用就是定义更新的数据是如何记录的。比如我们每5分钟产生一条刷新的数据,那么一个小时就是12条。每天就是288条。这么庞大的 数据量,一定不可能都存下来。肯定有一个合并(consolidate)数据的方式,那么这个就是RRA的作用了。

*PDP:Primary Data Point 。正常情况下每个 interval RRDtool 都会收到一个值;RRDtool 在收到脚本给来的值后会计算出另外一个值(例如平均值),这个 值就是 PDP ;这个值代表的一般是“xxx/秒”的含义。注意,该值不一定等于RRDtool 收到的那个值。除非是GAUGE ,可以看下面的例子就知道了

*CF:CF 就是 Consolidation Function 的缩写。也就是合并(统计)功能。有 AVERAGE、MAX、MIN、LAST 四种分别表示对多个PDP 进行取平均、取最大值、取最小值、取当前值四种类型。具体作用等到 update 操作时再说。

*CDP:Consolidation Data Point 。RRDtool 使用多个 PDP 合并为(计算出)一个 CDP。也就是执行上面 的CF 操作后的结果。这个值就是存入 RRA的数据,绘图时使用的也是这些数据。

下面是RRA与PDP、CDP之间的关系图,

(0).filename

默认是以 .rrd 结尾,但也以随你设定。

(1).--start|-b start time

设 定RRD数据库加入的第一个数据值的时间,从1970-01-01 00:00:00 UTC时间以来的时间(秒)。RRDtool不会接受早于或在指定时刻上的任何数值。默认值是now-10s;如果 update 操作中给出的时间在 –-start 之前,则 RRDtool拒绝接受。--satrt 选项也是可选的。 如果你想指定--start 为1天前,可以用CODE:--start $(date -d '1 days ago' +%s)。注意,--start 选项的值必是 timestamp 的格式。

(2).--step|-s step

指定数据将要被填入RRD数据库的基本的时间间隔。默认值是300秒;

(3).DS:ds-name:DST:dst arguments DS(Data Source)

DS:DS 用于定义 Data Soure 。也就是用于存放结果的变量名。 DS是用来申明数据源的,也可以理解为申明数据变量,也就是你要检测的端口对应的变量名,这个参数在画图的时候还要使用的。这里开始定义RRD数据的基本 属性;单个RRD数据库可以接受来自几个数据源的输入。在DS选项中要为每个需要在RRD中存储的数据源指定一些基本的属性;ds-name数据域命 名;DST定义数据源的类型,dst arguments参数依赖于数据源的类型。

案例:DS:mysql:COUNTER:600:0:100000000

DS(Data Source,数据源)表达式总共有六个栏位:
*DS 表示这个为DS表达式
*ds-name 数据域命名
*DST 定义数据源的类型
heartbeat 有效期(heartbeat),案例里的值为'600',假设要取12:00的数据,而前后300秒里的值(11:55-12:05)经过平均或是取最大或最小都算是12:00的有效值;
min 允许存放的最小值,此例允许最小为0。
max 允许存放的最大值,最大为100000000。
注,如果不想设限制可以再第五个栏位和第六个栏位以 "U:U"表示(U即Unknown)。

DST 定义数据源的类型。数据源项的后续参数依赖于数据源的类型。对于GAUGE、COUNTER、DERIVE、以及ABSOLUTE,其数据源的格式为: DS:ds-name:GAUGE | COUNTER | DERIVE | ABSOLUTE:heartbeat:min:max。DST 的选择是十分重要的,如果选错了 DST ,即使你的脚本取的数据是对的,放入 RRDtool 后也是错误的,更不用提画出来的图是否有意义了。

GAUGE :GAGUE 和上面三种不同,它没有“平均”的概念,RRDtool 收到值之后字节存入 RRA 中。

COUNTER :必须是递增的,除非是计数器溢出。在这种情况下,RRDtool 会自动修改收到的值。例如网络接口流量、收到的packets 数量都属于这一类型。

DERIVE:和 COUNTER 类似。但可以是递增,也可以递减,或者一会增加一会儿减少。

ABSOLUTE :ABSOLUTE 比较特殊,它每次都假定前一个interval的值是0,再计算平均值。

COMPUTE :COMPUTE 比较特殊,它并不接受输入,它的定义是一个表达式,能够引用其他DS并自动计算出某个值。例如 CODE:DS:eth0_bytes:COUNTER:600:0:U DS:eth0_bits:COMPUTE:eth0_bytes,8, 则 eth0_bytes 每得到一个值,eth0_bits 会自动计算出它的值:将 eth0_bytes 的值乘以 8 。不过 COMPUTE 型的 DS 有个限制,只能应用它所在的 RRD 的 DS ,不能引用其他 RRD 的 DS。 COMPUTE 型 DS 是新版本的 RRDtool 才有的,你也可以用 CDEF 来实现该功能。如:CDEF:eth0_bits=eth0_bytes,8,

参考:
http://my.oschina.net/u/1458120/blog/208857
http://www.360doc.com/content/10/1205/16/4947005_75240524.shtml
http://blog.liuts.com/post/215/

RRDTool原理简介相关推荐

  1. javascript原理_JavaScript程序包管理器工作原理简介

    javascript原理 by Shubheksha 通过Shubheksha JavaScript程序包管理器工作原理简介 (An introduction to how JavaScript pa ...

  2. Nginx 反向代理工作原理简介与配置详解

    Nginx 反向代理工作原理简介与配置详解 测试环境 CentOS 6.8-x86_64 nginx-1.10.0 下载地址:http://nginx.org/en/download.html 安装 ...

  3. DeepLearning tutorial(1)Softmax回归原理简介+代码详解

    FROM: http://blog.csdn.net/u012162613/article/details/43157801 DeepLearning tutorial(1)Softmax回归原理简介 ...

  4. DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解

    FROM:http://blog.csdn.net/u012162613/article/details/43221829 @author:wepon @blog:http://blog.csdn.n ...

  5. DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解

    FROM: http://blog.csdn.net/u012162613/article/details/43225445 DeepLearning tutorial(4)CNN卷积神经网络原理简介 ...

  6. 【Android 异步操作】Handler ( 主线程中的 Handler 与 Looper | Handler 原理简介 )

    文章目录 一.主线程中的 Handler 与 Looper 二.Handler 原理简介 一.主线程中的 Handler 与 Looper Android 系统中 , 点击图标启动一个应用进程 , 就 ...

  7. 量子计算机编程原理简介 和 机器学习

    量子计算机编程原理简介 和 机器学习 本文翻译自D-Wave公司网站 www.dwavesys.com/en/dev-tutorial-intro.html D-wave公司在2007年就声称实现了1 ...

  8. DL之CNN:卷积神经网络算法简介之原理简介——CNN网络的3D可视化(LeNet-5为例可视化)

    DL之CNN:卷积神经网络算法简介之原理简介--CNN网络的3D可视化(LeNet-5为例可视化) CNN网络的3D可视化 3D可视化地址:http://scs.ryerson.ca/~aharley ...

  9. DL之CNN:卷积神经网络算法简介之原理简介(步幅/填充/特征图)、七大层级结构(动态图详解卷积/池化+方块法理解卷积运算)、CNN各层作用及其可视化等之详细攻略

    DL之CNN:卷积神经网络算法简介之原理简介(步幅/填充/特征图).七大层级结构(动态图详解卷积/池化+方块法理解卷积运算).CNN各层作用及其可视化等之详细攻略 目录 CNN 的层级结构及相关概念 ...

最新文章

  1. linux 测试各大网站速度curl
  2. 并发--基本的线程机制
  3. 一个完整的Core Data应用
  4. 软件工程能力漫谈:比编码更重要的,是项目管理能力
  5. celeba数据集_轻松学 Pytorch 使用DCGAN实现数据复制
  6. 解决前后台发送请求或者接口之间发送请求乱码的问题
  7. php获取当前时间戳方法
  8. redux异步action_React躬行记(12)——Redux中间件
  9. 诗与远方:无题(十三)
  10. 不能使用zsh或myzsh创建/切换 包含#的分支名(zsh: bad pattern: #xxx)
  11. ajax+springmvc返回中文乱码的解决办法
  12. 如何使用花生壳5设置HTTPS映射
  13. java管理系统删除报错_Java版学籍管理系统
  14. [苹果开发者账号]04 申请苹果开发者账号 美国报税表
  15. 【弹子兵法】四国军棋棋盘、棋子与记谱【基础篇】
  16. python 发送匿名邮件或无发件人
  17. mysql数据库预处理_一种MySQL数据库中间件预处理方法与流程
  18. kubernetes (k8s) 与 Docker 关系
  19. C语言中fscanf和fprintf函数的使用
  20. 幼儿园教师计算机心得,幼儿园教师信息技术应用心得体会

热门文章

  1. OpenCV 【十六】RNG随机数发生器putText绘制文字
  2. 让你的数据离CPU更近一些
  3. 用DataReader还是DataSet?
  4. 【Qt】Qt再学习(四):Editable Tree Model Example
  5. 【Ubuntu】ubuntu设置GUI程序自启动
  6. linux驱动:音频驱动(五)ASoc之codec驱动
  7. 所有表单对象_Laravel 表单方法伪造与 CSRF 攻击防护
  8. java vuser脚本_loadrunner12中JavaVuser脚本的编写
  9. java父子表_数据库二维表转父子关系,java,stream,list
  10. maven如何在eclipse上加载