今天完整的利用了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,不会含糊,所以关键是要把原理搞清楚 |
|