参考

http://oss.oetiker.ch/rrdtool/doc

https://calomel.org/rrdtool.html

http://www.cnblogs.com/lightideal/archive/2012/03/14/2395613.html

http://blog.liuts.com/post/215/

http://www.study-area.org/tips/rrdtool/rrdtool.html

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

http://www.cnblogs.com/orez88/articles/1886654.html

rrdtool

RRDtool是指Round Robin Database工具(环状数据库)。

Round robin是一种处理定量数据、以及当前元素指针的技术。想象一个周边标有点的圆环-这些点就是时间存储的位置。从圆心画一条到圆周的某个点的箭头-这就是指针。就像我们在一个圆环上一样,没有起点和终点,你可以一直走下去。过来一段时间,所有可用的位置都会被用过,该循环过程会自动重用原来的位置。这样,数据集不会增大,并且不需要维护。我们使用RRDtool来处理RRD数据库。使用它向RRD数据库存储提取数据。

RRD适合存储时间序列的数据。就是说你必须能够在时间的几个点上度量某些值,并提供这些信息给RRDtool。如果你能够做到这一点,RRDtool就能够存储它们。这些数值必须是数字,但是不一定要是整数。

命令

rrdtool create filename [--start|-b start time][--step|-s step][DS:ds-name:DST:heartbeat:min:max][RRA:CF:xff:steps:rows]
rrdtool info filename
rrdtool last filename
rrdgraph filename

--start

数据库开始时间,默认是now - 10s,使用utc时间。可以使用now - 1s, now - 1d, now - 1w, now - 1m, now - 1y建立不同开始时间的数据库。

--step

步进时间间隔,默认是5分钟(300s)

DS(Data Soure)

必须是 0-9,a-z,A-Z。

DST(Data Source Type)

使用GAUGE, COUNTER, DERIVE, DCOUNTER, DDERIVE, ABSOLUTE这几种类型名。注意选择合适的类型。

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

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

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

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

计算公式

Values = 300, 600, 900, 1200  # 假设RRDtool收到4个值,分别是300,600,900,1200

Step = 300 seconds # step为300

COUNTER = 1,1, 1,1 # (300-0)/300,(600-300)/300,(900-600)/300,(1200-900)/300 ,所以结果为 1,1,1,1

DERIVE = 1,1,1,1 # 同上

ABSOLUTE = 1,2,3,4 # (300-0)/300,(600-0)/300 , (900-0)/300, (1200-0)/300,所以结果为 1,2,3,4

GAUGE = 300, 600, 900, 1200 # 300 , 600 ,900 ,1200 不做运算,直接存入数据库

COMPUTE COMPUTE比较特殊,它并不接受输入,它的定义是一个表达式,能够引用其他DS并自动计算出某个值。

例如DS:eth0_bytes:COUNTER:600:0:U DS:eth0_bits:COMPUTE:bytes,8,*

heartbeat

取值有效区间。设定600,如规定时间没有产生值,则取当前时间-300 ~ +300,共600秒的平均值,用做当前的产生值

min:max

取值的选择范围,超过此区间,属无效。

RRA(Round Robin Archive)

指定数据如何存放。我们可以把一个RRA看成一个表,各保存不同interval的统计结果。比如存储一年,一月,一周,一天,就需要4条。

CF(consolidation function)

4种类型:AVERAGE、MIN、MAX、LAST,代表平均,最小,最大,最后

AVERAGE类型适合于看‘平均’情况,例如一天的平均流量

MAXIMUM MINIMUM 不适用想知道‘xxx/秒’这样的需求,而是适用于想知道某个对象在各个不同时刻的表现的需求,也就是着重点在于各个时间点

例如要看某个接口在一天内有没有超过50Mb流量的时候就要用 MAXIMUM

例如要看磁盘空间的空闲率在一天内有没有低于20%的时候就要用 MINIMUM

LAST 类型适用于‘累计’的概念

xff

steps:rows

steps步进单位,可以动态调整默认步进的周期.如steps为6, 周期就调整为5m*6=30m(0.5h)

rows采样的总记录数

如何选择steps和rows的值?

数据库step是5m(300s), 计算公式 rows = (60 / steps * default step) * 存储总时长(h)

规划存储1天,每5分钟采样1次: (60 / (1 * 5)) * 24 = 288

规划存储1周,每30分钟采样1次: (60 / (6 * 5)) * 24 * 7 = 336

实际情况,存储2倍的样本适合,1d 1:600, 1w 6:700, 1m 24:775, 1y 288:797

如果step是1m(60s)的情况,

1h 60个画图点,

1d 如果需要300左右画图点的话 288 / 24 = 12/h,steps为5(60/12), rows 600(2882)

1w 350 / 7 = 50/d, steps为20(60/3), rows 600(288
2)

1m 300 / 30 = /d

1y 360 天,每天画1个 360

RRA:AVERAGE:0.5:1:600 # hour

RRA:AVERAGE:0.5:5:600 # day

RRA:AVERAGE:0.5:30:700 # week

RRA:AVERAGE:0.5:120:800 # month

RRA:AVERAGE:0.5:1440:800 # year

PDP(Primary Data Point)

在每个interval,RRDtool都会收到一个值,RRDtool在收到脚本给来的值后会计算出另外一个值(例如平均值),这个值就是PDP。

这个值代表的一般是’xxx/秒‘的含义。注意,该值不一定等于RRDtool收到的那个值。除非是GAUGE。

CDP(Consolidation Data Point)

RRDtool使用多个PDP合并为一个CDP。也就是执行上面的CF操作后的结果。这个值就是存入RRA的数据,绘图时使用的也是这些数据。

RRA实例

RRA:AVERAGE:0.5:1:603 # 5分钟采样,存储603条记录

RRA:AVERAGE:0.5:6:603 # 30分钟采样,存储603条记录

RRA:AVERAGE:0.5:24:603 # 2小时采样,存储603条记录

RRA:AVERAGE:0.5:288:800 # 1天采样,存储800条记录

RRA:MAX:0.5:1:603

RRA:MAX:0.5:6:603

RRA:MAX:0.5:24:603

RRA:MAX:0.5:288:800

时间戳转换

date -d '1970-1-1 1276059000 sec utc' +%Y%m%d %H:%m:%S
date --date='@1435134401' +%Y%m%d %H:%m:%S date -d '2010-09-11 23:20:00' +%s

随机数区间

start=1435134401; for i in {1..288}; do time=$[$start+i*300]; value=$(shuf -i 1-100 -n 1); rrdtool update cpu.rrd $time:$value; done

# shuf -i 1-100 -n 1 取1-100的随机数

example

rrdtool create Flow.rrd \
--start $(date -d "1 year ago" +%s) \
--step 300 \
DS:eth0_in:GAUGE:600:0:5000 \
DS:eth0_out:GAUGE:600:0:5000 \
RRA:AVERAGE:0.5:1:600 \
RRA:AVERAGE:0.5:6:700 \
RRA:AVERAGE:0.5:24:775 \
RRA:AVERAGE:0.5:288:797 \
RRA:MAX:0.5:1:600 \
RRA:MAX:0.5:6:700 \
RRA:MAX:0.5:24:775 \
RRA:MAX:0.5:444:797 \
RRA:MIN:0.5:1:600 \
RRA:MIN:0.5:6:700 \
RRA:MIN:0.5:24:775 \
RRA:MIN:0.5:444:797

rrdtool graph COUNTER/day.png -w 700 -h 200 \
-n TITLE:11:'/opt/rrdtool/wdjt.ttf' \
-n UNIT:8:'/opt/rrdtool/simhei.ttf' \
-n LEGEND:8:'/opt/rrdtool/simhei.ttf' \
-c SHADEA#DDDDDD \
-c SHADEB#808080 \
-c FRAME#006600 \
-c FONT#006699 \
-c ARROW#FF0000 \
-c AXIS#000000 \
-c BACK#FFFFFF \
-Y -X 3 \
-t "服务器流量统计" -v "流量" \
--start -1d --end now \
--x-grid MINUTE:12:HOUR:1:HOUR:1:0:'%H' \
DEF:value1=COUNTER/eth0.rrd:eth0_in:AVERAGE \
DEF:value2=COUNTER/eth0.rrd:eth0_out:AVERAGE \
CDEF:value3=value1,value2,+ \
COMMENT:" \n" \
COMMENT:" \n" \
AREA:value1#00ff00:上传 \
GPRINT:value1:LAST:"当前\:%8.0lf" \
GPRINT:value1:AVERAGE:"平均\:%8.0lf" \
GPRINT:value1:MAX:"最大\:%8.0lf" \
GPRINT:value1:MIN:"最小\:%8.0lf" \
COMMENT:" \n" \
LINE2:value2#4433ff:下载 \
GPRINT:value2:LAST:"当前\:%8.0lf" \
GPRINT:value2:AVERAGE:"平均\:%8.0lf" \
GPRINT:value2:MAX:"最大\:%8.0lf" \
GPRINT:value2:MIN:"最小\:%8.0lf" \
COMMENT:" \n" \
COMMENT:"─────────────────────────────────────────────\n" \
LINE3:value3#ff8833:总流量 \
COMMENT:" \n" \
HRULE:350000#ff0000:"报警值" \
COMMENT:" \n" \
COMMENT:"\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t最后更新 \:$(date '+%Y-%m-%d %H\:%M')\n" -Y

Time range

--start time # 开始时间

--end time # 结束时间

Labels

--title # 水平标题

--vertical-label # 垂直标题

Size

--width --height # 宽度 x 高度,默认400 x 100

Limits

--upper-limit

--lower-limit

--rigid

--alt-autoscale

--alt-autoscale-min

--alt-autoscale-max

--no-gridfit

X-Axis

--x-grid GTM:GST:MTM:MST:LTM:LST:LPR:LFM # x轴竖线和日期标记位置

GTM:GST 控制次要格网线的位置。用于整点内的划分,比如1小时内,每15分钟划1条线。

GTM 是一个时间单位,可以是 SECOND、MINUTE、HOUR、DAY 、WEEK、MONTH、YEAR。GST 则是一个数字,控制每隔多长时间放置一根次要格线。例如我们要画一个1天的图表,决定每15分钟一根次要网格线,则格式为 MINUTE:15。

MTM:MST 控制主要网格线的位置。用于整点,比如每1小时划1条线。

LTM:LST 控制每隔多长时间输出一个label。设置为每2小时。

LPR:LFM LTM:LST只是决定label的显示位置,没有指定要显示什么内容。LPR指的是如何放置label。

如果LPR为0,则数字对齐格线(适用于显示时间)。如果不为0,则会做一些偏移(适用于显示星期几、月份等)。

LFM则需要熟悉一下date命令的参数,常用的有%a(星期几)、%b(月份)、%d(天)、%H(小时)、%M(分)、%Y(年)。

显示小时与分,如'%H:%M'

--week-fmt # 默认使用'Week %V'显示周,可以换用其他

Y-Axis

--y-grid grid step:label factor # 类似x-grid,建议不用。

--alt-y-grid # 根据y轴区间自动划分网格

--units-exponent

--alt-y-grid自动对Y轴的值进行调整,以k为单位显示。但如果你不想以k显示,而是想固定以某个单位来显示(M,b)。

使用--units-exponent value,value范围是-18、-15、-12、-9、-6、-3、0、3、6、9、12、15、18。

0表示以原值显示,3表示数值除以1000,以k为单位显示,6就是以M显示,9就是以G显示,12则T。

color

--color COLORTAG#rrggbb[aa]

COLORTAG

BACK background # 背景

CANVAS for the background of the actual graph # 图形数据区

SHADEA for the left and top border # 左上边界

SHADEB for the right and bottom border # 右下边界

GRID, MGRID for the major grid # 主网格线,次网络线

FONT for the color of the font # 字体

AXIS for the axis of the graph # 箭头线

ARROW for the arrow head pointing up and forward # 箭头

FRAME for the line around the color spots # 数据标志说明边框

[aa] # 透明模式

00 is off, FF is maximum

font

--font FONTTAG:size[:font]

FONTTAG

DEFAULT sets the default value for all elements # 全部数据

TITLE for the title # 标题数据

AXIS for the axis labels # x轴数据

UNIT for the vertical unit label # y轴数据

LEGEND for the graph legend # 刻字数据

WATERMARK for the watermark on the edge of the graph # 水印数据

Data and variables

DEF(Definition)

DEF:vname=rrdfile:ds-name:CF[:step=step][:start=time][:end=time]

vname变更名称

rrdfile文件位置

ds-name数据源名称

CF CF名称

VDEF(Variable Definition)

VDEF:vname=RPN expression

CDEF(Calculation Definition)

CDEF:vname=RPN expression

使用数组操作,类似于python的join, 操作优先画图,比如byte to bit

graph

COMMENT:text # 打印文本,如换行,最大值,最小值等等

GPRINT:vname:format # 输出值,比如最大值是什么?

LINE[width]:value[#color][:[legend][:STACK][:skipscale][:dashes[=on_s[,off_s[,on_s,off_s]...]][:dash-offset=offset]]]

画线,可以指定color,legend,STACK

rrdtool fetch if_octets-eth0.rrd AVERAGE --start -1h --end now-60s

rrdtool的更多相关文章

  1. ubuntu和centos安装RRDTool——cacti前置技能

    Installing Pre-Requisites Note that RRDTool 1.0.x versions included all dependancies, but 1.2.x vers ...

  2. PHP安装rrdtool扩展

    首先,我的环境是Centos 6.5 PHP版本是5.51.首先安装rrdtool需要的依赖库文件   yum -y install pango* 2.先服务器安装rrdtool  wget http ...

  3. RRDTool 三个命令的使用

    要了解rrdtool如何使用就要先从rrd的数据存储方式开始,rrdtool就是为了操作这个数据库的工具,抄来下面一段文字解释. 0x01 什么是rrd数据库 所谓的“Round Robin” 其实是 ...

  4. RedHat6.2 下RRDTool安装方法

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

  5. RRDTool 存储原理简介——基于时间序列的环型数据库

    转自:http://www.jianshu.com/p/b925b1584ab2 RRDTool是一套监测工具,可用于存储和展示被监测对象随时间的变化情况.比如,我们在 Windows 电脑上常见的内 ...

  6. python使用rrdtool时 argument 0 must be string的问题

    在updatev rrdfile时, ret = rrdtool.updatev(filename, ds) 报了argument 0 must be string的异常,经查是因为python 的r ...

  7. Cacti 是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具

    Cacti 是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具. mysqlreport是mysql性能监测时最常用的工具,对了解mysql运行状态和配置调整都有很大 ...

  8. 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 ...

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

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

  10. 安装RRDtool 1.4.5

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

随机推荐

  1. centos操作---搭建环境 安装python

    1.安装python3.6.2 安装依赖 yum -y groupinstall "Development tools" yum -y install zlib-devel bzi ...

  2. jvm与tomcat启动优化配置

    JVM 优化 Java 的内存模型分为: Young,年轻代(易被 GC).Young 区被划分为三部分,Eden 区和两个大小严格相同的 Survivor 区,其中 Survivor 区间中,某一时 ...

  3. Mybatis学习笔记(九) —— Mybatis逆向工程

    一.什么是Mybatis逆向工程? 简单的解释就是通过数据库中的单表,自动生成java代码. 我们平时在使用Mabatis框架进行Web应用开发的过程中,需要根据数据库表编写对应的Pojo类和Mapp ...

  4. SQL-Error-1

    错误描述:String   or   binary   data   would   be   truncated. 原因:字段长度不够

  5. Sharepoint 页面超链接地址打开

    SharePoint页面: http://test:81/pages/nihao.aspx 页面超链接:<a href="www.baidu.com" >百度</ ...

  6. 对bootstrap模态框的小尝试

    bootstrap中有一个“模态框”插件,我理解的意思就是一个具有全局遮罩的弹窗提示,官方解释是:模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗 ...

  7. java——删除链表中等于给定值的所有元素

    class ListNode{ int val ; ListNode next; public ListNode(int x) { val = x; } public ListNode(int[] a ...

  8. 转 windows下安装pycharm并连接Linux的python环境 以及 windows 下notepad ++编辑 linux 的文件

    ######sample 1:windows下安装pycharm并连接Linux的python环境 https://www.cnblogs.com/junxun/p/8287998.html wind ...

  9. transient关键字与序列化、反序列化

    transient,中文翻译是短暂的,和对象序列化.反序列化有关. 一个类只要实现了Serializable接口,则该类实例就可以序列化,具体来说实例的每个非静态成员变量都会序列化.注意是非静态成员变 ...

  10. python3+Appium自动化12-H5元素定位环境搭建

    前言 在混合开发的App中,经常会有内嵌的H5页面.那么这些H5页面元素该如何进行定位操作呢? 针对这种场景直接使用前面所讲的方法来进行定位是行不通的,因为前面的都是基于Andriod原生控件进行元素 ...