一、RRDtool 的功能及使用介绍

定义:RRDtool(Round Robin Database Tool)是一个用来处理定量数据的开源高性能数据库。

1.RRDtool 的特性

由于 RRDtool 设计的初衷就是为监控开发的,所以与其他的数据库相比,RRDtool 有以下特性:

  • 有一个强大的绘图引擎,可以根据数据库内容,创建 png 格式的图片。图 1,图 2 和图 3 所示的就是三张通过 rrdtool graph 命令生成的网络带宽波形图。

图 1. 最近一小时的网卡收发速率

图 2. 最近一天的网卡收发速率

图 3. 最近一年的网卡收发速率

  • 是一个基于时间序列的环形数据库。可以想象一个圆,圆周上有一些均匀分散的点。这些点就是数据存储的位置。从圆心画一条到圆周的某个点的箭头,这个箭头就是指向当前元素的指针。在当前元素被读或写之后,指针就往下一个元素移动。当所有位置都被用过,原来的位置就会被重用。这样,数据库永远不会满,不需要维护。
  • 可以被配置成存储当前值与前一个值变化速度,而不是简单地存储提供的值。
  • 要求在预定的时间间隔中取得监控数据,如果没有得到更新的数据,就将该时间段的值设为 UNKNOWN.

2.RRDTool 中的数据处理

RRD 数据库存储的值并不一定等于更新时提供的值。这个值是根据数据库设定对提供的值进行计算得到的。计算过程可以分为三个步骤:

1.根据用户定义的数据类型对提供的值进行计算,具体计算方法见表 1

数据类型 计算方法
GAUGE 等于提供的值,适用于提供值为速度计、温度或人数等
COUNTER 当前值与前一个值的变化速度,要求递增的值,如计数器,里程表等。如果计数器溢出,RRDTool会检查溢出是32位还是64位,并相应的加上合适的值
DERIVE 当前值与前一个值的变化速度,不要求递增。除了不进行溢出处理之外,该类型的内部处理机制与COUNTER相同
ABSOLUTE 假定前一个值始终为0,求变化速度。可用来存储读取后复位的计数器

表 1.RRDtool 中的数据类型

1)整形

输入的时间经常会不在时间间隔的边界,所以需要根据前后两个有效的更新进行线性整形。(有效时间是被 heartbeat 设定控制的 )假定你在监视一个增长速度不均匀的计数器,每分钟检查一次,在 4:30 是 2,5:30 是 4,那么第 5 分钟的变化速度为 3。整形后得到的值称为 PDP(Primary Data Points)。

2)合并

RRDtool 最终会根据设定对 PDP 进行合并,得到 CDP(Consolidated Data Point)。CDP 可以是多个(可以是一个)PDP 的平均值、最小值、最大值以及最近的值。CDP 是 RRD 数据库中最终存储的数据。这对于输出监控数据时是非常有利的。假设每个 PDP 的时间间隔是 1 分钟,如果你想查看 1 天的数据,而且你不需要查看每一分钟具体的监控数据,只是想看一下这一个天中每半个小时的监控数据。如果 RRD 中存储的是 PDP, 在输出时就需要对当天的 PDP 每 30 个进行合并。合并需要时间,如果你需要合并的数据量更大,如 1 个月或是 1 年,那这个合并的时间会非常长。所以 RRDtool 选择在数据库更新时对 PDP 进行合并,保存 CDP。用户可以根据需要设定如何对 PDP(非 UNKNOWN)进行合并。

合并方式 计算方法
AVERAGE 平均值
MIN 最小值
MAX 最大值
LAST 最近值

表 2.PDP 的合并方式

二、RRDTool的安装

1.通过yum 安装,rrdtool版本1.3.8

#yum install -y rrdtool  
#yum install -y gcc

#yum install -y rrdtool-python

2.安装最新版本 1.4.7

# wget http://pkgs.repoforge.org/rrdtool/rrdtool-devel-1.4.7-1.el6.rfx.x86_64.rpm
# wget http://pkgs.repoforge.org/rrdtool/rrdtool-1.4.7-1.el6.rfx.x86_64.rpm
# wget http://pkgs.repoforge.org/rrdtool/perl-rrdtool-1.4.7-1.el6.rfx.x86_64.rpm
# wget http://pkgs.repoforge.org/rrdtool/python-rrdtool-1.4.7-1.el6.rfx.x86_64.rpm

安装下列辅助工具

#yum install libdbi ruby xorg-x11-fonts-Type1 -y
#yum install perl-Time-HiRes perl-TermReadKey -y

卸载旧版本

# yum erase rrdtool -y

正式安装

# rpm -Uvh perl-rrdtool-1.4.7-1.el6.rfx.x86_64.rpm python-rrdtool-1.4.7-1.el6.rfx.x86_64.rpm rrdtool-1.4.7-1.el6.rfx.x86_64.rpm rrdtool-devel-1.4.7-1.el6.rfx.x86_64.rpm

3.RRDTool 的使用

1. 创建 RRD 数据库

语法:

rrdtool create filename [--start|-b start time] [--step|-s step] [--no-overwrite] [DS:ds-name:DST:dst arguments] [RRA:CF:cf arguments]

参数:

1) create 关键字,用于创建一个 RRD 数据库文件

filename 文件名,扩展名最好是 .rrd

--start|-b start time 第一个记录的开始时间,默认是当前时间减 10 秒。表示方法为从 1970-01-01 UTC 到指定时间的秒数

--step|-s step 每条记录的时间间隔,默认为 300 秒

--no-overwrite 不覆盖同文件名的数据库文件

2) DS:ds-name:DST:dst arguments

DS 关键字,用于定义数据源。一个 RRD 文件可以有多个 DS。

ds-name 数据源名称,可以是 1 ~ 19 个 [a-zA-Z0-9_] 中的任意字符,一个 RRD 数据库文件可以有多个数据源。

DST 数据类型。支持的数据类型有:

GAUGE, COUNTER, DERIVE, ABSOLUTE,COMPUTE

DS:ds-name:GAUGE | COUNTER | DERIVE | ABSOLUTE:heartbeat:min:max

DS:ds-name:COMPUTE:rpn-expression

COMPUTE 存放对其他数据源进行公式计算的结果。

Heartbeat 心跳,两次数据源更新之间将数据源的数值确定为 UNKNOWN 前所允许的最大秒数。Min:max PDP 的最小值 / 最大值。

3) RRA:CF:cf arguments

RRA 关键字,用于定义 RRA(round robin archive) 档。一个 RRD 数据库文件有至少一个的 RRA 档。CDP 就被保存于 RRA 中。

CF 合并方式,可以是 AVERAGE,MIN,MAX,LAST

RRA:AVERAGE | MIN | MAX | LAST:xff:steps:rows

xff 定义合并时间间隔内允许的 PDP 为 UNKNOWN 的比例,超过这个比例时,CDP 被置为 UNKNOWN。

steps 定义多少个 PDP 合并一个 CDP。

rows 定义一个 RRA 档保存有多少条记录。

demo:#创建一个rrd文件 create_rrd.py

#coding=utf-8

import rrdtool,time

rrdb=rrdtool.create('mysql.rrd','--step','3','--start','1402643365',#数据库名称:mysql.rrd;每三秒获取一次数据;从2014年6月18日15时开始

'DS:mysqlselect:COUNTER:5:0:U',#数据源名称:mysqlselect,类型是Counter类型(不断增加的数值;5是heartbeat 0是最小值 U表示最大值,这里表示未知;详细介绍参考:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=864861&page=1

'RRA:AVERAGE:0.5:1:28800',#RRA用于指定数据如何存放

'RRA:AVERAGE:0.5:10:2880',

'RRA:MAX:0.5:10:2880',

'RRA:LAST:0.5:10:2880')

2. 更新 RRD 数据库

语法:

rrdtool {update | updatev} filename [--template|-t ds-name[:ds-name]...] [--daemon address] [--] N|timestamp:value[:value...] at-timestamp@value[:value...] [timestamp:value[:value...] … ]

参数:

1) update/updatev 关键字,用于更新数据库

updatev 会输出磁盘上数据库文件更新后输出更新信息。由于 updatev 需要直接的磁盘访问,所有不能与 --daemon 共用。

filename 需要更新的 RRD 数据库的文件名

2) --template|-t ds-name[:ds-name]...

默认情况下,需要按照数据源定义的顺序更新。该参数允许你指定要更新的数据。

3) --daemon address

使用缓存后台程序更新数据库,而不直接访问磁盘。

4)N|timestamp:value[:value...]

更新时间及数据。时间格式可以是 N| 时戳;N 表示现在;时戳以自 1970-01-01 以来的秒数来表示。 如果使用负数时间(当前时间之前多长时间),需要使用—与其它选项区分开。用 U 表示数据的值为 UNKNOWN。

at-timestamp@value[:value...]

更新时间也可以使用 AT 风格表示。

环境变量 RRDCACHED_ADDRESS 与 --daemon 选项的作用是一样的,如果两者都出现的话,前者优先。

demo:#使用rrdtool update更新网卡流量 getselect.sh(这里用到snmp简单网络管理协议,具体安装可以参考:http://www.cnblogs.com/smallcoderhujin/p/3785731.html

while true; do

SELECT=`snmpget -v 2c -c public [your host ip] ifInOctets.2 | sed -e 's/.*ter32: \(.*\)/\1/'`

rrdtool update mysql.rrd N:$SELECT

sleep 3

done

3. 读取数据

语法:

rrdtool fetch filename CF [--resolution|-r resolution] [--start|-s start] [--end|-e end] [--daemon address]

参数:

1) fetch 关键字,用于取数据。

2) filename 需要读取的文件的文件名

3) CF 需要读取数据的合并方式 (AVERAGE,MIN,MAX,LAST)

4) --resolution|-r resolution (default is the highest resolution)

解析度,也就是你要取数据的时间间隔(单位:秒);rrdfetch 会尽量找到最匹配的 RRA。默认为数据库文件支持的最高解析度,即时间间隔最短的;如果想取的不是最高解析度的 RRA,假设要取得的是解析度为 x 的 RRA,开始时间和结束时间必须落在期望解析度的边界点上,即需要满足以下条件:

a.start 时间和 end 时间都是 x 的倍数

b.start 时间和 end 时间都在 RRA 记录的时间范围内。

5) --start|-s start (default end-1day)

开始时间;支持时戳和 AT 风格;默认是 1 天前。

6) --end|-e end (default now)

结束时间;格式与开始时间相同;默认是现在;

7) --daemon address

缓存后台程序地址。如果指定的话,在读取之前,会发 flush 指令给缓存后台程序将缓存的数据同步到磁盘。

demo:#查询,查询2014.6.12 15:50:25至2014.6.12 15:51:25之间的数据

import rrdtool

print rrdtool.fetch('mysql.rrd','AVERAGE','--start','1402645825','--end','1402645885')

4.绘图

demo:#绘图 graph_rrd.py(需要注意的是数据库的名称,数据源名称需要一致)

#coding=utf-8

import rrdtool

rrdtool.graph('mysql.png','--start','1402645825',

'--title','mysql select',

'--vertical-label','selects/3',

'DEF:select3=mysql.rrd:mysqlselect:AVERAGE:step=3',

'LINE1:select3#FF0000:select',)

5.效果图

效果图:

参考:

http://my.oschina.net/guol/blog/136023

http://freeloda.blog.51cto.com/2033581/1307492

http://bbs.hexun.com/money/post_568_6335152_1_d.html

http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=864861&page=1


RRDtool 安装和使用的更多相关文章

  1. RedHat6.2 下RRDTool安装方法

    在安装ganglia的时候,需要安装ttdtol, 否则是不运去安装的.查可很多,这个可以. 我的环境: [hadoop@host8 ~]$ lsb_release -aLSB Version: :c ...

  2. Nagios+pnp4nagios+rrdtool 安装配置nagios(一)

    基于的软件版本 Apache-2.0.63  php-5.3.2 nagios-3.2.3  nagios-plugins-1.4.15  rrdtool-1.4.5 nrpe-2.12 pnp4na ...

  3. Nagios+pnp4nagios+rrdtool 安装配置为nagios添加自定义插件(三)

    nagios博大精深,可以以shell.perl等语句为nagios写插件,来满足自己监控的需要.本文写mysql中tps.qps的插件,并把收集到的结果以图形形式展现出来,这样输出的结果就有一定的要 ...

  4. Nagios+pnp4nagios+rrdtool 安装配置nagios被监控端NRPE配置(二)

    NRPE监控插件基础 NRPE总共由两部分组成: (1).check_nrpe插件,运行在监控主机上. (2).NRPE daemon,运行在远程的linux主机上(通常就是被监控机) 整个的监控过程 ...

  5. 安装RRDtool 1.4.5

    安装rrdtoolRrdtool安装需要cairo.libxml2.pango库支持,可通过yum安装安装libart_lgpl-devel这个包yum -y install libart_lgpl- ...

  6. xenserver安装使用

    1.下载参考:http://blog.sina.com.cn/s/blog_61c07ac50102vf55.html 2.安装(个人笔记本配置了12G的内存,所以在VM Workstation 11 ...

  7. centos 安装cacti监控

    CentOS 6下Cacti搭建文档 安装依赖关系 yum -y install mysql-devel httpd php php-pdo php-snmp php-mysql lm_sensors ...

  8. 安装与配置cacti 0.8.8b

    cacti安装与配置 一.安装所需要的软件 Apache    安装Apache文档 Mysql      安装Mysql文档 Php       安装PHP文档 Rrdtool    安装rrdto ...

  9. [cacti]nginx+php+cacti+mysql+php-fpm 安装小记

    网上教程很多,但是nginx不太多,下面安装时候主要参考的篇文章: http://54im.com/linux/linux-cacti-cn-install.html http://www.tecmi ...

随机推荐

  1. 深入hash

    hash真的很好用,这些杂一点的知识点我觉得还是很有必要的,对还有离散化. 1<=N<=1,000,000,其它所有数据都在[0...1,000,000,000]范围内 看起来很简单一道水 ...

  2. Python判断字符串是否为字母或者数字

    严格解析:有除了数字或者字母外的符号(空格,分号,etc.)都会Falseisalnum()必须是数字和字母的混合isalpha()不区分大小写 str_1 = "123" str ...

  3. 转:AOP与JAVA动态代理

    原文链接:AOP与JAVA动态代理 1.AOP的各种实现 AOP就是面向切面编程,我们可以从以下几个层面来实现AOP 在编译期修改源代码 在运行期字节码加载前修改字节码 在运行期字节码加载后动态创建代 ...

  4. 20165317Java实验三敏捷开发与XP实践

    实验三 敏捷开发与XP实践实验报告 实验目的 安装 alibaba 插件,解决代码中的规范问题.再研究一下Code菜单,找出一项让自己感觉最好用的功能. 在码云上把自己的学习搭档加入自己的项目中,确认 ...

  5. android实现手势锁

    通过简单的设置后即可实现简单的手势锁: setLineVisible方法设置是否显示手势路径: setLineWidth方法设置手势路径连线的粗细: setLineColor方法设置常规状态手势路径连 ...

  6. java读取配置文件的信息

    1. 首先,工程结构如下: 注:a. 蓝色标注的两个文件是和com包平级的,都在src下.EnnNotificationPushProxy.ini是这个工程的配置文件,log4j.properties ...

  7. ubuntu上第一个hello程序

    1.终端中输入gedit  hello.c ,然后输入程序: 2.使用gcc编译器,编译出在PC上运行的hello可执行程序:gcc  ./hello.c  -o   hello-pc; 3.使用ar ...

  8. df 查看磁盘大小

    [root@salt-server- sh]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_roo ...

  9. rpm 安装软件包

    RPM 是RedHat Package Manager (RedHat软件包管理工具)类似windows里面的“添加/删除程序”,rpm执行安装包 RPM执行安装.删除.更新 常用命令组合 -ivh: ...

  10. mysql 权限管理 目录

    mysql 权限管理介绍 mysql 权限管理 记录 mysql 权限管理 grant 命令 mysql 权限管理 revoke 回收权限 命令 mysql 权限管理 针对库 授权 db.* mysq ...