RRDTool工具使用详解

来源:互联网 发布:linux 修改字符集 编辑:程序博客网 时间:2024/04/29 10:06

目录

1、RRDTool简介

2、所需了解的术语

3、RRDTool工具绘图流程

4、软件安装

5、RRDTool绘图工作流程

6、实战案例

7、总结

说明:博文中涉及的图片可能不是博主绘制。

1、RRDTool简介

    RRDTool是一个强大的绘图引擎,它能把以时间序列的数据用图表的的方式直观的表现出来,是由Tobias Oetiker编写的工具,并且是一款开源、自由的软件,早期的MRTG也是由Tobias Oetiker主导编写,因为MRTG有众多的不足,所以后来作者开发了RRDTool工具。

    RRD是Round Robin Database的缩写,中文名为轮转数据库,数据库以rrd结尾。这种数据库由一个固定大小的数据文件来存放数据,此数据库不会像传统数据库一样为随着数据的增多而文件的大小也在增加,RRD在创建好后其文件大小就固定,可以把它想像成一个圆,圆的众多直径把圆划分成一个个扇形,每个扇形就是可以存数据的槽位,每个槽位上被打上了一个时间戳,在圆心上有一个指针,随着时间的流逝,取回数据后,指针会负责把数据填充在相应的槽位上,当指针转了360度后,最开始的数据就会被覆盖,就这样RRD循环填充着数据,其工作方式如下图所示:

wKiom1Vry1eA43n7AACOZKfcNyg004.jpg

2、所需了解的术语

    这个数据库里存储的数据未必是我们直接获取到的源数据,采用一些数据搜集工具,如脚本、shell命令、SNMP等工具在一定时间间隔里把数据搜集填充到rrd数据库中,这些需要数据搜集的对象叫DS,一个DS里在一个时间里可以搜集的数据可以有多个,比如一个时间点上对网卡来说有进来的流量,也有流出的流量,所以这是2个数据成为一组数据。源数据获取到后是存放在一个数据库的一个临时区域,这些源数据叫做PDP,RRDTool把这些PDP数据作为数据源通过分组、再利用聚合函数计算后把计算后的结果放在RRD数据库的时间槽(time slot)上,这些数据叫做CDP,CDP才是RRDTool绘图时真正打交道的数据,源数据只是数据搜集工具搜集交到RRDTool的源数据,这些数据需要再次整理成CDP后RRDTool才能调用。在从源数据中取数据做聚合计算时会有一个挑选数据的基准,也就是说是以几个源数据为一组做聚合,根据现实需求的不同,对源数据可以很灵活的选择不同的时间段提取源数据,再聚合提取不同的聚合值,这样就产生不同组别的CDP数据,这些有以相同时间段挑选源数据及相同聚合函数计算的结果组成的数据就叫RRA,所以根据挑选源数据的标准及采用的聚合函数的不同,RRA可以有多组。

    整理一下涉及到的术语:

DS:Data Source  数据源,用于定义搜集数据的工具所搜集数据的一些特性

Time Solt:时间槽,用于存放通过聚合后的数据区域

PDP:Primary Data Point  主数据节点,每个时间点产生的数据,即是搜集的源数据,没有做聚合的数据

CDP(Consolidation Data Point  聚合数据节点):通过对获取的源数据分组、聚合计算后得到的数据叫CDP,

RRA(Round Robin Archive 轮转归档):以相同的分组、聚合函数计算后的CDP数据组就组成了RRA

Resolution(解析度):这是一个时间跨度,表示在做聚合计算时是以几个连续的time slot里的数据做聚合,在默认时rrd是以300秒的间隔产生一个time slot。

CF:Consolidation Function,合并函数或聚合函数,以RRDTool中有AVERAGE、MAX、MIN、LAST4种

以一个图来说明PDP、CDP、RRA之间的关系:

wKioL1VrzQ6ArDLIAAC5HTPyIEk166.jpg

PDP是以规定的时间间隔(默认为300秒)搜集的源数据,第一个RRA以4个PDP(即4*300秒)为一组做CF后组成的数据,第二个RRA则是以10个PDP为一组做CF后组成的数据。

3、RRDTool工具绘图流程

    先是利用搜集工具搜集源数据,再把这些数据以一定时间间隔填充到rrd数据库,再从源数据中以定义的时间间隔为组通过CF计算后生成RRA数据,再由RRDTool抽取出RRA数据绘制成图表。发一个图来说明:

wKiom1Vry5qTeOkXAACoWIhpP00285.jpg

第一步:创建一个数据库,用于存放数据,也是绘图时的数据来源;

第二步:数据采集,RRDTool没有自带数据采集功能,需要自己用脚本、命令、SNMP等方式采用所要绘图的数据;

第三步:数据采集后,通过分组,CF后把数据更新到数据库中;

第四步:因为RRDTool绘制的是以时间序列的走势图,所以第二到第四步是循环进行的。

4、软件安装

    RRDTool工具在众多平台都可以运行,我这里以CentOS(CentOS 6.4_x86_64)平台为例,在这里下载所需包http://packages.express.org/rrdtool/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@nod0 rrdtools]# pwd
/root/software/rrdtools
[root@nod0 rrdtools]# ls
rrdtool-1.4.7-1.el6.wrl.x86_64.rpm  rrdtool-perl-1.4.7-1.el6.wrl.x86_64.rpm
[root@nod0 rrdtools]# yum -y install *.rpm
[root@nod0 rrdtools]# rrdtool -v
RRDtool 1.4.7  Copyright 1997-2012 by Tobias Oetiker <tobi@oetiker.ch>
               Compiled Mar 10 2013 23:57:47
Usage: rrdtool [options] command command_options
Valid commands: create, update, updatev, graph, graphv,  dump, restore,
  last, lastupdate, first, info, fetch, tune,
  resize, xport, flushcached
RRDtool is distributed under the Terms of the GNU General
Public License Version 2. (www.gnu.org/copyleft/gpl.html)
For more information read the RRD manpages

rrdtool安装好后不需要额外的什么配置,因为它的工作不依赖配置文件,下边将介绍一些学用的指令。

5、RRDTool常用指令

    回想一下第3节中的RRDTool的绘图流程图,第一步创建rrd数据库,RRDTool提供了create来创建这个数据;第二步的数据搜集工作RRDTool无法完成,也就没有相关指令做这部分工作;第三步的数据更新工作有update命令;第四步绘图有graph命令,下边就一一介绍这三个子命令的使用方法。

5.1、数据库创建命令

语法: rrdtool create filename [--start|-b start time] [--step|-s step] [--no-overwrite] [DS:ds-name:DST:dst arguments] [RRA:CF:cf arguments]

命令分解:

create:表示创建数据库

filename:表示数据库名称,以rrd结尾

--start|-b start time:表示数据库的time slot的起点是哪个时间戳(1970年1月1日0点0分0秒到目前的秒数),默认是(now-10s)

-step|-s step:定义rrd接收数据的时间间隔,这个时间间隔接收到的数据叫做PDP,默认是300秒的时间间隔

DS:ds-name:DST:dst arguments:这是定义RRDTool接受什么数据源的数据更新,可以定义多个数据源

    DS:Date Source,定义表示开始定义一个数据源

    ds-name:这个数据源的名称,由最多19个包括[a-zA-Z0-9_]的字符组成

    DST:Define Source Type,表示数据源的类型,数据类型有5个值(GAUGE,COUNTER,DERIVE,ABSOLUTE,COMPUTE),最后跟上数据类型的参数

RRA:CF:cf arguments:定义一组RRA

    RRA:Round Robin Archive,表示开始定义一个轮转归档信息

    CF:定义一个聚合函数

数据源DS的格式为详解:

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

    GAUGE:表示rrd接收到什么值数据库中就保存什么值,不作任何修改;

    COUNTER:保存的是相对值,比如网卡已接收数据包的数量,这个数量会依次增加,而记录时是这样记录的,假如第一次记录为100,在到达第二次记录时间时网卡又接收了150个包,那在第二个时间点网卡已接收的数据包为250个,但COUNTER这种类型就记录相对于前一次数据包的改变量,即150个,依次类推,第三次记录相对前一次数据包的改变量。COUNTER这种这种类型需要记录的数据在后一个数据会大于等于前一个数据的特性,即有递增的特性。

    DERIVE:也是记录的相对值,但没有数据递增的要求,像记录温度的变化就可用此类型。

    ABSOLUTE这个数据类型记录的数据是起初是有一个数据作为参考,然后用接收到数据与初始数据计算后得到的数据。

    heartbeat:min:max这三个参数的含义:

        heartbeat :表示心跳数,它的意义是rrdtool如果在设定心跳的时间内没有收到数据,那就把这个从数据定为“UNKNOWN”

        min:max表示rrdtool所能存储数据的最小值与最大值,不作限制就U代替

    COMPUTE有自己的格式,这个数据类型不太懂,就不做介绍,格式如下:

        DS:ds-name:COMPUTE:rpn-expression

轮转归档数据的定义格式详解:

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

    xff:表示一个比例值,即在聚合计算中挑选出的PDP那一组数据中有多大比例的数据为UNKNOWN,如果这个UNKNOWN状态所占比例值小于我们定义的值,那就认为数据是可用的,否则此数据为不可用,一般设置为“0.5”

    steps:定义此聚合计算是对几个连续的PDP进行聚合计算的

    rows:定义保存以steps定义的值做聚合后,需要保存这样的数据的个数

此命令详细的说明可参考这里的篇译文http://blog.sina.com.cn/s/blog_4e424e2101000b5s.html,http://blog.csdn.net/ysuncn/article/details/1723672

5.2、数据更新命令

语法:

rrdtool {update | updatev} filename [--template|-t ds-name[:ds-name]...]

       [--daemon address] [--] N|timestamp:value[:value...]  at-timestamp@value[:value...]

       [timestamp:value[:value...] ...]

filename:表示用create命令创建的rrd数据库文件;

--template|-t ds-name[:ds-name]...:这里表示插入rrd数据库文件时DS的顺序,因为在rrd的一个time slot上可以存放多个数据,向里插入数据时要按照create数据库时的定义ds的顺序插入,不然就要定义此选项来指定一个新的ds顺序;

N|timestamp:value[:value...]:这里定义向rrd数据库插入的数据,格式为“时间:具体数据”,N表示当前时间,timestamp表示一个时间戳,后边接的值可以有多个,当create数据库时定义了多个ds时值就会有多个,这里value的顺序要和create数据库时定义的ds的顺序相同或是与"--template|-t ds-name[:ds-name]..."重新定义的顺序相同

5.3、查看数据库的数据

语法:

rrdtool fetch filename CF [--resolution|-r resolution] [--start|-s start]

       [--end|-e end] [--daemon address]

filename:表示以rrd结尾的那个数据库文件;

CF:表示那4个聚合函数中的一个,具体就是在create数据库时定义的RRA中的聚合函数

--resolution|-r resolution:这是表示解析度,具体就是在create数据库时的定义接收数据的时间间隔的数量与在定义RRA“RRA:AVERAGE | MIN | MAX | LAST:xff:steps:rows”中steps的乘积;

5.4、绘图命令

命令中有许多选项在实际工作中可以不指定,但需要了解。

语法:

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

OPTIONS

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]     绘制成预览图

       [-D|--full-size-mode]  图片能自动缩放

Limits

       [-u|--upper-limit value]   指定y轴显示数值最大数

       [-l|--lower-limit value]    指定y轴显示数值最小数

       [-r|--rigid]   指定好y轴的上下限值后就不再自动缩放

       [-A|--alt-autoscale]  即使指定好y轴的上下限后依然可缩放,但不能超过上下限值。

       [-J|--alt-autoscale-min]   表示只自动缩放最小值

       [-M|--alt-autoscale-max]  表示只自动缩放最大值

       [-N|--no-gridfit]  不显示网格线

X-Axis

       [-x|--x-grid GTM:GST:MTM:MST:LTM:LST:LPR:LFM]   指定横坐标的一系列格式

       [-x|--x-grid none]

       举例:

       --x-grid MINUTE:10:HOUR:1:HOUR:4:0:%X,这里表示每10分钟间隔显示一个基准网格线,以每小时间隔显示一个主网格线,每4个小时间隔显示一个x轴上的标签,“0:%X”表示显示标签的格式

Y-Axis

       [-y|--y-grid grid step:label factor]   指定y坐标的格式

       [- y|--y-grid none]

从数据库获取数据的的数据定义格式:

DEF:vname=rrdfile:ds-name:CF[:step=step][:start=time][:end=time]   数据源的指定格式

    DEF:这是关键字

    vname:自定义一个变量名

    rrdfile:指定rrd数据库文件的路径

    ds-name:指定想获取数据源中的在create中定义的DS名称

    CF:定义以哪种聚合函数取出数据

选择画线条图的格式:

LINE[width]:value[#color][:[legend][:STACK][:skipscale][:dashes[=on_s[,off_s[,on_s,off_s]...]][:dash-offset=offset]]]

LINE[width]:表示选择线条类型绘图width表示线条的粗细,一般有1,2,3三个值

value:表示在DEF中定义的vname

#color:表示以哪种颜色来绘制线形图,不定义颜色时线条不可见

legend:表示显示绘制线条的图例信息

6、实战案例

案例1:每5秒生成一个随机数存放到rrd数据库,我们要进行绘图的值是每5秒的平均值,每50秒的平均值,每500秒的平均值。且要能绘制24小时内的每5秒的平均值的图,要能绘制两天内的每50秒平均值的图,要能绘制1个星期的每500秒的平均值的图。

1
2
[root@nod0 ~]# rrdtool create test.rrd --step 5 DS:testds:GAUGE:8:0:U RRA:AVERAGE:0.5:1:17280 RRA:AVERAGE:0.5:10:3456 RRA:AVERAGE:0.5:100:1210
#17280是假设数据保存24小时计算得来的,86400/(5*1)=17280;(86400*2)/(5*10)=3456;(86400*7)/(5*100)=1209.6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@nod0 ~]# rrdtool info test.rrd  #查看数据库的信息
filename = "test.rrd"
rrd_version = "0003"
step = 5
last_update = 1433000058
header_size = 1000
ds[testds].index = 0
ds[testds].type "GAUGE"
ds[testds].minimal_heartbeat = 8
ds[testds].min = 0.0000000000e+00
ds[testds].max = NaN
ds[testds].last_ds = "U"
ds[testds].value = 0.0000000000e+00
ds[testds].unknown_sec = 3
rra[0].cf = "AVERAGE"
rra[0].rows = 17280
rra[0].cur_row = 11684
rra[0].pdp_per_row = 1
rra[0].xff = 5.0000000000e-01
rra[0].cdp_prep[0].value = NaN
rra[0].cdp_prep[0].unknown_datapoints = 0
rra[1].cf = "AVERAGE"
rra[1].rows = 3456
rra[1].cur_row = 1801
rra[1].pdp_per_row = 10
rra[1].xff = 5.0000000000e-01
rra[1].cdp_prep[0].value = NaN
rra[1].cdp_prep[0].unknown_datapoints = 1
rra[2].cf = "AVERAGE"
rra[2].rows = 1210
rra[2].cur_row = 934
rra[2].pdp_per_row = 100
rra[2].xff = 5.0000000000e-01
rra[2].cdp_prep[0].value = NaN
rra[2].cdp_prep[0].unknown_datapoints = 11

以脚本的方式把rrdtool update命令封装起来把随机产生的数据写入到rrd数据库中:

1
2
3
4
5
6
7
8
9
[root@nod0 ~]# vim genval.sh
#!/bib/bash
#
while true;do 
    rrdtool update /root/test.rrd N:$RANDOM
    sleep 5
done
[root@nod0 ~]# chmod +x genval.sh
[root@nod0 ~]# bash  -x genval.sh  #让脚本运行一段时间
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@nod0 ~]# rrdtool fetch -r 5 /root/test.rrd AVERAGE  
#当脚本运行一段时间后,查看数据库中的数据,“-r 5”表示获取数据的解析度,即表示以每5秒的时间取得的数据聚合后取AVERAGE的值。在我们create数据库时本来就是规定每5秒获取一个数据,所以这里就是在time slot上的这一个值自己给自己做平均计算,其实平均后就是本身。在此案例中我们要能查看每5秒,每50秒,第500秒的平均值,所以这里的"-r"也可指定50,500来查看相应的数据,如果指定一个解析度是我们没有事先规划好的,那rrd会智能选择一个临近你指定的解析度来获取数据,比如指定了"-r 300",那rrd会在"50"和“500”这两个解析度间权衡,最终会以“-r 500”来列出数据,这个可以验证的。
......
1433046645: 1.0455325451e+04
1433046650: 1.4075998904e+04
1433046655: 6.5947377492e+03
1433046660: 8.0364061710e+03
1433046665: 3.1844697036e+04
1433046670: 3.2457433752e+04
1433046675: 1.5680352955e+04
1433046680: 2.8218131930e+04
1433046685: 8.4819832280e+02
1433046690: 1.4497840578e+04
1433046695: 1.4497840578e+04
1433046700: 7.7085841264e+03
1433046705: 2.9758471149e+04
1433046710: 1.0487534120e+04
1433046715: 2.9641303155e+04
1433046720: 2.6827516985e+04
1433046725: 1.9122574796e+04
1433046730: 2.6697401840e+04
1433046735: 1.2234064520e+03
1433046740: 1.5563750052e+04
1433046745: 2.5905735010e+04
......

rrd中有数据了,那现在创建一个图形试试:

1
2
3
4
[root@nod0 ~]# rrdtool graph a.png --step 5 -s 1433042265 -t Test -v vtest DEF:vtest=/root/test.rrd:testds:AVERAGE LINE1:vtest#FF0000:testline  #有警告信息
(process:3366): Pango-WARNING **: failed to choose a font, expect ugly output. engine-type='PangoRenderFc', script='common'
(process:3366): Pango-WARNING **: failed to choose a font, expect ugly output. engine-type='PangoRenderFc', script='latin'
521x173

把图片导出后打开是这样的

wKioL1VrzV6SzANtAAEfKbVevuk942.jpg

看上去字体的问题,把字体库安装好后再尝试:

1
[root@nod0 ~]# yum -y install xorg-x11-font*

再次尝试后得到每5秒获得随机数平均值的趋势图如下:

wKioL1VrzXzhUXGlAAD3Vm0bXHM481.jpg

1
[root@nod0 ~]# rrdtool graph d.png -s 1433042265 -t Test -v vtest DEF:vtest=/root/test.rrd:testds:AVERAGE:step=5 LINE1:vtest#FF0000:testline

注:这命令与上边的命令功能一样只是把解析度这个参数写在DEF的定义里了

把set=5更换成set=50就得到了每50秒获得随机数的平均值的趋势图,如下

1
[root@nod0 ~]# rrdtool graph e.png -s 1433042265 -t Test -v vtest DEF:vtest=/root/test.rrd:testds:AVERAGE:step=50 LINE1:vtest#FF0000:testline

wKiom1VrzAqRneZfAAD1dUHUl4E235.jpg

试想一下能不能把每5秒获得的平均数的走势与每50秒的平均值的趋势图用两条线条绘制在一个图形中呢,这是可以的:

1
[root@nod0 ~]# rrdtool graph f.png -s 1433042265 -t Test -v Title DEF:vtest1=/root/test.rrd:testds:AVERAGE:step=5 DEF:vtest2=/root/test.rrd:testds:AVERAGE:step=50 LINE1:vtest1#FF0000:line1 LINE1:vtest2#00FF00:line2

wKioL1VrzfqCHtRYAAEKSxUtG-g961.jpg

案例2:

案例2:绘制mysql服务器中每3秒,每30秒中发生查询的平圴值的走势图,且每3秒中平均值的走势图能保存24小时内的数据,每30秒平均值的走势图能保存24小时内的数据。且图例中还要显示出最后30秒的取值中值的最大值和最后那一个可用值。

1
2
[root@nod0 ~]# rrdtool create mysql.rrd --step 3 DS:myselect:COUNTER:5:0:U RRA:AVERAGE:0.5:1:28800 RRA:AVERAGE:0.5:10:2880 RRA:MAX:0.5:10:2880 RRA:LAST:0.5:10:2880
 注:这里的2880是这样计算出来的,24*60*60/(3*10)=2880

接下来想办法为这个数据库文件中填充数据,以获取mysql数据库执行查询操作的计数为数据来填充rrd数据库,在mysql数据库中,在mysql终端执行“show global status like 'com_select'”就能查询mysql被查询的次数,如下:

1
2
3
4
5
6
MariaDB [(none)]> show global status like 'com_select';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| Com_select    | 237823 |
+---------------+--------+

在shell下获取此值如下操作:

1
2
3
4
5
6
[root@nod0 ~]# mysql -uroot -p111111 -e "show global status like 'com_select'"
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| Com_select    | 237824 |
+---------------+--------+

去掉表格的外框加上参数batch即可:

1
2
3
[root@nod0 ~]# mysql -uroot -p111111 --batch -e "show global status like 'com_select'"
Variable_nameValue
Com_select237825

最后想要得到那个查询的值加上过虑条件即可:

1
2
[root@nod0 ~]# mysql -uroot -p111111 --batch -e "show global status like 'com_select'" | awk '/Com_select/{print $2}'
237828

然后写成一个脚本自动每隔3秒就把获取到的mysql查询的值写进rrd数据库中,脚本如下:

1
2
3
4
5
6
7
8
9
10
[root@nod0 ~]# vim getselect.sh
#!/bin/bash
#
while true;do
   SELECT=`mysql -uroot -p111111 --batch -e "SHOW GLOBAL STATUS LIKE 'com_select'" awk '/Com_select/{print $2}'`
    rrdtool update /root/mysql.rrd N:$SELECT
    sleep 3
done
[root@nod0 ~]# chmod +x getselect.sh
[root@nod0 ~]# bash -x getselect.sh  #把脚本执行着

为了更快的让Com_select的数值增加,现在需要向mysql数据库发起查询请求,让查询的数值增加,依然用脚本来完成,如下:

1
2
3
4
5
6
7
8
9
[root@nod0 ~]# vim insert.sh
#!/bin/bash
#
for in {1..200000};do
    mysql -uroot -p111111 -e "INSERT INTO testdb.tb1(NAME) VALUES ('stu$I')"
    mysql -uroot -p111111 -e "SELECT * FROM testdb.tb1" &> /dev/null
done
[root@nod0 ~]# chmod +x insert.sh
[root@nod0 ~]# bash -x insert.sh  #执行脚本

现在mysql中的Com_select的值会快速增长,一会就可以用rrdtool工具绘制图形了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@nod0 ~]# rrdtool fetch /root/mysql.rrd -r 30 AVERAGE  #通过此命令查找一个绘图起点的时间戳
......
1433062920: -nan
1433062923: -nan
1433062926: -nan
1433062929: -nan
1433062932: -nan
1433062935: -nan
1433062938: -nan
1433062941: -nan
1433062944: -nan
1433062947: -nan
1433062950: -nan
1433062953: -nan
1433062956: 2.6646155669e-01
1433062959: 3.2913903433e-01
1433062962: 3.3101155484e-01
1433062965: 3.3063372547e-01
1433062968: 3.3057613269e-01
........
1
[root@nod0 ~]# rrdtool graph mysql.png -s 1433062920 -t "mysql select" -v "average select/3" DEF:select3=/root/mysql.rrd:myselect:AVERAGE:step=3 LINE1:select3#FF0000:"SELECT"

绘制的图如下所示:

wKioL1VrzhrDd8fOAADh3GLGWXg657.jpg

再把每30秒取得的平均查询数量也绘制出图形:

1
[root@nod0 ~]# rrdtool graph mysql.png -s 1433062920 -t "mysql select" -v "average select/30" DEF:select3=/root/mysql.rrd:myselect:AVERAGE:step=30 LINE1:select3#FF0000:"SELECT"

wKioL1VrzjuRXkKlAADJV37dNOU614.jpg

在定义rrd数据库是我们定义了RRA是有最大值和当前值的,在图片中可以把最后30秒中的最大值和最后30秒中的最后那一个可用数值也显示出来,这需要一个指令来完成,如下:

GPRINT:vname:CF:format

    GPRINT:关键字

    vname:表示在定义DEF时定义的变量值

    CF:定义我们在create数据库时定义的聚合函数

    format:显示图例的格式,这里有关于格式的详细说明http://oss.oetiker.ch/rrdtool/doc/rrdgraph_graph.en.html#___top,一般常用“%#.#lf”(lf是字母LF的小写),第一个#表示打印出的数字中小数点前有几位,第二个“#”表示保留几个小数位,如:12345.6789 的格式为(%5.4lf)

1
[root@nod0 ~]# rrdtool graph mysql.png -s 1433062920 -t "mysql select" -v "average select/30" DEF:select3=/root/mysql.rrd:myselect:AVERAGE:step=30 DEF:max30=/root/mysql.rrd:myselect:MAX:step=30 LINE1:select3#FF0000:"SELECT" GPRINT:max30:MAX:"MAXIMUN_PER_30s\: %6.2lf"

wKioL1VrzmGQpK9BAADN8aDlfuE713.jpg

1
[root@nod0 ~]# rrdtool graph mysql.png -s 1433062920 -t "mysql select" -v "average select/30" DEF:select3=/root/mysql.rrd:myselect:AVERAGE:step=30 DEF:max30=/root/mysql.rrd:myselect:MAX:step=30 DEF:last30=/root/mysql.rrd:myselect:LAST:step=30 LINE1:select3#FF0000:"SELECT" GPRINT:max30:MAX:"MAXIMUN_PER_30s\: %6.2lf" GPRINT:last30:LAST:"CURRENT\: %4.2lf"

wKiom1VrzOTiPHWsAADtBEJ6ntw414.jpg

7、总结

    通过对RRDTool这一工具学习与总结,我们了解到它是一个强大的绘图工具,且有一个独特的数据库叫轮转数据库,这个数据库一旦创建那文件的大小的确定,所能绘图的时间范围也就确定了,但在绘图时所使用的命令复杂,不容易掌握。


本文出自 “专注Linx,与Linux共舞” 博客,请务必保留此出处http://zhaochj.blog.51cto.com/368705/1657026

1 0
原创粉丝点击