RRD数据库
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 \ |