rrdtool

作者: wanncy | 来源:发表于2019-03-26 16:05 被阅读33次

    rrdtool(Round Robin Database)

    流程

    • 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的大致思路了,您需要的就是熟悉下每个参数了


    image.png
    • 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}:heartbeat: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
    
    • 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_dataDEF,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.rrdAVERAGE归档,resolution15minstarttime为过去1小时;但是很有可能取到的是其他解析度的RRA,因为开始与结束时间不匹配上述原则。

    公众号关注哈施特的一天,一起学习呀!|

    image.png

    相关文章

      网友评论

        本文标题:rrdtool

        本文链接:https://www.haomeiwen.com/subject/lxxivqtx.html