rrdtool介绍

来源:互联网 发布:淘宝线下体验店 编辑:程序博客网 时间:2024/05/14 05:20

rrdtool介绍

什么是rrdtool

  RRDtool是由Tobias Oetiker 编写并由全球各地的许多人贡献的工具。本篇文档的作者是Alex van den Bogaerdt 主要是帮助你理解RRDtool是什么,它能够帮助你作些什么。 RRDtool的文档对于有些人来说过于技术化。本教程帮助你理解RRDtool的基本概念。它为你自学RRDtool的文档做好准备。本文档还重点介绍了网络统计方面的知识。

RRDtool定义

  RRDtool是指Round Robin Database 工具(环状数据库)。Round robin是一种处理定量数据、以及当前元素指针的技术。想象一个周边标有点的圆环--这些点就是时间存储的位置。从圆心画一条到圆周的某个点的箭头--这就是指针。就像我们在一个圆环上一样,没有起点和终点,你可以一直往下走下去。过来一段时间,所有可用的位置都会被用过,该循环过程会自动重用原来的位置。这样,数据集不会增大,并且不需要维护。RRDtool处理RRD数据库。它用向RRD数据库存储数据、从RRD数据库中提取数据。

RRD存放数据类型及用途

RRD存放数据类型

  可以适合时间序列的数据。就是说你必须能够在时间的几个点上度量某些值,并提供这些信息给RRDtool。如果你能够做到这一点,RRDtool就能够存储它们。这些数值必须是数字,但是不一定要是整数,在与MRTG合用时。(下一节会给出更详细的介绍)。

  下面的例子是关于SNMP的,SNMP是简单网络管理协议的缩写。简单是指协议简单——并不表示管理或监视网络简单。读完本篇文档后,你应当能够对人们谈论的SNMP的东西有更多的理解。现在,只要知道SNMP可以用来查询设备中保持的计数器的值就可以了。我们要存放到RRD数据库中的正是这些计数器中的数值。

RRDtool用途

  RRDtool源自MRTG(多路由器流量绘图器)。MRTG是有一个大学连接到互联网链路的使用率的小脚本开始的。MRTG后来被当作绘制其他数据源的工具使用,包括温度、速度、电压、输出量等等。

  很可能你会从使用RRDtool来存储和处理通过SNMP收集到的数据开始。这些数据很可能是某个网络或计算机接收或发送的字节数(比特数)。它也可以用来显示潮水的波浪、阳光射线、电力消耗、展会的参观人员、机场附近的噪音等级、你喜欢的度假区的温度、电冰箱的温度、以及任何你可以想象的东西。

  你最需要一个度量数据,以及能够提供这些数据给RRDtool的感应器就可以了。RRDtool会让你创建数据库、存储数据、提取数据、创建用于在Web浏览器中显示的PNG格式的图像。这些PNG图像以来于你收集的数据,它可以是网络平均使用率、峰值。

问题探讨

其一:

  再读一遍!你可能漏了某些地方。如果你无法编译源代码,而且你的操作系统相当普遍,很可能不是RRDtool的错误。互联网上有已经编译好的版本。如果来自可信赖的网站,就下载一个。

另一种情况:

  是程序能够工作,但是没有得到预期的结果,可能是配置方面的问题。检查你的配置,与后面例子的配置比较一下。

  RRDtool有一个邮件列表及其归档。读一下几周的列表并搜索归档。没有搜索过归档就提问是很粗鲁的做法:你遇到的问题可能已经由其他人解决了!尽管不是全部,大多数问题都会这样,邮件列表不是仅仅为了某个参与者服务的。看看RRDtool的文档了解邮件列表的位置和使用方法。

  我建议你马上就花点时间订阅邮件列表,只要发送一封主题为 subscribe 的邮件到 rrd-user-request@list.ee.ethz.ch 就可以了。如果要退定该邮件列表,只需要发送主题为 unsubscribe 到同样的地址即可。

学习实例

第一个RRD数据库

  在我看来,学习某个东西的最好办法就是实践。为什么现在不开始呢?我们会创建一个数据库,放一些数值到它里面,然后提取这些数据。你的输出应当与本文档中的输出是一样的。

  我们会从一些简单的入手,然后把汽车与路由器比较,或者将公里和比特、字节数比较。他们都是一样的:都是某些时段的某些数值。

  假设我们有一个向互联网发送数据和接收数据的设备。该设备保留一个计数器,该计数器在开启设备时设置为0,并在每传送一个字节就加1。该计数器可能会有一个最大值。如果该值达到最大时,在加一个字节的计数,该计数器就会再次从0开始。这与世界上的许多计数器都是一样的,比如车辆上的里程计数器。

  关于网络的讨论通常用每秒比特数来衡量,因此我们要习惯这种用法。把一个字节看成是8个比特,并且开始用比特而不是字节来思考问题。不过,计数器仍然用字节数为单位来计量!在SNMP世界里,大部分的计数器都是32比特的。这就意味着他们计数范围是0-4294967。我们在例子里会用到这些数值。该设备在被查询时,会返回计数器的当前值。我们知道从上次查询设备开始到现在的时间,因此我们现在就知道每秒 平均传输了多少字节数。这不难计算。首先用文字来描述,然后计算:

  用当前查询到的计数器值,减去上一次查询的计数器值

  把当前查询时间和上次查询时间作上述同样操作(秒)

  将(1)的结果除以(2)的结果,得到的结果就是每秒的字节数。乘以8就得到每秒的比特数(bps)

  实例一

  你现在正在开车。12:05时你看了一下仪表盘上的里程计数器,它显示这俩车已经行驶了12345公里。12:10分时,你有看了一下里程计数器,它显示 12357公里。这表示你在5分钟内行驶了12公里。科技人员会把它转换成米/秒,这样可以更好的进行比较(每5分钟的字节数)和(每秒比特数)。

  我们行驶了12公里,也就是12000米。我们在5分钟内,或者说是300秒内完成。我们的速度是1200米/300秒,或者说是40米/秒。

  我们可以用公里/小时来计算速度:12乘以5分钟就是一个小时,因此我们必须把12公里乘以12得到144公里/小时。对于和我一样说英语的朋友来说,就是90英里/小时,因此不要在家里或我生活的地方尝试这个速度 :)

  记住:这些数值都仅仅是平均值。如果无法从数字中得到你是否以固定的速度在行驶。本教程后面有一个例子说明这个问题。我希望你理解在计算米/秒或者比特/秒。唯一的差别在于收集数据的方式。即使是K这个单位也是一样的,因为在网络术语中,K同样表示1000。

  我们现在要创建一个数据库,在此数据库中我们能够保存所有这些有趣的数字。启动这个程序的方法可能在各个操作系统上各不相同,但是我假设你可以搞清楚它是否与你的操作系统不同,键入下面的行作为一个长长的行(为了可读性,我得把他分成几行)并且用 \ 来分割。

  rrdtool create test.rrd \

  --start 920804400 \

  DS:speed:COUNTER:600:U:U \

  RRA:AVERAGE:0.5:1:24 \

  RRA:AVERAGE:0.5:6:10

创建内容

  我们创建的rrd数据库名为test (test.rrd),它的起始时间是我写这篇文档的当天下午,也就是1999年3月7日(该日期转换成920804400秒)。我们的数据库存放一个名为 ’speed’ 的数据源(DS),它表示一个计数器。该计数器每5分钟(缺省)读取一次。在同一个数据库中,保存有2个环状归档(RRA),一个是每次读取时的平均数据(例如:没有东西进行平均)并保留24个样本(24乘以5分钟是2小时)。另一个RRA有6个平均值(半小时)并包含10个这样的平均值(例如5个小时)。

  RRDtool使用来源于UNIX世界的特殊时间戳。该时间戳是自1979年1月1日UTC时间开始到当前逝去的秒数。该时间戳的值被转换成本地时间,它在不同的时区会不一样。

  可能你不是和我在地球的同一个地方。这就是说时区不同。在所有的例子中,我所说的时间当中,小时可能对你来说是错误的。这对这些例子中的结果有一点影响,在阅读时,只需要修正时间中的小时即可。例如:我看到 12:05 的话,在英国的家伙看到的时间就是 11:05 。

  现在我们得向数据库中填入一些数字。我们希望读到以下数据:

  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 命令从数据库中提取数据。

  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

  如果不是像上面的输出结果,可能哪里有错误。也许你的操作系统会打印出不同的格式 NaN 。 NaN 表示 非数字 。 如果你的操作系统输出 U 或 UNKN 或者其他类似东西都是正常的。如果其他地方错误,可能是因为你的过程中的那些步骤出错了(当然假设我的教程是完全正确的 :-))。这样的话,删除数据库文件然后再重新尝试。 有时事情就会变化。本例哟难道的数据像 0.04 而不是 4.0000e-02 。这些实际上是一样的数字,只是写法不同而已。如果rrdtool今后的版本显示略有不同是输出也不要大惊小怪。本文档中的例子对于RRDtool 1.2.0版本都是正确的。

绘第一张图

  建几个图示的时候到了,试试下面的命令:

  rrdtool graph speed.png \

  --start 920804400 --end 920808000 \

  DEF:myspeed=test.rrd:speed:AVERAGE \

  LINE2:myspeed#FF0000

  #p#分页标题#e#

  如图一

  该命令会创建名为speed.png的图像文件,该图像从12:00开始,到13:00。有一个名为myspeed的变量定义,它使用来自 test.rrd数据库的 speed RRA中的数据。绘制的线条是2像素高,表示myspeed变量。颜色是红色的.

  你会注意到图像的起始不是12:00而是12:05。这是因为在此时间之前的数据不够计算出平均值。这只会在缺少某些样本的情况下发生,不会经常发生。

  颜色是由红、绿、蓝构成的。对每种颜色成分,你可以用16进制来表示使用多少,其中00表示不包含,FF表示完全包含。白色是由红、绿、蓝组成的:FFFFFF。黑色是全部不包含:000000。

用几种数学方法来绘图

  查看图像时,你会注意到横轴下标为 12:10、12:20、12:30、12:40、12:59。有时某些下标不适合(可能是12:00和13:00)会被忽略掉。

  纵轴显示我们输入的范围。下面提供的公里数,以及除以300妙的结果,我们得到非常小的数值。为了更加精确,第一个值是12(12567-12456),除以300后得到0.04,RRDtool显示时为 40m 表示 40/1000 。 其中的 m 与米、公里、或者毫米都没有任何关系!RRDtool不知道我们的数据单位,它只处理没有单位的数据。

  如果我们用米来衡量我们的距离,就会是这样:(12′357′000-12′345′000)/300 = 12′000/300 = 40.

  因为许多人都对这样的数值范围感觉更好,我们就来修正一下。我们将重新创建数据库,并存储正确的数据。但是有更好的办法:在创建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

  注意:不要忘记操作符 * 后面的 。这个反斜杆用来将*从操作系统可能解释的符号转义,而不是直接传递给rrdtool命令。

  在查看PNG文件后,你会注意到 m 不见了。正确的结果就是这样。同样,在图像中加入了一个标注。出了上面提到的几点外,PNG看起来应当是一样的。

  如图二

  计算是在CDEF部分中指定的,使用逆波兰表达式( RPN )表示的。我们要求RRDtool所作的事情是:`取数据源myspeed, 以及数值1000;把他们相乘` 。在此不要被RPN表达式困扰了,后面会详细介绍。同时,你可能想读一读关于CDEF的教程。以及Steve Rader的RPN表达式的教程。不过哦首先看我这篇教程吧。

  如果我们用1000乘以这些数值,显示把同样的数据显示成公里/小时也是可以的。

  要修改米/秒为单位的值:

  计算米/小时: value * 3′600

  计算公里/小时: value / 1′000

  合起来: value * (3′600/1′000) 或者 value * 3.6

  下面我们来创建这个PNG文件,并加入更多的魔幻功能…

  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"

  这个图像看起来更好。速度用KM/H表示,有一个附加的线条表示最大允许的速度(在我行驶的道路上的最大限速)。我还修改了速度的显示颜色,把它从线条改为区块。

  如图三

一个更复杂的图例

  现在计算更加复杂一些。对于在限速内的速度衡量方法是:

  检查公里/小时是否大于100 ( kmh,100 ) GT

  如果是,返回0,否则返回公里/小时。 ((( kmh,100 ) GT ), 0, kmh) IF

  对于上述的限速值:

  检查公里/小时是否大于100 ( kmh,100 ) GT

  如果是,返回公里/小时,否则返回0。 ((( kmh,100) GT ), kmh, 0) IF

  #p#分页标题#e#

  我愿意相信RRDtool的绘图功能能够处理的数据没有任何虚拟的限制。我会解释他们是如何工作的,不过看看下面的PNG图像:

  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"

对RRDTool的总结

  RRDtool是指Round Robin Database 工具(环状数据库)。Round robin是一种处理定量数据、以及当前元素指针的技术。想象一个周边标有点的圆环--这些点就是时间存储的位置。从圆心画一条到圆周的某个点的箭头--这就是指针。就像我们在一个圆环上一样,没有起点和终点,你可以一直走下去。过来一段时间,所有可用的位置都会被用过,该循环过程会自动重用原来的位置。这样,数据集不会增大,并且不需要维护。我们使用RRDtool来处理RRD数据库。使用它向RRD数据库存储提取数据。

  RRD适合存储时间序列的数据。就是说你必须能够在时间的几个点上度量某些值,并提供这些信息给RRDtool。如果你能够做到这一点,RRDtool就能够存储它们。这些数值必须是数字,但是不一定要是整数。

  下面的许多例子是关于SNMP的,SNMP是简单网络管理协议的缩写。简单是指协议简单--并不表示管理或监视网络简单。读完本篇文档后,你应当能够对人们谈论的SNMP有更多的理解。现在,只要知道SNMP可以用来查询设备中保持的计数器的值就可以了。我们要存放到RRD数据库中的正是这些计数器中的数值。

  RRDtool源自MRTG(多路由器流量绘图器)。MRTG是有一个大学连接到互联网链路的使用率的小脚本开始的。MRTG后来被当作绘制其他数据源的工具使用,包括温度、速度、电压、输出量等等。

  很可能你会从使用RRDtool来存储和处理通过SNMP收集到的数据。这些数据很可能是某个网络或计算机接收或发送的字节数(比特数)。它也可以用来显示潮水的波浪、阳光射线、电力消耗、展会的参观人员、机场附近的噪音等级、你喜欢的度假区的温度、电冰箱的温度、以及任何你可以想象的东西。

  你最需要一个度量数据,以及能够提供这些数据给RRDtool的感应器。RRDtool会让你创建数据库、存储数据、提取数据、创建用于在Web浏览器中显示的PNG格式的图像。这些PNG图像来于你收集的数据,它可以是网络平均使用率、峰值等。

  首先在此介绍一下常用的RRDtool选项的语法,你可以粗略的读一下,然后看例子,看完之后在仔细的研读语法.

  1.如何使用rrdtool创建各种类型、特性的RRD环型数据库。

  rrdtool create filename [--start|-b start time] [--step|-s step] [DS:ds-name:DST:dst arguments] 。net[RRA:CF:cf arguments]

  说明:

  RRDtool的创建功能能够设置一个新的RRD数据库文件。该功能完成所创建的文件全部被预填入 UNKNOWN 数值。

  filename

  需要创建的RRD的文件名。RRD数据库文件名应当以 .rrd作为扩展名。尽管RRDtool可以接受任何文件名。

  --start|-b start time(default: now - 10s)

  设定RRD数据库加入的第一个数据值的时间-从1970-01-01 UTC时间以来的时间(秒数)。RRDtool不会接受早于或在指定时刻上的任何数值。

  --step|-s step(default: 300 seconds)

  指定数据将要被填入RRD数据库的基本的时间间隔(默认是300秒)。

  DS:ds-name:DST:dst arguments

  单个RRD数据库可以接受来自几个数据源的输入。例如某个指定通讯线路上的进流量和出流量。在DS配置选项中,你必须为每个需要在RRD存储的数据源指定一些基本的属性。

  ds-name是你要用来从某个RRD中引用的某个特定的数据源。ds-name必须为[a-zA-Z0-9]间的、长度为1-19个字符组成。

  DST定义数据源的类型。数据源项的后续参数依赖于数据源的类型。对于GAUGE、COUNTER、DERIVE、以及ABSOLUTE,其数据源的格式为:

  DS:ds-name:GAUGE | COUNTER | DERIVE | ABSOLUTE:heartbeat:min:max

  对于COMPUTE数据源,其格式为:

  DS:ds-name:COMPUTE:rpn-expression

  要确定使用哪种数据源类型,请检查下面的定义。

  GAUGE

  是像温度计、或者某个房间内的人数、或共享Redhat的值这样的东西。

  COUNTER

  是像路由器中 ifInOctets 计数器这样会持续递增的计数器。COUNTER数据源假设计算机永远不会减小,除非计数器溢出。update功能可能导致溢出。计算机是按照每秒的频率存储的。当计数器溢出时,RRDtool会检查该溢出是否会发生在32位或64位边界,并且相应的把合适的值加入结果中。

  DERIVE

  存放该数据源从以往到现在的的差异线。这对于gauges类型非常有用,它可用来衡量进出某个房间的比率。在derive内部,与COUNTER几乎是一样的,但是没有溢出检查。因此,如果你的计数器在32或64位不会复位,你应当使用DERIVE或者用一个MIN值为0的混合使用。

  关于COUNTER vs DERIVE的说明

  如果你不容许偶尔发生的、某个计数器的合法回绕复位而造成的错误,而要用`unknowns‘ 来对表示所有计数器的合法回绕和复位,你就要使用min=0的DERIVE类型。否则,使用具有合理max的COUNTER类型,会为所有的合法计数器回绕返回正确的值。

  对于一个步长为5分钟的32位计数器,计数器回绕复位的错误概率大约为:每1Mbps的最大带宽发生概率为0.8%.注意这等价于100Mbps接口的80%,因此对于高带宽接口和32位计数器,最好使用带有min=0的DERIVE。如果你使用的是64位计数器,只有任何最大值的设定可以避免计数器回绕的错误发生的可能性。

  ABSOLUTE

  读取后马上复位的计数器。用于易于溢出的快速计数器。因此,不要常规地读取他们,你需要自每次读取后确认在下一次溢出前有一个最大的有效时间。该类型的另外一个用途是你需要累积上次更新以来的信息数目。

  COMPUTE

  用于存放对RRD中的其他数据源进行公式计算的结果。该数据源在更新时不需要提供数值,它是根据rpn-表达式定义的公式从数据源的PDPs中计算出来的PDP(Primary Data Point)。归并功能会被应用到COMPUTE数据源的PDPs上。在数据库软件中,此类数据集用`虚拟‘ 或 ’计算‘ 列表示。

  heartbeat心跳定义了在两次数据源更新之间、在将数据源的数值确定为 UNKNOWN 前所允许的最大秒数。

  min和max定义了数据源提供、预期的数值范围。任何数据源的超过min或max数值范围的数值,都将被认为是UNKNOWN 。如果你不知道或者不关心mix和max, 将他们设置为 unknown。注意min和max总是值数据源所处理的数值。对于一个流量计数器类型的DS来说,这可以是预期中该设备获取的数据率。

  如果有可用的min/max的值信息,一定要设置min和max属性。这可以帮助RRDtool在更新时对提供的数据进行健壮检查。

  rpn-expression定义了由同一个RRD库的其他数据源的计算而来的、某个COMPUTE数据源的PDPs计算公式。这于graph命令的CDEF参数一样。请参看graph手册了解RPN操作符的列表和说明。对于COMPUTE数据源,不支持以下RPN操作符:COUNT、PREV、TIME、和LTIME。此外,在定义RPN表达式时,COMPUTE数据源只能够引用在create命令中列出的数据源。这于CDEF的限制是一样的,CDEF只能够引用在同一个graph命令中前面定义的DEFs和CDEFs。

  RRA:CF:cf arguments

  RRD的一个目的是在一个环型数据归档中存储数据。一个归档有大量的数据值或者每个已定义的数据源的统计,而且它是在一个RRA行中被定义的。

  当一个数据进入RRD数据库时,首先填入到用 -s 选项所定义的步长的时隙中的数据,就成为一个pdp值-首要数据点(Primary Data Point)。

  该数据也会被用该归档的CF归并函数进行处理。可以把各个PDPs通过某个聚合函数进行归并的归并函数有这样几种:AVERAGE、MIN、MAX、LAST等。这些归并函数的RRA命令行格式为:

  RRA:AVERAGE | MIN | MAX | LAST:xff:steps:rows

  xff

  xfiles factor定义了在被归并数值仍然是一个未知时,*UNKNOWN*数据中,某个归并间隔的哪个部分可以采用。

  steps

  定义这些PDP中的多少个可以用来构建归并的数据点。

  rows

  定义在一个RRA归档中保留多少次的生成数据值。

  例子例 1

  rrdtool create temperature.rrd --step 300 \

  DS:temp:GAUGE:600:-273:5000 \

  RRA:AVERAGE:0.5:1:1200 \

  RRA:MIN:0.5:12:2400 \

  RRA:MAX:0.5:12:2400 \

  RRA:AVERAGE:0.5:12:2400

  上例设置了一个名为 temperature.rrd 的RRD,它每300秒接收一个温度值。如果超过600秒没有提供数据,温度值变为*UNKNOWN*。其最小可接受的值为 -273,最高值为5000.

  本例中同时还定义了几个归档区。第一个RRA归档区存储100小时内的温度(1200*300秒=100小时)。第二个RRA存储每小时的最低温度(12*300秒=1小时),共存储100天的数据(2400小时)。第三和第四个RRA分别存放最高温度和平均温度。

  例 2

  rrdtool create proxy.rrd --step 300 \

  DS:Total:DERIVE:1800:0:U \

  DS:Duration:DERIVE:1800:0:U \

  RRA:AVERAGE:0.5:1:2016

  本例是监视一个Web代理每300秒间隔(5分钟)内处理的请求的平均请求数。此例中,该代理有两个计数器,启动后处理的请求总数、以及处理请求的合计累积数。显然这些计数器都有某个回绕点,但是使用DERIVE数据源类型同时还可以处理在Web代理停止和重启时的复位。

  在该RRD数据库中,存储的第一个数据源类型是间隔期内的每秒请求数。第二个数据源类型是在除以300的间隔期内的请求处理总数。

  2.rrd环型数据库的更新:

  rrdtool {update | updatev} filename [--template|-t ds-name[:ds-name]...] N|timestamp:value[:value...] at-timestamp@value[:value...] [timestamp:value[:value...] ...]

  filename :要更新的RRD数据库的名称。

  --template|-t ds-name[:ds-name]... :-t ds-name要更新RRD数据库中数据源的名称

  N|timestamp:value[:value...]:时间:要更新的值...

  $>rrdtool update tcpdump.rrd 1061811856:114:0:50:1199:0:821073

  上面的 1061811856 即时间值,如果就是要现在的时间值,则可以 N 代表,但要转换成秒值,通常我们都会以

  代码:

  $>timestamp=`date +%s `

  来转换成现在的秒数,如果是某些特定时间,则可以

  代码:

  $>timestamp=`date -d "2003/08/15 12:00" +%s`

  3.如何绘制rrd环型数据库中的采集到的数据

  rrdtool graph filename [option ...] [data definition ...] [data calculation ...] [variable definition ...] [graph element ...] [print element ...]

  filename 要绘制的图片名称

  Time range时间范围

  [-s|--start time] 启始时间[-e|--end time]结束时间 [-S|--step seconds]步长

  Labels

  [-t|--title string]图片的标题 [-v|--vertical-label string] Y轴说明

  Size

  [-w|--width pixels] 显示区的宽度[-h|--height pixels]显示区的高度 [-j|--only-graph]

  Limits

  [-u|--upper-limit value] Y轴正值高度[-l|--lower-limit value]Y轴负值高度 [-r|--rigid]

  Data and variables

  DEF:vname=rrdfile:ds-name:CF[:step=step][:start=time][:end=time]

  CDEF:vname=RPN expression

  VDEF:vname=RPN expression

  主要用处是说明您要取出那个RRD档案的 DSN 到这个 graph 的参数中来 CDEF 通过运算得到一个虚拟的变量,,其运算式需写成后序 EX: a=1+3 写成 a=1,3 + LINE{1|2|3}:vname[#rrggbb[:legend]] LINE1:your_var#rgb颜色值:图例说明,这个 "your_var" 需存在 DEF 或 CDEF 的宣告中, AREA:vname[#rrggbb[:legend]] AREA 画出样本数值至 0 之间的区块图 STACK:vname[#rrggbb[:legend]] STACK 叠在上一个值上的图形 请注意,如果使用 AREA/STACK 时需特别注意图盖图的问题,一定要先画大的值, 再画小的值,这才会有层次的效果,不然,最大的数据若最后画,会盖住前面的数据 COMMENT 说明文字,如 COMMENT:"Last Updated" 将在图上产生该文字,可以用 \n 等换行符号 GPRINT GPRINT:vname:CF:format vname 即DEF 中的 your_var,而 CF 看你要输出的文字是 AVERAGE/MAX/MIN/LAST 等数值,format 如同 printf 中的格式, EX: GPRINT:telnet:AVERAGE:"%10.0lf \n" 意即要输出这段时间中 (-s ~ -e 中,telnet的平均值,%10.0lf 则是为了好算位置)。