免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2360 | 回复: 0
打印 上一主题 下一主题

RRD文件格式分析(一) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-05 16:21 |只看该作者 |倒序浏览
一、 文件格式:
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_cnt-RRA个数:该数据值是在创建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_cnt:RRA的行数(每一行有所有数据源的数据)
                                            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文件中RRA和DS的具体关系了。
       具体如下:

                                                                                                           (待续)


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/33167/showart_291821.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP