Rrdtool 学习

来源:互联网 发布:网络舆情工作总结 编辑:程序博客网 时间:2024/06/08 03:25

  

rrdtool建档语法
rrdtool create filename
[--start|-b start time]
[--step|-s step]
[DS:ds-name:DST:heartbeat:min:max]
[RRA:CF:xff:steps:rows]



看起来语法好像不多(因为不多所以让很多人看不懂),但其实有点精深,这个建档的动作其实就像建立mrtg的log档,但是rrd让你可以自订五分钟资料笔数,平均值为多少时间单位,最大值为多少时间单位,要存几笔资料,即使用事后发现不足或有问题,依然可使用tune来调整.

create顾名思义,即建档
filename随你取,习惯上会以.rrd结尾
--start这个filename的资料记录起始日期,以1970年至今的秒数(预设是现在)
--step资料的间格时间,习惯上我们会设300 (秒),您可视自己的需求而定

下面的部份难一点了哦~~要仔细体会了,直接以例子做说明,比如说我们要测eth0上的某些udp/tcp port的流量及总流量(IP层以上):

DS:telnet:COUNTER:600:0:100000000 /
DS:smtp:COUNTER:600:0:100000000 /
DS:domain:COUNTER:600:0:100000000 /
DS:http:COUNTER:600:0:100000000 /
DS:total:COUNTER:600:0:100000000 /

DS Data Source DS "宣告"的意思
telnet是DSN (name) ,栏位名称,意即"变数名称"
COUNTER是DST(type),习惯上常用GAUGE(个别值,像CPU loading)及COUNTER (累计值,像流量资料)在产生图档时, GAUGE是100就画在Y轴100上,但如果是COUNTER ,前一值是98,则会画2
600是有效期(heartbeat),如果连续如果原来在12:00要产生资料而没有产生,前后300秒(共600秒)的平均值会算成12:00的值, 如果都没有值,则会成为"UNKNOWN" (UN,就像mrtg没有资料时,会画一平线的状况一样),UN在rrdtool里面还是有作用
0:100000000是说DSN的数值有效范围,如果超出这个值,皆视为UN,这里也可以写成U:U代表不限范围

DS的部份刚开始一定记不熟,不过用久了就不会有太大问题了,一个好记的方式即"三文字,三数字".

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即Round Robin Archive,你可以把它看成像DS,但是这里主要在处理资料笔数
AVERAGE在rrd称为CF (consolidation function),此处我们使用平均数,共有四种类别: AVERAGE, MIN, MAX, LAST意即平均值,最大值,最小值,最后一笔
0.5:1:603因为我们将step定为300秒是指若原计算时间点为12:00的话,记录时要以11:57:30~12:02:30的平均值为主,这个值若在此时间点内只有一笔资料的话,其意即是平均值,所以此一值即表原telnet/smtp…等共要记录几笔(若mrtg此值为603),603是指要存603笔(此处故意与mrtg同,以利大家判断),超过603笔,则最早之一笔将被移出.
0.5:6:603仅就6解释,取6笔资料(每笔为step值,在此意即5分钟)为平均值( 30分钟),存603笔
0.5:24:603 24即二小时
0.5:288:800 288即一天

请注意,不是0.5:1:603中的1就是五分钟,其乃依据你的--step值而定,如果--step 3600 ,那0.5:6:603这一行就是六小时合起来的平均值了.
若将AVERAGE换成MIN/MAX的意义则是取该时间点中(如上例之5min/30min/2hr..)之最大值或最小值,而通常在监测系统时最大值与平均值是较有实际意义的.
 
 
 
 
rrdtool update filename [--template|-t ds-name[:ds-name]...] N|timestamp:value[:value...]
 
 

这个很好理解,基本上就是根据DS来更新资料,如上述之tcpdump.rrd,若有需要更新时及时
$>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`

通常这里你得写个小程式取数据,或用snmpget/snmpwalk抓资料来做rrdtool update,再用crontab根据你在rrdtool create时的step来决定执行排程的时间点
 
 
 
rrdtool graph filename [-s|--start seconds] [-e|--end seconds]
                [-x|--x-grid x-axis grid and label]
                [-Y|--alt-y-grid]
                [-y|--y-grid y-axis grid and label]
                [-v|--vertical-label string] [-w|--width pixels]
                [-h|--height pixels] [-o|--logarithmic]
                [-u|--upper-limit value] [-z|--lazy]
                [-l|--lower-limit value] [-r|--rigid]
                [-g|--no-legend]
                [-F|--force-rules-legend]
                [-j|--only-graph]
                [-n|--font FONTTAG:size:font]
                [-m|--zoom factor]
                [-A|--alt-autoscale]
                [-M|--alt-autoscale-max]
                [-R|--font-render-mode {normal,light,mono}]
                [-B|--font-smoothing-threshold size]
                [-E|--slope-mode]
                [-N|--no-gridfit]
                [-X|--units-exponent value]
                [-L|--units-length value]
                [-S|--step seconds]
                [-f|--imginfo printfstr]
                [-a|--imgformat PNG]
                [-c|--color COLORTAG#rrggbb[aa]] [-t|--title string]
                [DEF:vname=rrd:ds-name:CF]
                [CDEF:vname=rpn-expression]
                [VDEF:vdefname=rpn-expression]
                [PRINT:vdefname:format]
                [GPRINT:vdefname:format]
                [COMMENT:text]
                [SHIFT:vname:offset]
                [TICK:vname#rrggbb[aa][:[fraction][:legend]]]
                [HRULE:value#rrggbb[aa][:legend]]
                [VRULE:value#rrggbb[aa][:legend]]
                [LINE[width]:vname[#rrggbb[aa][:[legend][:STACK]]]]
                [AREA:vname[#rrggbb[aa][:[legend][:STACK]]]]
                [PRINT:vname:CF:format] (deprecated)
                [GPRINT:vname:CF:format] (deprecated)
                [STACK:vname[#rrggbb[aa][:legend]]] (deprecated)
 
 
rrdtool graph image-filename
-s绘图资料的起始时间,预设是一天前,可参考上面的script ,-s `date …`的应用
-e绘图资料的结束时间,预设是现在,亦可使用date方式来达到前三天至昨天图档
--no-minor不要副格线
-t图档标题
-v Y轴说明
-w资料区的宽度,资料区指的是数据显示的部份,而非说明或图例
-h资料区的高度
-u Y轴正值高度
-l Y轴负值高度
DEF重要的地方,其语法为DEF:your_var:rrd_filename:DS_name:[AVERAGE|MAX..]

 

 

LINE{1|2|3}:vname[#rrggbb[:legend]]
AREA:vname[#rrggbb[:legend]]
STACK:vname[#rrggbb[:legend]]
LINE1:your_var#rgb颜色值:说明,这个your_var需存在DEF或CDEF的宣告中,
AREA则是画出资料数值至0之间的区磈图
STACK则是画出资料数值至其上的数值,也就是要有资料数值在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则是为了好算位置)
如果你不懂printf, man一下会比我解释一大堆来得快.

原创粉丝点击