"Hello World" for RRDtool

by:ysuncn(欢迎转载,请注明原创信息)

        RRDtool提供的文档对于一些朋友来说太专业了,本文来温习一下RRDtool的基础,顺便给个经典的例子,冒充“Hello World”吧:-)。基础很重要,否则后边的例子对于你不会很有意义。 RRDtool是指Round Robin Database tool,Round robin是这样一种技术:基于固定的容量,具有指向当前元素的指针。(简单说和环形队列差不多,不具体解释了)。这种数据库比较适合时间序列这类的数 据,你需要每隔一定时间提供一些值给数据库,它就可以工作了:-)。RRDtool 源于MRTG (Multi Router Traffic Grapher),后者最初是一个绘制大学流量图的脚本,后来被用到绘制诸如温度、速度、容量......你需要一个元件来测量数据,把数据提供给 RRDtool,RRDtool能帮你完成建数据库、存储数据、取数据、绘图以及显示到web浏览器上等工作。开始吧,来个Hello World!......

        你在开车,12:05你看到计程器显示12345KM,12:10是12357KM,5分钟你开了12KM,这一段的速度是12000M/300S (40M/S),当然也可以用KM/H表示速度(144KM/H)。记住这仅仅是平均数据,希望看过这个例子,你可以举一反三,流量(bps—bits per second)应该不是问题。开始建个数据库:
rrdtool create test.rrd /
    --start 920804400 /
    DS:speed:COUNTER:600:U:U /
    RRA:AVERAGE:0.5:1:24 /
    RRA:AVERAGE:0.5:6:10

        建了什么?一个名为test.rrd的RRD数据库,起始时间是1999/03/07 12:00:00 转化成距1970/01/01的秒数为920804400(诸多系统的计时方式,date -d "1999/03/07 12:00:00"+%s 中国时间,有时差),数据库里保存了名为speed的数据源(变量),它代表一个计数器,每300秒被读取一次(默认值 可以用--step设置),数据库中建了两个RRA档案:第一个每读到的一个数据(5分钟)取平均(:-()存档,保留24笔(2小时,再来数据就用环形 队列的算法覆盖了);第二个每读6个数据(半小时)取平均存档,保留10笔(5小时)。

下边往数据库填入如下数据:
12:05  12345 KM
12:10  12357 KM
12:15  12363 KM
12:20  12363 KM
12:25  12363 KM
12:30  12373 KM
12:35  12383 KM
12:40  12393 KM
12:45  12399 KM
12:50  12405 KM
12:55  12411 KM
13:00  12415 KM
13:05  12420 KM
13:10  12422 KM
13:15  12423 KM


代码如下:
rrdtool update test.rrd 920804700:12345 920805000:12357 920805300:12363
rrdtool update test.rrd 920805600:12363 920805900:12363 920806200:12373
rrdtool update test.rrd 920806500:12383 920806800:12393 920807100:12399
rrdtool update test.rrd 920807400:12405 920807700:12411 920808000:12415
rrdtool update test.rrd 920808300:12420 920808600:12422 920808900:12423


看看我们的成果:
 rrdtool fetch test.rrd AVERAGE --start 920804400 --end 920809200
                          speed
920804700: nan
920805000: 4.0000000000e-02
920805300: 2.0000000000e-02
920805600: 0.0000000000e+00
920805900: 0.0000000000e+00
920806200: 3.3333333333e-02
920806500: 3.3333333333e-02
920806800: 3.3333333333e-02
920807100: 2.0000000000e-02
920807400: 2.0000000000e-02
920807700: 2.0000000000e-02
920808000: 1.3333333333e-02
920808300: 1.6666666667e-02
920808600: 6.6666666667e-03
920808900: 3.3333333333e-03
920809200: nan


开始画图speed.png
rrdtool graph speed.png /
        --start 920804400 --end 920808000 /
        DEF:myspeed=test.rrd:speed:AVERAGE /
        LINE2:myspeed#FF0000

        图片名——speed.png;开始时间——12:00;结束时间——13:00。后边的复杂点:定义变量myspeed(从test.rrd数据库的speed档案取数据),用2象素的红线绘制myspeed,出图:

                                   图1  speed.png

再来一个speed2.png(加了数学计算):
  rrdtool graph speed2.png /
     --start 920804400 --end 920808000 /
     --vertical-label m/s /
     DEF:myspeed=test.rrd:speed:AVERAGE /
     CDEF:realspeed=myspeed,1000,/* /
     LINE2:realspeed#FF0000

        有疑问的估计就在“myspeed,1000,/*”,这里是逆波兰式“myspeed,1000,*”,就是“myspeed*1000”,学过编译的都知道,不懂google一下吧,那个“/”是为了防止系统赋予“*”新的意义。不解释了,出图:


                                   图2  speed2.png

第三个speed3.png(本质还是逆波兰,把逻辑判断和IF加进来了):
rrdtool graph speed3.png /
     --start 920804400 --end 920808000 /
     --vertical-label km/h /
     DEF:myspeed=test.rrd:speed:AVERAGE /
     "CDEF:kmh=myspeed,3600,*" /
     CDEF:fast=kmh,100,GT,kmh,0,IF /
     CDEF:good=kmh,100,GT,0,kmh,IF /
     HRULE:100#0000FF:"Maximum allowed" /
     AREA:good#00FF00:"Good speed" /
     AREA:fast#FF0000:"Too fast"

        防止*被转移的另一种方式:在命令中用双引号——“*”,解释一个“kmh,100,GT,kmh,0,IF”:
  Check if kmh is greater than 100    ( kmh,100 ) GT
  If so, return kmh, else return 0    ((( kmh,100) GT ), kmh, 0) IF

出图:


                                   图3  speed3.png

最后一个speed4.png(有了数据,RRDtool什么都能做):
rrdtool graph speed4.png /
     --start 920804400 --end 920808000 /
     --vertical-label km/h /
     DEF:myspeed=test.rrd:speed:AVERAGE /
     "CDEF:kmh=myspeed,3600,*" /
     CDEF:fast=kmh,100,GT,100,0,IF /
     CDEF:over=kmh,100,GT,kmh,100,-,0,IF /
     CDEF:good=kmh,100,GT,0,kmh,IF /
     HRULE:100#0000FF:"Maximum allowed" /
     AREA:good#00FF00:"Good speed" /
     AREA:fast#550000:"Too fast" /
     STACK:over#FF0000:"Over speed"

出图:

                                   图4  speed4.png

ps:文章主要借鉴
RRDtutorial。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值