做过网络管理以及网管软件开发的人肯定对MRTG(The Multi Router Traffic Grapher)www.mrtg.org 熟悉不过了,个人认为The Multi Router Traffic Grapher的名称不是十分准确,因为它可以显示的不仅仅是路由器的流量图,其他很多随着时间而数据发生变化的都可以通过MRTG来展示。
说到MRTG就不能不提到一个非常著名且有效的数据保存工具:RRDTool www.rrdtool.org 。用一句比较简单的话来描述RRDTool就是一个可以自动归并数据的数据库。好了,我们来简单的看一下RRDTool的工作原理。
关键名词之DS DS就是data source了,也就是数据源。对于一个RRDTool文件,里面可以有几个随着时间变化的数据源。语法为DS:DSName:step:DStype:Step:minValue:maxValue,对于一个DS,他有五个参数需要定义:分别为 名称、类型、步长、最小值、最大值。
好了,我们来看一个例子:DS:telnet:COUNTER:600:0:100000000。
名称:叫做telnet,当然你可以任意的起名字了,方便记忆就好。对于起名规则我没有仔细研究过,至于一些特殊符号是否支持,可以试试,最好不要用了。
类型:COUNTER,DS类型有四种,COUNTER, DERIVE, ABSOLUTE, GAUGE.常用的是COUNTER和GAUGE。对于GAUGE,也就是绝对数值,向RRDTool中写入一个数值就是这个数值;对于COUNTER,常用于路由器的流量记录,原理是这样的:路由器的端口流量是一个不断增加的数值,它可能是一个32位也可能是一个64位的数字,每当从端口流出一个八位组(一个byte)他的数值就会增加1,当数值达到该数字最大范围后自动重新从0开始记录。COUNTER就是用于这种类型数据的记录。每次采集到的数值直接存入到rrd数据里面。它会在导出数据以及生成图形时将根据COUNTER的数值以及步长来计算出速率。对于其他两种,我没有使用过,有兴趣可以参看rrdtool的网站
步长:600,就是说每600秒(10分钟)进行一次数据更新。
最大值、最小值:分别为0,100000000了啊!当然可以不限定就是用U:U来表示。
关键名词之RRA: 即 Round Robin Archive 怎么翻译呢?叫循环数据?就是这个意思吧。RRDTool的数据与普通数据库相比较的优点之一也就在这里,他可以根据RRA的定义来对数据进行相应的归并处理。我想如果用数据库的触发器等可以完成同样的功能。但是实现起来可能会比较麻烦。废话少说看个例子吧:
RRA:AVERAGE:0.5:1:603 \
RRA:AVERAGE:0.5:6:603 \
RRA:AVERAGE:0.5:24:603 \
RRA:AVERAGE:0.5:288:800 \
RRA:MAX:0.5:1:603 \
RRA:MAX:0.5:6:603 \
RRA:MAX:0.5:24:603 \
RRA:MAX:0.5:288:800
用一个语法的格式来表示就是RRA:CF:xff:step:rows。 怎么这么复杂?不用着急,分析一下就知道了,刚才不是说了RRDTool的优点就是可以归并数据吗?这个就是来定义归并规则的,我们来看一下具体的解释:
RRA:用以声明RRAs的关键字,固定不变的。
CF(consolidation function)合并方式,有几种方式:AVERAGE, MINIMUM, MAXIMUM, LAST 。
xff:xfiles factor 和unkown数据有关,很多都取0.5,具体含义没有搞清楚。
step:定义几条原始数据合并成一条当前数据。
row:这个RRA要记录多少条数据。
看一个图片吧!
我们看看上边的例子中的一行:RRA:AVERAGE:0.5:6:603 就是说对于这个RRA所保存的是6个DS中定义的Step的平均值,一共要记录603个数据。
ok,基本问题搞清楚了,我们看一个比较完整一点儿的例子:
DS:telnet:GAUGE:600:0:10000000 \
DS:smtp:GAUGE:600:0:10000000 \
DS:domain:GAUGE:600:0:10000000 \
DS:http:GAUGE:600:0:10000000 \
DS:pop3:GAUGE:600:0:10000000 \
DS:total:GAUGE:600:0:10000000 \
RRA:AVERAGE:0.5:1:603 \
RRA:AVERAGE:0.5:6:603 \
RRA:AVERAGE:0.5:24:603 \
RRA:AVERAGE:0.5:288:800 \
RRA:MAX:0.5:1:603 \
RRA:MAX:0.5:6:603 \
RRA:MAX:0.5:24:603 \
RRA:MAX:0.5:288:800
根据上面的说明,我想会很容易理解其中的内容。好了,第一次的介绍就到这里了,下一次介绍RRD4j的正式内容。
注:本文中部分内容摘自abelyang <abelyang.twnic.net.tw> 的RRDtool教学文章。