RRD使用手记

来源:百度文库 编辑:神马文学网 时间:2024/04/19 18:21:13
今天完整的利用了RRD来进行数据源采集、RRD数据库生成、RRD数据更新、RRD画图。
1、数据源一般用Shell脚本或者其他语言来生成,最终都要得到类似如下格式的数据源:
$time:$val1:val2:val3:val4...
其中,time变量表示该数据源的时间戳;val表示对应的数据源。
注意,这些变量所代表的数据不能有空格,比如val1= 34,这里“=”和“34”之间有空格,那么改数据源就是不完整的,将会出现诸如:
expected 3 data sources(get 1)...表示我们定义了3个数据源,但现在只取到了1个,原因就是空格,这是把要输入的数据源打印出来就看出问题了。
2、RRD数据根据需要记录的数据源来生成,具体的格式和选项就参考http://www.360doc.com/showWeb/0/0/382048.aspx。
大致的是 rrdtool create test.rrd --start=`date --date="1 day ago" +%s` DS:val1:GAUGE:600:U:U RRA:AVERAGE:0.5:1:600
3、RRD数据库更新,这个也比较简单:
rrdtool update test.rrd DS, 这里的数据源来自于第一步;可以是类似于第一步中的变量形式,或者把实际数据放到文件中,而用cat来显示;
4、RRD画图,
rrdtool gragh test.gif --start `date --date="4 hours ago" +%s` --vertical-label "Hello world" --title="test"
DEF:val1=test.rrd:val1:AVERAGE
DEF:val2=test.rrd:val2:AVERAGE
"CDEF:val3=val1,val2,+,100,*"
COMMENT:"This is a example"
GPRINT:val1:MAX:"12.0%lf"
这里,需要注意CDEF表达式后面要跟逆波兰式(RPN,Reverse Poland Notation),也就是后序遍历二叉树(先后序左子树;然后后序右子树;最后根)。而且如果里面含有数的话要用引号括起来,否则就会出现"can‘t find function 100"的错误。
还是比较有意思的,这些东西都是很规律的,是1就是1,不会含糊,所以关键是要把原理搞清楚