如果您不熟悉RRDTOOL,可以先参看前面的RRDTOOL入门,简单来说,RRDTOOL不仅仅是数据库工具,它还是一种强大的前端绘图工具,可以直接根据所存的数据绘出复杂的图形。其绘图主要使用graph命令来操作。
一、graph 操作的语法
rrdtool graph filename [option ...] [data definition ...] [data calculation ...] [variable definition ...] [graph element ...] [print element ...]
其中的 data definiton、variable definition 、data calculation、分别是下面的格式
DEF:<vname>=<rrdfile>:<ds-name>:<CF>[:step=<step>][:start=<time>] [:end=<time>][:reduce=<CF>]
VDEF:vname=RPN expression
CDEF:vname=RPN expression
其中 filename 就是你想要生成的图片文件的名称,默认是 png 。你可以通过选项修改图片的类型,可以有 PNG、SVG、EPS、PDF四种。
A)DEF 是 Definition (定义)的意思。定义什么呢?你要绘图,总要有数据源吧?DEF 就是告诉 RRDtool 从那个 RRD 中取出指定
你可能会感到奇怪,为什么还有一个 CF 字段?因为 RRA 有多种 CF 类型,有些 RRA 可能用来保存平均值、有些 RRA 可能用于统计最大值、最小值等等。所以你必须同时指定使用什么 CF 类型的 RRA的数据。至于 :start 和 :end 、:reduce 则用得比较少,最常用的就是 :step 了,它可以让你控制 RRDtool 从那个 RRA 中取数据。
B)VDEF 是 Variable Definition (变量定义)的意思。
C)CDEF 是 Calculation Define 的意思。CDEF 支持很多数学运算,甚至还支持简单的逻辑运算 if-then-else
二、选项分类
本部分我们按照官方文档的方式,把选项分成几大类,分为 :
A)Time range : 用于控制图表的X轴显示的起始/结束时间,也包括从RRA中提取指定时间的数据。
B)Labels :用于控制 X/Y 轴的说明文字。
C)Size :用于控制图片的大小。
D)Limits :用于控制 Y 轴的上下限。
E)Grid :用于控制 X/Y 轴的刻度如何显示。
F)Miscellaneous :其他选项。例如显示中文、水印效果等等。
G)Report :数字报表
需要说明的是,本篇当中并不是列出了所有选项的用法,只是列出较为常用的选项,如果想查看所有选项的的用法,可以到官方站点下载文档。
三、时间范围控制(Time Range)
[-s|--start time] [-e|--end time] [-S|--step seconds]
既然要绘图,就应该有一个起始/结束的时间。Graph 操作中有 –s ,-e 选项。这两个选项即可以用于控制图表的 X 轴显示的时间范围,也可以用于控制 RRDtool 从 RRA 中提取对应时间的数据。如果没有指定 –-end ,默认为 now;如果没有指定 –-start,则默认为1天前。如果两者都没有 指定,则图表默认显示从当前算起1天内的。
例如:
[root@dns1 bob]# rrdtool graph 1.png / > --start now-1h / # X 轴显示1个小时的长度 > DEF:value1=eth0.rrd:eth0_in:AVERAGE:start=now-600:end=now-300 / # 但只取10分钟前到5分钟前的这部分 > AREA:value1#00ff00:in 475x168 [root@dns1 bob]#
四、说明文字(Label)
[-t|--title string] [-v|--vertical-label string]
-t 是用于图表上方的标题,-v 是用于 Y 轴的说明文字
五、图表大小(Label)
[-w|--width pixels] [-h|--height pixels]
这里说图表大小而不是图片大小,是因为 –w ,-h 控制的是 X/Y 轴共同围起来的那部分大小,而不是整个图片的大小,这点在前面就可以看出了。
默认的图表大小是 400 (长)x 100 (高),但一般会返回497x179 这样的数字,这个才是图片的大小。
六、Y 轴上下限(Limits)
[-u|--upper-limit value] [-l|--lower-limit value] [-r|--rigid]
默认情况下,RRDtool 会自动调整 Y 轴的数字,来配合当前的数值大小。如果想禁止该特性,可以通过 –upper-limit 和 –lower-limit 来做限制,表示Y轴显示的值从多少到多少。如果没有指定 –rigid ,则在图表的上下边界处还是会有一些延伸,但如果指定了 -–rigid ,则严格按照 –-upper-limit 和 –-lower-limit 绘制。
在使用 –lower-limit 时要注意,如果数据中有负数,如果 -–lower-limit 为 0,则负数部分是显示不出来的。
七、数字报表
这就需要用到 GRPINT 和 COMMENT 语句了。
GPRINT 就是在图表的下方(仍然属于图片的内部)输出最大值、最小值、平均值这些东东;COMMENT 就是用来输出一些字符串,例如报表的表头。
A)GPRINT的格式是GPRINT:vname:CF:format 。由于 format 部分太多参数了,我这里就用最常用的那个 : %x.ylf 。
B)COMMENT 的格式是COMMENT:text 。要注意 COMMENT 默认是不输出换行的,如果要输出换行,必须用 “/n” 。
下面就以一个实例来说明如何打印报表 : 绘制1小时前的流量图,并打印数字报表(参照 abel 兄给出的例子)
[root@dns1 bob]# rrdtool graph 1.png / > --start now-1h -w 600 -n DEFAULT:8 / > DEF:value1=eth0.rrd:eth0_in:AVERAGE / > DEF:value2=eth0.rrd:eth0_out:AVERAGE / > COMMENT:" /n" / > COMMENT:" 当前值----------平均值----------最大值------最小值----/n" > COMMENT:" /n" > AREA:value1#00FF00:"流入" / > GPRINT:value1:LAST:'%13.2lf' / > GPRINT:value1:AVERAGE:%13.2lf / > GPRINT:value1:MAX:%13.2lf / > GPRINT:value1:MIN:%13.2lf / > COMMENT:" /n" / > LINE2:value2#ff0000:"流出":STACK / # 注意这里是 STACK 方式 > GPRINT:value2:LAST:%13.2lf / > GPRINT:value2:AVERAGE:%13.2lf / > GPRINT:value2:MAX:%13.2lf / > GPRINT:value2:MIN:%13.2lf / > COMMENT:" /n" / > COMMENT:” /n” / > COMMENT:"LAST UPDATED /:$(date '+%Y-%m-%d %H/:%M')/n" -Y 687x270 [root@dns1 bob]#
注意比较 Y 轴刻度值和“流出”部分的值的关系, Y 轴刻度值 —“流入” =“流出”
上面的 COMMENT 一是输出表头,二是输出空行。注意,要用 COMMENT 输出空行,必须用 COMMENT:’ /n’ 。
注意到 ‘/’ 前面的空格吗?这个是不可以漏的,否则就不会有空行的效果了。