1 Ubuntu 安装rrdtool
rrdtool 可以完成rrd数据库创建、输入数据、绘制图片等rrd的全部功能
apt-get install rrdtool
2 rrd适用范围
- 适用于时序数据库
- 常见的运维领域,使用较多
- 如top 类似的cpu-mem-disk使用情况
- 如路由器流量统计
3 librrd库
rrdtool 底层调用librrd库;即librrd库提供rrdtool所能提供的全部功能api。
想编写自己的rrd C程序,需要调用librrd库。
其他语言,调用其他rrd对应语言版本的库。
3.1 librrd库的安装
sudo apt-get install librrd-dev #安装librrd开发包,含rrd.h头文件
sudo apt-get install librrd #安装librrd运行包,含librrd.so
3.2 librrd库的编译使用
- 调用的*.c包含rrd.h
- 编译时,增加librrd库的链接,-rrd
3.3 librrd库的常用api
- rrd_create(c, v)
- rrd_update(c, v)
- last_rrd_file(rrdfilename)
- dump_rrd_file(rrdfilename, xmlfilename)
- restore_rrd_file(rrdfilename, xmlfilename)
4 rrdtool操作示例与说明
- DST
- gauge 类型,适用温度这种场景,计算过程与时间非强相关,average 采样1即原始值,average 采样N即平均值
- counter 类型,适用里程/流量这种场景,值为自增的;计算过程与时间强相关,average 采用1/N均为平均值即速率
- derive 类型,类似counter类型,值可增可减,不是自增的
- absolute 类型,它每次都假定前一个interval的值是0,再计算平均值
- compute 类型,表达式,可以引用其他DS
- CF
- average,计算平均值
- max,计算最大值
- min,计算最小值
- last,计算累计值
- rrdtool update 重复更新相同时间戳,以最先的生效,后到的无效即error
- rrdtool update 给rrd输入pdp
- rrd的rra,根据pdp进行相关的计算,利用CF=average/max/min/last
- 多个rra,在绘图时能提供最匹配绘图时间端的rra
- rrd 支持的heatbeat & step 单位: s (seconds), m (minutes), h (hours), d (days), w (weeks), M (months), and y (years)
- RRA:AVERAGE:0.5:1s:10d
# 创建gauge类型的数据库,源为Links,rra存储区average/max;分别说明源的规格、rra的规格
rrdtool create gauge.rrd \
--start 920804400 \
-s 5 \
DS:links:GAUGE:10:U:U \
RRA:AVERAGE:0.5:1:200 \
RRA:AVERAGE:0.5:120:300 \
RRA:MAX:0.5:120:300
# 查看rrd数据库的结构,源与rra
rrdtool info gauge.rrd
# 模拟给rrd输入原始数据:即pdp,timestamp:value1:...:valueN;根据数据库定义的源数目,value数目要1:1对应
rrdtool update gauge.rrd 920804700:12345 920804705:12357 920804710:12363
rrdtool update gauge.rrd 920804715:12363 920804720:12363 920804725:12373
rrdtool update gauge.rrd 920804730:12383 920804735:12393 920804740:12399
rrdtool update gauge.rrd 920804745:12405 920804750:12411 920804755:12415
rrdtool update gauge.rrd 920804760:12420 920804765:12422 920804770:12423
# 获取rrd的rra数据,指明起止时间
rrdtool fetch gauge.rrd AVERAGE --start 920804700 --end 920804770
# 更好指定粒度:
rrdtool fetch xxx.rrd AVERAGE -s $t1 -e $t2 -r 5s
rrdtool fetch xxx.rrd AVERAGE -s $t1 -e $t2 -a
# 根据rrd的rra数据,绘制图片:使用average/max 2个rra数据
rrdtool graph link.png \
--start 920804700 --end 920804770 \
--vertical-label links \
DEF:mylinks=gauge.rrd:links:AVERAGE \
DEF:linksmax=gauge.rrd:links:MAX \
LINE2:mylinks#FF0000 \
LINE2:linksmax#00FF00
# 将rrd数据库内容,写入可读的xml文件: 依次展示数据源、rra数据存储区
rrdtool dump gauge.rrd gauge.xml
# 获取rrd数据库最后更新的unix时间戳:sec
rrdtool last gauge.rrd
# 从xml文件恢复rrd数据库内容
rrdtool restore gauge.xml gauge.rrd
5 画图
6 参考资料
- *RRD 数据库简介及操作
- *官方rrdtutorial
- 百度百科rrdtool
- *官方rrdtool文档
- 官方librrd文档
- 官方rrdthreads文档
- *GAUGE-COUNTER差异
- *php rrdtool,初识rrdtool