一、 文件格式:
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的具体关系了。
具体如下:
rrd 文件格式大体分为两部分:
1.文件头信息区:
该区域包含一些版本信息和一些于数据存储区相关的一些信息。例如:RRD的版本号,DS数量,DS名称,DS类型,RRA数量,RRA类型,PDP数据区,CDP数据区,最后更新时间,RRA目前更新到的位置等等信息。
2.数据存储区:
该区域存储了实际的数据。数据的来源是根据在创建RRD文件时DS的类型及相关RRA定义,并通过相关的计算得出的(CF,DST)。注意:数据源(DS)是存储的实体,而RRA是数据存储的载体。在逻辑上,每个RRA都有所有DS的数据(计算)。 RRA和DS的关系如下图所示: