使用RRDtool 进行绘图
**************************************************************************************************.************.********.<性病>
注 :.该教程参考了如下内容 :电脑
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.
*******.*********.******************************.************************************************************************.
一)前言
使用RRDtool 我们最关心什么?当然是如何把数据画出来了。.虽然前面谈了很多,但这.些都是基础来的。掌握好了,可以让你在绘图时更加得心应手。[成人用品]
本.来还有 RPN (反向波兰表达式)一节.的,但考虑一下,觉得还是放到后面,先从基本的绘图讲起。( 游戏 )
这一节的内容虽然很多,但基本都是实验性的内容,只要多.试几.次就可以了。健康
二、graph 操作的语法
rr.dtool graph filename .[option ...] 外贸
[data definitio.n ...] 建材
.[data calculation ....] .
[varia.ble definition ....]学习
[graph eleme.nt ...]健康
[print element ....].
复制代码
其中.的 data definiton.、variable definition 、data calculation、分别是下面的格式域名
DEF:<vname>=<rrdfile>:<ds-na.me>:<CF>[:.step=<step>][:st.art=<time>][:end=<time>][:reduce=<CF>]电脑
VDEF:vname=RPN express.ion服务器
CDEF:vna.me=RPN expression.
复制代码
其中. .filename 就是你想要生成的图片文件的名称,默认是 png 。你可以通过选项修改图片的类型,可以有 PNG、SVG、EPS、PDF四种。.
A)DEF 是 Definition (定义.)的意思。定义什么呢?你要.绘图,总要有数据源.吧?DEF 就是告诉 RRDtool 从那个 RRD 中取出指定.
D.S(eth0_in、eth0_ou.t)的某个类型的统计值(还可.以指定 resolution、start、end),并把这一切放入到一个变量 <vname>中 。学习
你可能会感到.奇怪,为什么还有一个 CF 字段?因为 RRA 有多种 CF 类型,有些 RRA 可能用来保存.平均值、有些 RRA 可能用于.统计最大值、电影
最小值等等。所以你.必须同时指定使用什.么 CF 类型.的 RRA的数据。至于 :start 和 :end 、:reduce 则用得比较少,最常用的就是 :step 了,.
它可.以让你控制 RRDtool 从那个 RR.A 中取数据。( 游戏 )
B)VDEF 是 Var.i.able. Definition (变量定义)的意思。定义什么呢?记得 MRTG 在图表的下面有一个称之为 Legend 的部分吗?电影
那里显示了1.个或者2个 DS (MRTG 没有 DS 一说,这里.是借用 RRDtool. 的)的 “最大值”、“平均值”、“当前值”。这些值是如何.
计算的呢?
RRDto.ol 中用 VDE.F 来定义。这个变量专门存放某个 DS 某种类型的值,例如. eth0_in 的最大值、eht0_out 的当前值等。当你需要象.
MRTG 一样输出数字报表(Legend) .时,就可以在 GPRINT 子句(.sub clause)中调用它。 汽车
同样它也需要用一个变量来存放数值。要注意的是,旧版 的 RRDtool 中是用另外一种格式来达到相同的目的。新版的 RRDtool 则推荐使用..( 游戏 )
VDEF . 语句。但在使用过程中,.却发现 VDEF 的使用反而造成了困扰。 例如你有5个 DS 要画,每个 DS 你都想输出最大值.、最小值、平均值.
、当前值。 如果使用 ...VDEF ,则需要 4 * 5 = 20 个 VDEF 语句,这会造成极大的困扰。具体例子可以看第十一节“数字报表”部分。 杀毒
C)CDEF 是 Calculation Define 的意思。使用过M.RTG 的都会体会到一点,MRTG 的计算.能力实在太差了。例如你有两个 Target .,虚拟主机
一个是 eth0_in , 一个是 eth0_out,.如果要把它们相加起来,再除.以8,得出 byte.s 为单位的值,如何计算呢?或者说你只想看.
eth0_in 中超过 10Mb/s 的那部分, 其余的不关心,.又如何实现呢?因为 MRTG 不能对它从 log .取出来的数.据进行修改,只能原.
原本本的表现,.所以很难满足我们的要求。而使用 CDEF ,. 这一切都可以很容易的实现。CDEF 支持很多数学运算,甚至还支持简--- 印刷
单的逻辑运算 if-then-else. ,可以解决前面提到的第2个问题:如何只绘制你所关 心的数据。不过这一切都需要熟悉 RPN 的语.法,--- 印刷
所以我们放到下一节介绍,这一节就.介绍如何把 RRDtool .中的数据以图表的方式显示出来。服务器
三)选项分类
本部分我们按照官方文档的方式,把选项分成几大类,分为 .:..
A)Time range : .用于控制图表的X轴显示的起始/结束.时间,也包括从RRA中提取指定时间的数据。( 游戏 )
B)Labels .:用于控制 X./Y 轴的说明文字。 鲜花
C)Size :用于.控制图片的大小。--------------彩票
D)Limits :.用于控制 Y 轴的上下限。(广告)
E)Grid :用于控制 X./Y 轴.的刻度如何显示。.
F).Misc.ellaneous :其他选项。例如显示中文、水印效果等等。外贸
G)Report :数字报表
需要说明的是,本篇当中并不是列出了所有选项.的.用法,只是列出较为常用的选项,如果想查看所有选项的的用法,可以到官方站点下载文档, 美容
这里就不一.一列出了,望各位见谅。 婚庆
四)时间范围控.制(Time Range)教育
[-s|-.-start time] [-e|--end time] [-.S|--step seconds]电影
复制代码
既然要绘图,就应该有一个起始/结束的时间。.Graph 操作中有 –s ,-e 选项。这两个选项即可以用于控制图表.的 X 轴显示的时间范围,也可以用.
于控制 RRDtool 从 RRA 中提取对应时间的数据。如果没有指定 –-end ,默认为 now;如.果没有指定 –-start,则默认为1.天前。如果两者都没.有电脑
指定,则图表默认显示从当.前算起1天内的。数 女人
回头看一下 DEF 中,也有 :s.tart ,:end , :step ,这些和 –-start、--end、.--step 之间有什么关系呢?( 游戏 )
让我们先看 :step 和 –step之间的关系是如何的..。--- 印刷
下面以 eth0.rrrd 为例,假设要绘制的时间范围 ran.g.e 等于 end -start[服务器
A)如果 0 < r.agne < 1.80000 (第一个 RRA 的时间覆盖范围) ,则默认从第1个RRA中取数据 :.
如果 DEF 中给出的 :step > 300 ,例如 1000. ,则从 resolution= 1000. 的或者第一个高于 1.000 的RRA 中挑选数据,由于 eth0.rrd 中没有服务器
. . resolution = 1000 的 RRA,则 RRDtool 会从 resolution = 120.0 的第2 RRA 中取数据。 杀毒
如.果 DEF 中给出的 :step <.= 300 ,例如 200 ,则 RRDtool 会忽略该设定,还是从第一个 RRA 中取数据。 电子
B)如果 180000 < range < 720000 ,由于第一个RRA只能保存2天的数据,所以.默认从第2个RRA中取数.据 :--------------彩票
如果 DEF 中给.出的 :step > 1200 ,例如 1800,则 RRDtool 会从 resolution = 7200. .的第3 RRA 中取数据<性病>
如果 DEF 中给出 :.step<= 1200,例如 300 ,则 RRDtool 会忽略,还是从第2个 RRA 中.取数据健康
C)如果 720000 < range < 4320000 ,则默认从第三..个 RRA 中取数据 : 女人
. 如果 DEF 中给出的 :s.tep > 7200 ,例如 10000 ,则从第4个 RRA中取数据 外汇
如果 DEF 中给出的 .:step <= 7200 , 例如 1200 ,则忽略.该值,并还是从第3 个 RRA 中取数据外贸
D)如果 4320.000 < range < 630720.00 ,则默认从第4个 RRA 中取数据 :(广告)
如果 DEF 中给出的.. :step > 86400 ,则行为未知.
. 如果 DEF 中给出的 :step <=86.400 ,则从第4个 RRA 中取数据.
E)-S 选.项可以直.接控制 RRDtool 如何挑选 RRA 。 建材
. 例如 -S 1200 ,即使DEF 中不加 :.setp ,则 RRDtool 会从第2个 RRA 中取数据,即使 rang < 180000 .
. 如.果 -S 和 :step 同时出现,则 :step 优先。 美容
F)DE.F 中的 :start. 和 :end 可以覆盖 –-start 和 –-end 的值。.
. 默认情况下,如果 DEF 中不加 :start 和 :end ,则等于 –-st.art 和 –end 乙肝
如果 DEF. 中定义了 :start 和 :end ,则以 :start 和 :en.d 为准。.
实例1 :使用 –-start 指定 X 轴的起始.时.间( 游戏 )
[root@dns1 bob]# rr.dtool graph 1.png \ . 域名
> --start now-120000 \ . # 表示起始时间是当前时间往前 120000 秒,也就是. 33 个小时左右 外汇
> DEF:value1=eth0.rrd:e.th0_i.n:AVERAGE \ # 从eth0.rrd 中取出 eth0_.in 的数据,CF 类型为 AVERAGE.
> AREA:value1#f.f00.0.0 # 用“方块”的形式来绘制 value1 ,注意这里是用 value1 ,不是用 eth0_in电影
481x15.4 # 如果 RRDtool. 有绘图方面的语句,则这里显示图片大小,否则为 0x0。( 游戏 )
[
root@d.ns1 bob]# 乙肝
复制代码

外贸
可以看到 X ..轴的文字有些是乱码,不过不要紧,你可以临时已用 env LANG=C rrdtool xxxx 来解决该问题,或者在后面用.
–n 来设定. RRDtool 使用中文字体,就.不会出现这样的情况了 建材
实例2 :使用 :step 从第2个.RRA中取数据--- 印刷
[root@dns1 bob]# rrdto.ol graph 2.p.ng \ 乙肝
> --start now-1200.00 \.
> DEF:value1=.eth0.rrd:eth0_in:AVERAGE:step=1000 \ # :step 指定. resolution=.1000 .
> AREA:value1#.ff0000 乙肝
481x154
[.root@dns1 bob]# 杀毒
复制代码
这里是 :step=1000,但 RRDtool 会取 :step=1200 的 第2个. RRA 的数据来绘图,.可以和上面的 1.png 比.较,发现比较平滑。--------------彩票

<性病>
实例3 :使用 –S 从第2个RRA中取.数据 婚庆
[root@dn.s1 bob]# rrdtool grap.h 4.png 健康
> -S 1200 \ .# 使用. –S 控制 RRDtool 从 resolution=1200 的 RRA 中取数据服务器
> --start now-120000. \.
> DEF:value1=eth0.rrd:.eth0_in:AVE.RAGE \ 电子
> AR.E.A:value1#ff0000 女人
481x154
[root.@dns1 bob]# <性病>
复制代码

外汇
可以看到和上面的图一样,说明 RRDtool. 的确按照 -S 的设置从第2个RRA .中取数据了.
使用 –S 可以对 DEF 中所有的 DS 都使用相同的 resolution.,等于在每个. DEF后都加上 .:step=<value> ,value 是 –S 的值 鲜花
实例4 :同时使用 –S 和 :st.ep 域名
[root@dns1 bob]# rrdtool. graph 5..png 电脑
> -S 120.0 \ # -S 指定 resolution=.1200 女人
> --start now-12000.0 \投资
> DEF:value.1=eth0..rrd:eth0_in:AVERAGE:step=300 .\ # :step 指定 resolution=300[成人用品]
> AREA:.value1#ff0000 投资
481x154
[r.oot@dns1 bob]#<性病>
复制代码

婚庆
可以看到 5.png 和 1.png 是一样的.,也就是说 –S 1200 并没有起作用,而是 :step=300 起作用.了--- 印刷
实例5 :使用 :.start 和 :.end 只显示指定时间内的数据电影
[root@dns1 bob]# rrdtool graph. 1.png .\.
> --start now-1h \ . . # X 轴显示1个小时的长度电脑
> DEF:va.lue1=et.h0.rrd:eth0_in:AVERAGE:start=now-600:end=no.w-300 \ # 但只取10分钟前到5分钟前的这部分 汽车
> AREA:value1#0.0ff00:in .
475x168
[root@dns.1 bob]#<性病>
复制代码

域名
如果我们.不加 :start 和 :end ,则效果如.下 :电脑

( 游戏 )
我们甚至可以让两个对象显示不同的时.间,例如 域名
实例6 :让两个对象显示不.同时间段的数据.
[root@dns1 bob]# rrd.tool .graph 1.png \服务器
> --.start now-2h \ # 规定时间为2小.时内--------------彩票
> DEF:value1=eth0.rrd:eth0_in:AVERAGE:end=now:start=e.nd-1h \ # 规.定时间为1小时.内 外汇
> DEF:value2=eth0.rrd:eth0_out:AVERAG.E \ # 没有指定 :start 和. :end,默认和 –-st.art 一样也是2小时 健康
> AREA:v.alue1#00ff00:in \.
> LINE2:v.al.ue2#ff0000:out:STACK .
475x168
[ro.ot@dns1 bob]#(广告)
复制代码

.
实例7 :把一段时间分为.几段分别显示 :虚拟主机
[root@dns1 bob]# rr.dtool gr.aph 1.png \ 婚庆
> DEF:value1=eth0.rrd:eth0._in:AVERAGE:en.d=now:start=end-1h \ # 当前1小时.内 建材
> DEF:value2=eth.0.rrd:e.th.0_in:AVERAGE:end=now-1h:start=now-2h \ # 2小时前电影
> DEF:value3=eth0.rrd:eth0_in:AVERAGE:end=now-2h:start=now.-3h \. # 3小时.前( 游戏 )
> LIN.E1:value1#0.0ff00:"1 hours ago" \健康
> LIN.E2:value2#ff.0000:"2 hours ago" \ 乙肝
> LINE.3:value3#000000:"3 hour.s ago" 服务器
475x168
[.root@dns1 bob]学习
复制代码

健康
我们把3个小时内的数据用三.种不同粗细、.不同颜色的曲线画了出来。 杀毒
看到了吗,out部.分(红色)显示了2个小时内的流量,而in部分(绿色)则只显示了1个小时.内的部分.
在这里要提一点,.虽然我们指定了 –-start 或者 –-end ,或者 :start , :end,但并不意味着曲线就一定会从指定的时间点.开始和结束.。.
例如我们上面.指定了 :start=now-600:end=now-300 ,也就是只显示5分钟的数据。但图表.出来的效果却是10(10:05-.10:15)分钟教育
的数据,这是因为我们挑选的时间当中“不慎”横垮了两个周期(10:05-10.:10,10:10-10:15),所以 RRDt.ool 会把它们全部画.出来,而( 游戏 )
不是只画其中的5分钟。