RRD 时序数据库

RRD数据库

rrdtool

RRD数据库是一个环形的数据库,大小固定,可以绘图,不需要运维,时刻代表存储的数据,指针代表的是哪一个时刻,随着时间的推移,之前写入的数据会被当前的数据覆盖,如图所示:

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

dst arguments: heartbeat:min:max

DST的取值:COUNTER:GAUGE:DERIVE:ABSOLUTE:COMPUTE

DS:DS 用于定义 Data Soure 。也就是用于存放结果的变量名。DS是用来申明数据源的,也可以理解为声明数据变量,也就是你要检测的端口对应的变量名,这个参数在画图的时候还要使用的。

heartbeat 有效期(heartbeat),案例里的值为'600',假设要取12:00的数据,而前后300秒里的值(11:55-12:05)经过平均或是取最大或最小都算是12:00的有效值;

像是容错时间段,需要跟step配合使用,如果step=60s,heartbeat=60s,需要你每隔60s就向rrd插入数据,举例:如果6:00插入了一次数据,6:01没有插入数据,那么这个时刻的数据 就是null;如果heartbeat=120s,你在6:01没有插入数据,但是在6:02插入了数据,那么6:01的数据等于6:02的数据。

min 允许存放的最小值,此例允许最小为0。

max 允许存放的最大值,最大为100000000。

 

 

RRA

cf arguments: xff:steps:rows

CF的取值有:AVERAGE:MAX:MIN:LAST  (进行取平均、取最大值、取最小值、取当前值四种类型

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

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

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

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

xff:表示一次压缩区间允许有多少比例的未知的PDP, 超过比例的话对应的CDP也称为未知.

STEPS: 多少个PDP 合成一个CDP

ROWS: RRD文件中存储的数据条数

step*steps*rows的值就是rrd文件可以存储多长时间的数据

 

生成rrd文件的示例:

rrdtool create myrrdtool.rrd

--step 1

DS:speed:COUNTER:120:20:60

DS:light:GAUGE:120:20:60

DS:mile:DRIVE:120:20:60

DS:weight:ABSOLUTE:120:20:60

RRA:AVERAGE:0.5:5:12

RRA:AVERAGE:0.5:10:30

RRA:AVERAGE:0.5:30:24

RRA:AVERAGE:0.5:60:24

 

2、更新rrd数据库

rrdtool  update  rrdname  timestamp:value

示例:

rrdtool update myrrdtool.rrd 1559728219:1:2:2:1
rrdtool update myrrdtool.rrd 1559728220:13:5:7:2
rrdtool update myrrdtool.rrd 1559728221:14:6:9:8
rrdtool update myrrdtool.rrd 1559728222:17:13:16:14
rrdtool update myrrdtool.rrd 1559728223:19:19:18:22
rrdtool update myrrdtool.rrd 1559728224:25:22:23:27
rrdtool update myrrdtool.rrd 1559728225:26:27:26:30
rrdtool update myrrdtool.rrd 1559728226:29:29:29:34
rrdtool update myrrdtool.rrd 1559728227:33:38:38:46
rrdtool update myrrdtool.rrd 1559728228:36:40:44:56
rrdtool update myrrdtool.rrd 1559728229:37:43:47:59
rrdtool update myrrdtool.rrd 1559728230:38:45:49:66
rrdtool update myrrdtool.rrd 1559728231:39:46:50:68
rrdtool update myrrdtool.rrd 1559728232:40:48:55:78
rrdtool update myrrdtool.rrd 1559728233:46:49:67:80

3、Rrdtool graph语法介绍

rrdtool graph filename [options.........]

[-s|--start time]

[-e|--end time]

[-S|--step seconds]

[-t|--title string]

[-V |--Vertical-label string ]

[-w|--width pixels]

[-h|--height pixels]

[-j|--only-graph]

[-D|--full-size-mode]

 

OPTION:

Graph Limits

[-u | --upper-limit value]:     显示数值的最大上限的值

[-l | --lower-limit value]:    显示的最低下限的值

[-r | --rigid ]:                不会自动缩放,以定义的最大值和最小值来显示

[-A | --alt-autoscale ]:        启用自动缩放,但是最大的和最小的是不能超过上面的范围

[-J | --alt-autoscale-min]:     只自动缩放最小值

[-M | --alt-autoscale-max ]:    只自动缩放最大值

[-N | --no-gridfit]:            不显示网格线

 

图片全局定义

   [-c| --color COLORTAGE #rrggbb[aa]]

       BACK          #背景色

       CANVAS        #画布颜色

       SHADEA        #左边和上边的颜色

       SHADEB        #右边和下边的颜色

       GRID,MGRID   #主网格线的颜色

       FONT          #字体颜色

       AXIS          #坐标轴的颜色

       FRAME         #边框颜色

       ARROW         #箭头的颜色

    -n | --font FONTTAG(字体名字):size(大小):[font(路径)]   #指定字体的参数

    [-R|--font-render-mode(字体格式) {normal(正常),light(发亮),mono(粗体)}]

    [-a|--imgformat PNG|SVG|EPS|PDF]   #图像输出格式

    [-W| --watermark string ]          #加水印

数据与变量

定义数据获取方式:

  DEF:vname(变量名,只能包含数字和字母,最长不能超过255字符)=rrdfile(rrd文件路径):ds-name(数据源名称):CF(聚合函数)[:step=step][:start=time][:end=time]

  CDEF:vname=RPN expression

  VDEF:vname=RPN expression

 

图片

线状图:

   LINE[width(线条的粗细程度,1最细的3是最粗的)

   :value(上面定义的变量名称)[#color(线条颜色)]

   [:[legend(底面的标签名称)][:STACK]]

   [:dashes[=on_s[,off_s[,on_s,off_s]...]

   [:dash-offset=offset]

面积图:

    AREA:value[#color][:[legend][:STACK]]

数字报表:

GPRINT:vname:CF:format   报表的数据部分

COMMENT:text  用来输出一些字符串(要换行需要加上:\n  ,空格需要加上  空格+\:“  \”)

生成图像示例:

rrdtool graph 11_1.png \
--start 1556260620 \
--end 1556264788 \
--title 流量趋势图 \
--vertical-label 流量值 \
--width 800 \
--step 300 \
DEF:value1=11.rrd:traffic_in:AVERAGE \
DEF:value2=11.rrd:traffic_out:AVERAGE \
COMMENT:"\n" \
COMMENT:"-----------------当前值-----------平均值-----------最大值------------最小值--------\n" \
COMMENT:"\n" \
AREA:value1#00FF00:"下行流量" \
GPRINT:value1:LAST:%10.2lf \
GPRINT:value1:AVERAGE:%10.2lf \
GPRINT:value1:MAX:%10.2lf \
GPRINT:value1:MIN:%10.2lf \
COMMENT:"\n" \
LINE2:value2#ff0000:"上行流量":STACK \
GPRINT:value2:LAST:%10.2lf \
GPRINT:value2:AVERAGE:%10.2lf \
GPRINT:value2:MAX:%10.2lf \
GPRINT:value2:MIN:%10.2lf \

rrd.png

发布了35 篇原创文章 · 获赞 0 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/tealala/article/details/99449436