Chinaunix首页 | 论坛 | 博客
  • 博客访问: 642816
  • 博文数量: 76
  • 博客积分: 3091
  • 博客等级: 中校
  • 技术积分: 996
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-11 15:40
个人简介

IT老兵,爱好胡思乱想、读书和交流,2015年底重新回到IT战场,期待再一次“贯穿”。

文章存档

2020年(11)

2018年(1)

2017年(1)

2016年(1)

2015年(1)

2014年(2)

2011年(5)

2010年(2)

2009年(4)

2008年(28)

2007年(20)

我的朋友

分类: 服务器与存储

2007-05-05 16:21:05

一、 文件格式:

rrd 文件格式大体分为两部分:
1.文件头信息区:

    该区域包含一些版本信息和一些于数据存储区相关的一些信息。例如:RRD的版本号,DS数量,DS名称,DS类型,RRA数量,RRA类型,PDP数据区,CDP数据区,最后更新时间,RRA目前更新到的位置等等信息。

2.数据存储区:

    该区域存储了实际的数据。数据的来源是根据在创建RRD文件时DS的类型及相关RRA定义,并通过相关的计算得出的(CF,DST)。注意:数据源(DS)是存储的实体,而RRA是数据存储的载体。在逻辑上,每个RRA都有所有DS的数据(计算)。 RRA和DS的关系如下图所示:

 

 

RRD文件大体格式如下 

       

数据结构:

typedef struct rrd_t { /*整个rrd文件结构*/

    stat_head_t      *stat_head;          /* 静态头部信息*/

    ds_def_t         *ds_def;            /* 数据源定义列表*/

    rra_def_t        *rra_def;            /* RRA定义列表 */

   live_head_t      *live_head;                /*活动头部*/

     pdp_prep_t       *pdp_prep;          /* pdp数据区域 */ 

    cdp_prep_t       *cdp_prep;           /* cdp数据区域 */

    rra_ptr_t        *rra_ptr;            /* RRA指针列表 */

   rrd_value_t      *rrd_value;          /* 真实数据区域 */

} rrd_t;

下面分别详细介绍RRD头部区域和RRD数据区域:

1.RRD头区域:

a)        RRD头区域包括:

                                       i.              静态头部:

数据结构:

                                 typedef struct stat_head_t {

                                char             cookie[4];    //RRD

                                char             version[5];    //RRD版本信息

                                double           float_cookie;  //

                               unsigned long    ds_cnt;        //DS)数据源的个数

                               unsigned long    rra_cnt;        //RRA个数

                                unsigned long    pdp_step;       //数据插入间隔

                               unival           par[10];      

} stat_head_t;

说明:

重要的信息要素:

ds_cnt-数据源个数:该数据值是在创建RRD文件的

时候获取到,作用为标识该RRD文件有多少个DS

rra_cntRRA个数:该数据值是在创建RRD文件的时

候获取到,作用为标识该RRD文件有多少RRA

pdp_step-间隔时间:期望多长时间接受到数据。

该数据值是在创建RRD文件的时候获取到。

举例:

RRD文件命令如下所示:

Rrdtool create first.rrd –start N --step 1  \

DS:fir:COUNTER:2:U:U  \

DS:sec:GAUGE:2:U:U \

RRA:AVERAGE:0.5:1:60 \

RRA:MAX:0.5:60:60 \

RRA:MIN:0.5:3600:24 \

RRA:LAST:0.5: 86400:7 \

命令说明:

命令的格式请参考相关的RRD文档,这里我们只针对

相关上面的数据结构进行解释

ds_cnt   2

rra_cnt   4

pdp_step 1

 

                                     ii.              DS定义域:

数据结构:

typedef struct ds_def_t {

char    ds_nam[DS_NAM_SIZE];  //数据源名称

    char    dst[DST_SIZE];          //数据源类型

    unival   par[10];                

} ds_def_t;

说明:

ds_nam:数据原名称。在创建的时候指定。

dst:数据源类型。创建时指定。

ds_def [0].ds_nam = fir

ds_def [0].dst    = COUNTER

ds_def [1].ds_nam = sec

ds_def [1].dst    = GAUGE

 

                                    iii.              RRA定义域:

数据结构:

typedef struct rra_def_t

{

    char          cf_nam[CF_NAM_SIZE];  //CF(合并类型)

    unsigned long  row_cnt;                //RRA行数

    unsigned long  pdp_cnt;                //pdp个数

    unival        par[MAX_RRA_PAR_EN];           

} rra_def_t;

说明:

cf_nam:合并数据的类型。(PDP数据合成CDP数据时的

类型)

例如:RRA1.

Rrdtool create first.rrd –start N --step 1  \

DS:fir:COUNTER:2:U:U  \

DS:sec:GAUGE:2:U:U \

RRA:AVERAGE:0.5:1:60 \

RRA:MAX:0.5:60:60 \

RRA:MIN:0.5:3600:24 \

RRA:LAST:0.5: 86400:7 \

                            60个,间隔时间为1s的数据(PDP)合成,

计算其60个中最大的作为该RRA中的数据源

DS)的计算值进行存储。

                                    row_cntRRA的行数(每一行有所有数据源的数据)

                                   pdp_cnt:RRA在合并数据时所占用的pdp数量。

rra_def_t [0]. cf_nam = AVERAGE

rra_def_t [0]. row_cnt = 60

rra_def_t [0]. pdp_cnt = 1

rra_def_t [1]. cf_nam = AVERAGE

rra_def_t [1]. row_cnt = 60

rra_def_t [1]. pdp_cnt = 60

rra_def_t [2]. cf_nam = AVERAGE

rra_def_t [2]. row_cnt = 24

rra_def_t [2]. pdp_cnt = 60*60

rra_def_t [3]. cf_nam = AVERAGE

rra_def_t [3]. row_cnt = 7

rra_def_t [3]. pdp_cnt = 60*60*24

小节:

       根据上面的分析,到现在应该清楚了RRD文件中RRADS的具体关系了。

       具体如下:

                                                                                                           (待续)
阅读(14482) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~