重要资料:
一、前言
为了做云缓存平台的技术储备,从零开始学习了rrdtool,rrdtool非常强大,刚接触会有摸不着边的感觉,尤其是一堆概念性的东西。学习的切入点便是这些概念,一一理解后你才能品尝到rrdtool的清香,首先要感谢ailms整理的“ ”,通俗易懂的概况了rrdtool的所有知识。现在整理自己在学习过程中的一些笔记。 二、基本概念 RRDtool是指Round Robin Database 工具(环状数据库)。Round robin是一种处理定量数据、以及当前元素指针的技术。想象一个周边标有点的圆环--这些点就是时间存储的位置。从圆心画一条到圆周的某个点的箭头--这就是指针。就像我们在一个圆环上一样,没有起点和终点,你可以一直往下走下去。过来一段时间,所有可用的位置都会被用过,该循环过程会自动重用原来的位置。这样,数据集不会增大,并且不需要维护。RRDtool处理RRD数据库。它用向RRD数据库存储数据、从RRD数据库中提取数据(来源百度问答 )。为了方便理解其工作原理,本人做了一个rrdtool存储结构图: 1、 DS 用于定义 Data Soure 。也就是用于存放脚本的结果的变量名(DSN)。如eth0_in ,eth0_out, lo_in , lo_out 。DSN 从 1-19 个字符,必须是 0-9,a-z,A-Z 。 2、 DST 的选择是十分重要的,如果选错了 DST ,即使你的脚本取的数据是对的,放入 RRDtool 后也是错误的,更不用提画出来的图是否有意义了。 DST描述: A) COUNTER:必须是递增的,除非是计数器溢出(overflows)。在这种情况下,RRDtool 会自动修改收到的值。例如网络接口流量、收到的packets 数量都属于这一类型。 B) DERIVE:和 COUNTER 类似。但可以是递增,也可以递减,或者一会增加一会儿减少。 C) ABSOLUTE:ABSOLUTE 比较特殊,它每次都假定前一个interval的值是0,再计算平均值。 D) GAUGE:GAGUE 和上面三种不同,它没有“平均”的概念,RRDtool 收到值之后字节存入 RRA 中。 E) COMPUTE:COMPUTE 比较特殊,它并不接受输入,它的定义是一个表达式,能够引用其他DS并自动计算出某个值。 这五种类型有什么区别?不防测试一下便知。 测试脚本:- import sys,os
- import time
- import random
- total_input_traffic = 0
- total_output_traffic = 0
- starttime=1252682400
- while 1:
- total_input_traffic = random.randrange(0, 5000)
- total_output_traffic = random.randrange(0, 5000)
- os.system("/usr/bin/rrdtool updatev /opt/rrdtool/COUNTER/eth0.rrd "+str(starttime)+":"+str(total_input_traffic)+":"+str(total_output_traffic))
- os.system("/usr/bin/rrdtool updatev /opt/rrdtool/DERIVE/eth0.rrd "+str(starttime)+":"+str(total_input_traffic)+":"+str(total_output_traffic))
- os.system("/usr/bin/rrdtool updatev /opt/rrdtool/ABSOLUTE/eth0.rrd "+str(starttime)+":"+str(total_input_traffic)+":"+str(total_output_traffic))
- os.system("/usr/bin/rrdtool updatev /opt/rrdtool/GAUGE/eth0.rrd "+str(starttime)+":"+str(total_input_traffic)+":"+str(total_output_traffic))
- if starttime>=1284218400:
- break;
- starttime+=300
date -d '1970-1-1 1276059000 sec utc'
date -d '2010-09-11 23:20' +%s
rrdtool create Flow.rrd \ --start $(date -d "1 year ago" +%s) \ --step 300 \ DS:eth0_in:GAUGE:600:0:5000 \ DS:eth0_out:GAUGE:600:0:5000 \ RRA:AVERAGE:0.5:1:600 \ RRA:AVERAGE:0.5:6:700 \ RRA:AVERAGE:0.5:24:775 \ RRA:AVERAGE:0.5:288:797 \ RRA:MAX:0.5:1:600 \ RRA:MAX:0.5:6:700 \ RRA:MAX:0.5:24:775 \ RRA:MAX:0.5:444:797 \ RRA:MIN:0.5:1:600 \ RRA:MIN:0.5:6:700 \ RRA:MIN:0.5:24:775 \ RRA:MIN:0.5:444:797
(300s=5m)*1=5m*600=50h=(2.08天)2d
(300s=5m)*6=30m*700=50h=(14.58天)2w
(300m=5m)*24=2h*750=(64.5天)2M
(300m=5m)*288=1d*797=(797天)2Y
rrdtool graph COUNTER/day.png -w 700 -h 200 \ -n TITLE:11:'/opt/rrdtool/wdjt.ttf' \ -n UNIT:8:'/opt/rrdtool/simhei.ttf' \ -n LEGEND:8:'/opt/rrdtool/simhei.ttf' \ -c SHADEA#DDDDDD \ -c SHADEB#808080 \ -c FRAME#006600 \ -c FONT#006699 \ -c ARROW#FF0000 \ -c AXIS#000000 \ -c BACK#FFFFFF \ -Y -X 3 \ -t "服务器流量统计" -v "流量" \ --start -1d --end now \ --x-grid MINUTE:12:HOUR:1:HOUR:1:0:'%H' \ DEF:value1=COUNTER/eth0.rrd:eth0_in:AVERAGE \ DEF:value2=COUNTER/eth0.rrd:eth0_out:AVERAGE \ CDEF:value3=value1,value2,+ \ COMMENT:" \n" \ COMMENT:" \n" \ AREA:value1#00ff00:上传 \ GPRINT:value1:LAST:"当前\:%8.0lf" \ GPRINT:value1:AVERAGE:"平均\:%8.0lf" \ GPRINT:value1:MAX:"最大\:%8.0lf" \ GPRINT:value1:MIN:"最小\:%8.0lf" \ COMMENT:" \n" \ LINE2:value2#4433ff:下载 \ GPRINT:value2:LAST:"当前\:%8.0lf" \ GPRINT:value2:AVERAGE:"平均\:%8.0lf" \ GPRINT:value2:MAX:"最大\:%8.0lf" \ GPRINT:value2:MIN:"最小\:%8.0lf" \ COMMENT:" \n" \ COMMENT:"─────────────────────────────────────────────\n" \ LINE3:value3#ff8833:总流量 \ COMMENT:" \n" \ HRULE:350000#ff0000:"报警值" \ COMMENT:" \n" \ COMMENT:"\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t最后更新 \:$(date '+%Y-%m-%d %H\:%M')\n" -Y \ COMMENT:"\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t天涯社区系统运维部开发与维护\n"
-n TITLE:12: simhei.ttf #修改top标题字体 -n AXIS:8: simhei.ttf #修改X轴数据字体,如01 02 03 04... -n LEGEND:10: simhei.ttf #修改数字报表字体,如最大、最小、平均值及其它 -n UNIT:8: simhei.ttf #修改Y轴标题字符,如"流量" -n WATERMARK:8: simhei.ttf #数据区右则字体,如"RRDTOOL-TOBIOETIKER"
-c SHADEA#CCCCCC #左上边框color -c SHADEB#000000 #右下边框color -c FRAME#EEEEEE #数据标志说明边框color,如"上传"左边的小正方形。 -c FONT#006699 #图形所有字体color -c ARROW#FF0000 #两个箭头color -c AXIS#FF0099 #两条箭头线color -c BACK#FFFFFF #图形背景(不含数据区)color -c CANVAS#000000 #图形数据区背景color -c MGRID#ee2359 #主网格线color -c GRID#FF0000 #次网格线color