免费注册 查看新帖 |

Chinaunix

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

RRDtool简体中文教程_4:如何建立RRD文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-03 22:30 |只看该作者 |倒序浏览
建立 RRD 数据库

**********************************************************************************************************************
注 :该教程参考了如下内容 :
A)官方文档 :http://oss.oetiker.ch/rrdtool/doc/index.en.html
B)abel 兄的大作 :http://bbs.chinaunix.net/viewthread.php?tid=552224&highlight=rrdtool
                http://bbs.chinaunix.net/viewthread.php?tid=552220&highlight=rrdtool
作者 :ailms <ailms{@}263{dot}net>
版本 :v1
最后修改 :2006/11/17 17:35
**********************************************************************************************************************


    准备工作都做完了,脚本也写完了,就可以开始建库了。建库实际上就是建立后缀名为 .rrd 的 RRD 文件。

一)语法格式

  1. rrdtool create filename [--start|-b start time] [--step|-s step]
  2.                          [DS:ds-name:DST:dst arguments]  
  3.                          [RRA:CF:cf arguments]
复制代码


其中 filename 、DS 部分和 RRA 部分是必须的。其他两个参数可免。

二)参数解释

A)<filename> :默认是以 .rrd 结尾,但也以随你设定。

B) --step :就是 RRDtool “期望” 每隔多长时间就收到一个值。和 MRTG 的 interval 同样含义。默认是5分钟。我们的脚本也应该是

          每5分钟运行一次。

C) --start :给出 RRDtool 的第一个记录的起始时间。RRDtool 不会接受任何采样时间小于或者等于指定时间的数据。也就是说 –-start

      指定了数据库最早的那个记录是从什么时候开始的。如果 update 操作中给出的时间在 –-start 之前,则 RRDtool拒绝接受。--satrt 选项也是
      
      可选的。按照 我们在前一篇中的设定,则默认是当前时间减去 600*300秒,也就是50个小时前。 如果你想指定--start 为1天前,可以用  


  1. --start $(date -d '1 days aog' +%s)
复制代码


      注意,--start 选项的值必须是 timestamp 的格式。

D) DS :DS 用于定义 Data Soure 。也就是用于存放脚本的结果的变量名(DSN)。

      就是我们前面提到的 eth0_in ,eth0_out, lo_in , lo_out 。DSN 从 1-19 个字符,必须是 0-9,a-z,A-Z 。

E) DST :DST 就是 Data Source Type 的意思。有 COUNTER、GUAGE、DERIVE、ABSOLUTE、COMPUTE 5种。

              由于网卡流量属于计数器型,所以这里应该为 COUNTER 。

F) RRA :RRA 用于指定数据如何存放。我们可以把一个RRA 看成一个表,各保存不同 interval 的统计结果

G)PDP :Primary Data Point 。正常情况下每个 interval RRDtool 都会收到一个值;RRDtool 在收到脚本给来的值后 会计算出另外

      一个值(例如平均值),这个 值就是 PDP ;这个值代表的一般是“xxx/秒”的含义。注意,该值不一定等于RRDtool  收到的那个值。除非是
      
       GAUGE ,可以看下面的例子就知道了      

H) CF :CF 就是 Consolidation Function 的缩写。也就是合并(统计)功能。有 AVERAGE、MAX、MIN、LAST 四种

      分别表示对多个PDP 进行取平均、取最大值、取最小值、取当前值四种类型。具体作用等到 update 操作时 再说。

I) CDP :Consolidation Data Point 。RRDtool 使用多个 PDP 合并为(计算出)一个 CDP。也就是执行上面 的CF 操作后的结果。这个值就是存入 RRA

      的数据,绘图时使用的也是这些数据。


三)再说 DST

    DST 的选择是十分重要的,如果选错了 DST ,即使你的脚本取的数据是对的,放入 RRDtool 后也是错误的,更不用提画出来的图是否有意义了。
   
    如何选择 DST 看下面的描述 :

   A)COUNTER :必须是递增的,除非是计数器溢出(overflows)。在这种情况下,RRDtool 会自动修改收到的值。例如网络接口流量、收到的
   
        packets 数量都属于这一类型。

   B)DERIVE:和 COUNTER 类似。但可以是递增,也可以递减,或者一会增加一会儿减少。

   C)ABSOLUTE :ABSOLUTE 比较特殊,它每次都假定前一个interval的值是0,再计算平均值。

   D)GAUGE :GAGUE 和上面三种不同,它没有“平均”的概念,RRDtool 收到值之后字节存入 RRA 中

   E)COMPUTE :COMPUTE 比较特殊,它并不接受输入,它的定义是一个表达式,能够引用其他DS并自动计算出某个值。例如
   
      
  1. DS:eth0_bytes:COUNTER:600:0:U DS:eth0_bits:COMPUTE:bytes,8,*
复制代码


       则 eth0_bytes 每得到一个值,eth0_bits 会自动计算出它的值:将 eth0_bytes 的值乘以 8 。不过 COMPUTE 型的 DS 有个限制,只能应用
      
       它所在的 RRD 的 DS ,不能引用其他 RRD 的 DS。 COMPUTE 型 DS 是新版本的 RRDtool 才有的,你也可以用 CDEF 来实现该功能。
        
         
    F)AVERAGE 类型适合于看“平均”情况,例如一天的平均流量,。所以 AVERAGE 适用于需要知道 ‘xxx/秒’ 这样的需求。但采用 AVERAGE 型时,你并不知道

        在每个 CDP 中(假设30分钟平均,6个PDP组成)之中,流量具体是如何变化的,什么时候高,什么时候低。这于需要用到别的统计类型了

    G)MAXIMUM 、MINIMUM不适用想知道“xxx/秒”这样的需求,而是适用于想知道某个对象在各个不同时刻的表现的需求,也就是着重点在于各个时间点。

         也就是所谓的“趋势”了,还是上面的例子,如果采用 MAXIMUM 或者 MINIMUM 的 CF ,可以看出接口在每个 CDP 的周期内最高是达到多少,最低又是多

         少,如果是 AVERAGE 的话,有可能前5个 PDP 都很均匀,但最后一个 PDP 的值发生很大的突变。这时候如果用 AVERAGE 可能是看不出来的,因为突变的部

         分被平均分配到整个时间段内了,所以看不出突变这一现象;但如果用 MAXIMUM 就可以清楚的知道在该 CDP 的周期内,曾经有达到某个值的时候。所以用

        MAXIMUM 或者 MINIMUM 就可以知道某个对象在某个时间段内最大达到多少,最低低到什么程度。

        例如要看某个接口在一天内有没有超过50Mb 流量的时候就要用 MAXIMUM

       例如要看磁盘空间的空闲率在一天内有没有低于 20% 的时候就要用 MINIMUM

     H)LAST 类型适用于 “累计”的概念,例如从xxx时候到目前共累计xxxx 这样的需求。例如邮件数量,可以用 LAST 来表示 30 分钟内总共收到多少个邮件,同

         样 LAST 也没有平均的概念,也就是说不适用于 ‘xxx/秒’ 这样的需求,例如你不能说平均每秒钟多少封邮件这样的说法;同样也不适用于看每个周期内的变化,

         例如30分钟内共收到100封邮件,分别是 :第一个5分钟20封,第二个5分钟30封,第三个5分钟没有,第4个5分钟10封,第5个5分钟也没有,第6个5分钟
         
         40封。如果用 MAXIMUM 或者 MINIMUM 就不知道在30分钟内共收到100封邮件,而是得出30和0。所以 LAST 适用于每隔一段时间被观察 对象就会复位的
         
         情况。例如每30分钟就收一次邮件,邮件数量就是 LAST 值,同时现有的新邮件数量就被清零;到下一个30分钟再收一次邮件,又得到一个 30  分钟的 LAST 值。
         
         这样就可以得得出“距离上一次操作后到目前为止共xxx”的需求。(例如距离上一次收取邮件后又共收到100封新邮件)

四)DST 实例说明

这样说可能还是比较模糊,可以看下面的例子,体会一下什么是 DST 和 PDP  :

Values = 300, 600, 900, 1200        # 假设 RRDtool 收到4个值,分别是300,600,900,1200

Step = 300 seconds                    # step 为 300

COUNTER = 1,1, 1,1                         # (300-0)/300,(600-300)/300,(900-600)/300,(1200-900)/300 ,所以结果为 1,1,1,1

DERIVE = 1,1,1,1                         # 同上

ABSOLUTE = 1,2,3,4                   # (300-0)/300,(600-0)/300 , (900-0)/300, (1200-0)/300,所以结果为 1,2,3,4

GAUGE = 300,600,900,1200          # 300 , 600 ,900 ,1200 不做运算,直接存入数据库



所以第一行的 values 并不是 PDP ,后面4行才是 PDP


五)开始建库


  1. [root@dns1 root]# rrdtool create eth0.rrd \
  2. > --start $(date –d ‘1 days ago’ +%s) \
  3. > --step 300 \
  4. > DS:eth0_in:COUNTER:600:0:12500000 \        #  600 是 heartbeat;0 是最小值;12500000 表示最大值;
  5. > DS:eth0_out:COUNER:600:0:12500000 \        # 如果没有最小值/最大值,可以用 U 代替,例如 U:U
  6. > RRA:AVERAGE:0.5:1:600 \        # 1 表示对1个 PDP 取平均。实际上就等于 PDP 的值
  7. > RRA:AVERAGE:0.5:4:600 \        # 4 表示每4个 PDP 合成为一个 CDP,也就是20分钟。方法是对4个PDP取平均,
  8. > RRA:AVERAGE:0.5:24:600 \  # 同上,但改为24个,也就是24*5=120分钟=2小时。
  9. > RRA:AVERAGE:0.5:288:730        # 同上,但改为288个,也就是 288*5=1440分钟=1天
  10. [root@dns1 root]#  
复制代码


检查一下结果


  1. root@dns1 bob]# ll -h eth0.rrd
  2. -rw-r--r--    1 root     root          41K 11月 19 23:16 eth0.rrd
  3. [root@dns1 bob]#
复制代码


有的人可能会问,上面有两个 DS,那 RRA 中究竟存的是那个 DS 的数据呢?实际上,这些 RRA 是共用的,你只需建立一个 RRA,它就可以用于全部的 DS 。

所以在定义 RRA 时不需要指定是给那个 DS 用的。


六)什么是 CF

以第2个RRA 和 4,2,1,3 这4个 PDP 为例

AVERAGE :则结果为 (4+2+1+3)/4=2.5

MAX :结果为4个数中的最大值 4

MIN :结果为4个数中的最小值1

LAST :结果为4个数中的最后一个 3

同理,第三个RRA和第4个RRA则是每24个 PDP、每288个 PDP 合成为1个 CDP

七)解释度(Resolution)

这里要提到一个 Resolution 的概念,在官方文档中多处提到 resolution 一词。Resolution 究竟是什么?Resolutino 有什么用?

举个例子,如果我们要绘制1小时的数据,也就是60分钟,那么我们可以从第一个RRA 中取出12个 CDP 来绘图;也可以从第2个 RRA

中取出2个 CDP 来绘图。到底 RRDtool 会使用那个呢?

让我们看一下 RRA 的定义 :RRA:AVERAGE:0.5:4:600 。

Resolution 就等于 4 * step = 4 * 300 = 1200 ,也就是说 ,resolution 是每个CDP 所代表的时间范围,或者说 RRA 中每个 CDP(记录)

之间的时间间隔。所以第一个 RRA 的 resolution 是 1* step=300,第2是 1200,第三个是 24*300=7200,第4个 RRA 是 86400 。

默认情况下,RRDtool 会自动挑选合适的 resolution 的那个 RRA 的数据来绘图。我们大可不必关心它。但如果自己想取特定 RRA 的数据,就需要用到它了。

关于 Resolution 我们还会在 fetch 和 graph 操作中提到它。


八)xff 字段

细心的朋友可能会发现,在 RRA 的定义中有一个数值,固定是 0.5 ,这个到底是什么东东呢?

这个称为 xff 字段,是 xfile factor 的缩写。让我们来看它的定义 :

The xfiles factor defines what part of a consolidation interval may be made up from *UNKNOWN* data while

the consolidated value is still regarded as known. It is given as the ratio of allowed *UNKNOWN* PDPs to

the number of PDPs in the interval. Thus, it ranges from 0 to 1 (exclusive)


这个看起来有点头晕,我们举个简单的例子 :例如
  1. RRA:AVERAGE:0.5:24:600
复制代码


这个 RRA 中,每24个 PDP (共两小时)就合成为一个 CDP,如果这 24 个 PDP 中有部分值是 UNKNOWN (原因可以很多),例如1个,那么这个 CDP

合成的结果如何呢?是否就为 UNKNOWN 呢?

不是的,这要看 xff 字段而定。Xff 字段实际就是一个比例值。0.5 表示一个 CDP 中的所有 PDP 如果超过一半的值为 UNKNOWN ,则该 CDP 的值就被标为

UNKNOWN。也就是说,如果24个 PDP中有12个或者超过12个 PDP 的值是 UNKNOWN ,则该 CPD 就无法合成,或者合成的结果为 UNKNOWN;

如果是11个 PDP 的值为 UNKNOWN ,则该 CDP 的值等于剩下 13  个 PDP 的平均值。

如果一个 CDP 是有2个 PDP 组成,xff 为 0.5 ,那么只要有一个 PDP 为 UNKNOWN ,则该 PDP 所对应的 CDP 的值就是 UNKNOWN 了

论坛徽章:
0
2 [报告]
发表于 2006-12-04 00:08 |只看该作者
[root@FC5 bin]# ls
rrdcgi  rrdtool  rrdupdate
[root@FC5 bin]# rrdtool
bash: rrdtool: command not found
[root@FC5 bin]# ./rrdtool
RRDtool 1.2.14  Copyright 1997-2006 by Tobias Oetiker <tobi@oetiker.ch>
               Compiled Dec  3 2006 23:38:55

Usage: rrdtool [options] command command_options

Valid commands: create, update, updatev, graph, dump, restore,
                last, first, info, fetch, tune, resize, xport

RRDtool is distributed under the Terms of the GNU General
Public License Version 2. (www.gnu.org/copyleft/gpl.html)

For more information read the RRD manpages

为什么不能直接用 # rrdtool呢(对不起,俺是一新手)!

论坛徽章:
0
3 [报告]
发表于 2006-12-04 01:05 |只看该作者
这是 PATH 变量的问题,请看第二篇结尾部分
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP