Round Robin Database
流程
rrdtool create
rrdtool update
rrdtool graph
解析度(RESOLUTION)
参考
流程
rrdtool create 创建rrd数据库
rrdtool update 更新数据库中的值
rrdtool graph 画图
名词解释
在阅读以下内容之前,先来个名词解释,方便回头查阅
RRA: Round Robin Archives 可理解为RRD中的小归档;
CF: Consolidation Functions 归并函数;
DS: Data Source 数据源;
DST: Data Source Type 数据源类型;
PDP: Primary Data Point 由数据源得到的数据点;
CDP: Consolidation Point 由CF计算得到的数据点;
打个比方
隔壁王大爷是个报纸收藏爱好者,每天都会从邮递员小哥那儿(DS)拿到今天的报纸如xx报,xx报等(DST)。这时间一长啊,王大爷开始发愁这报纸怎么放啊,不能老丢在一堆儿啊,还想时不时地翻翻旧报纸,回味回味青涩时光呢。想个法。。。。。。
王大爷就想了个发儿,我找个屋子(RRD)专门放这些报纸,里面放几排书架(RRA),嘿,你还别说,有点图书室的霉味了。那该怎么摆呢?
a) 近几天的报纸看的比较多,那就近10的每天(CF)都留着放到书架1(RRA1)—10张
b) 近一个月呢?那就取近30天的每三天有大事情的那一天(CF)报纸留着放书架2(RRA2)—10张
c)近一年呢?那就取近300天,每10天天(CF)的报纸留着放书架3(RRA3)—10张
d)…
这样啊王大爷一间屋子总存有近10年的报纸,超期的就卖了,因为屋子装不下。
这样的方法好是好,可是苦了王大爷得每天整理啊~~~
其实以上也就是RRD的大致思路了,您需要的就是熟悉下每个参数了
rrdtool create
这个函数用于创建RRD数据库,需要哪些内容呢?名字,多久取值一次,从哪取值,值的类型呢,超时了咋办。怎么归档呢:多久合并一次,存储多少合并记录等等。。。
rrdtool create filename [--start|-b start time] [--step|-s step] [--template|-t template-file] [--source|-r source-file] [--no-overwrite|-O] [--daemon|-d address] [DS:ds-name[=mapped-ds-name[[source-index]]]:DST:dst arguments] [RRA:CF:cf arguments]
官方参数给了这么多,其实常用的也只是:
-s 表示step,多久取一次值;
DS:ds-name:{GAUGE | COUNTER | DERIVE | DCOUNTER | DDERIVE | ABSOLUTE}💓min:max
这个表示数据源类型,心跳时间(过了就给unknown),值的范围(小,大);
RRA:{AVERAGE | MIN | MAX | LAST}:xff:steps:rows 表示归档的属性:归并函数,unknown值大占比,步长(n个step),步数(即大小)
xff:表示当该RRA的时间间隔内unkown值占比为多少时,归并之后的值被记为unknown.
来个栗子:
rrdtool create temperature.rrd --step 300 \
DS:temp:GAUGE:600:-273:5000 \
RRA:AVERAGE:0.5:1:1200 \ // 这里对1个PDP取 average,实际就是一个 PDP
RRA:MIN:0.5:12:2400 \ // 12个PDP min 构成1个CDP,RRA存有2400个CDP的RRA
RRA:MAX:0.5:12:2400 \ // 12个PDP max 构成1个CDP,RRA存有2400个CDP的RRA
RRA:AVERAGE:0.5:12:2400 // 12个PDP average 构成一个CDP,RRA存有2400个CDP的RRA
1
2
3
4
5
6
rrdtool update
rrdtool {update | updatev} filename [--template|-t ds-name[:ds-name]...] [--skip-past-updates|-s] [--daemon|-d address] [--] N:value[:value]... timestamp:value[:value]... at-timestamp@value[:value]...
这个函数主要用于更新数据,要添加数据:1. 时间点 2.数据
参数常用的是:
{**N** | *timestamp*}**:***value*[**:***value*]...
栗子呢
rrdtool update demo1.rrd N:3.44:3.15:U:23
在当前时刻(N)插入4个值:3.44,3.15,unknown,23;
rrdtool update demo2.rrd 887457267:U 887457521:22 887457903:2.7
在887457267(Unix时间戳)插入unknown,…
rrdtool update demo3.rrd -- -5:21 N:42
在前5s的时间点插入21,当前时刻插入42(当使用负值时,需要加入–)
rrdtool graph
这个函数主要定义绘制图形的一些参量:数据范围,图形等,具体参考:rrdtool graph
rrdtool graph|graphv filename [option …] [data definition …] [data calculation …] [variable definition …] [graph element …] [print element …]
常用的就是:
-t 定义标题
-s 定义起始时间
DEF:定义数据范围
DEF:vname=rrdfile:ds-name:CF[:step=step][:start=time][:end=time]
文中图片引用自:https://blog.51cto.com/freeloda/1307492
Q&A:
Q1:现在有一个RRD file,想找出一段时间范围内的MAX,MIN,AVERAGE等数据,怎么解决?
rrdtool fetch
用法:
rrdtool fetch filename CF [--resolution|-r resolution] [--start|-s start] [--end|-e end] [--align-start|-a] [--daemon|-d address]
fetch函数主要用在graph里面,用来从RRDs中拿到数据,使用fetch时,会尝试匹配resolution解析度;
间接利用 rrdtool graph
关于rrdgraph_data里DEF,CDEF,VDEF的概念:
这三个命令主要是从RRD文件里提取数据,变更数据形式,或者找出其中的大小值等信息;
DEF<vname>=<rrdfile>:<ds-name>:<CF>[:step=<step>][:start=<time>][:end=<time>][:reduce=<CF>][:daemon=<address>]
e.g.
DEF:lasta=file.rrd:a:LAST
DEF:lastb=file.rrd:b:LAST
主要定义了如何从RRD file中取数据,如:ds,RRA,resolution,cf 等,返回是一个序列
CDEFvname=RPN expression
e.g.
CDEF:lasttotal=lasta,lastb,+
对DEF,CDEF进行深加工,返回是一个序列
VDEFvname=RPN expression
e.g.
VDEF:overallmaxtotal=maxtotal,interval
返回一个值
Ref1-stackoverflow
Ref2-stackoverflow
解析度(RESOLUTION)
解析度是RRD里很重要的概念,类似于分辨率的含义,用于表示一个RRA所能存储的时间粒度,对于RRA,数据总是存储在特定的时间节点,如当以5min为step,则存储的unix timestamp的值总是为300的整数倍。
rrdtool fetch subdata.rrd AVERAGE -r 15m -s -1h
这个语句要取得subdata.rrd的AVERAGE归档,resolution为15min,starttime为过去1小时;但是很有可能取到的是其他解析度的RRA,因为开始与结束时间不匹配上述原则。
参考
https://laoxiangchun.cn/
————————————————
版权声明:本文为CSDN博主「wanncy_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Cxzaur/article/details/112242430
rrdtool
分享好友
分享这个小栈给你的朋友们,一起进步吧。
订阅须知
• 所有用户可根据关注领域订阅专区或所有专区
• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询
• 专区发布评论属默认订阅所评论专区(除付费小栈外)
技术专家
查看更多- gaokeke123专家