RRDtool是指Round Robin Database工具,即环状数据库。

RRDtool功能:

  1. 建库
  2. 数据更新
  3. 绘图


命令行语法

1. 建库

rrdtool create filename [--start|-b start time] [--step|-s step] [--template|-t template-file] [--source|-r source-file] [--no-overwrite|-O] [--daemon|-d address] [DS:ds-name[=mapped-ds-name[[source-index]]]:DST:dst arguments] [RRA:CF:cf arguments]
rrdtool create cpu.rrd               # 数据库名称
--start $(date -d '1 days ago' +%s)  # 开始时间
--step 15                            # 更新数据时间间隔
DS:cpu_user:GAUGE:120:0:NaN          # DS:cpu_user,相当于变量名;后面的是DST:GAUGE,相当于数据类型;后面120是heartbeat,是最大没有数据的间隔;后面两个NaN分别是最小值、最大值限制。
DS:cpu_system:GAUGE:120:0:NaN
DS:cpu_wio:GAUGE:120:0:NaN
DS:cpu_idle:GAUGE:120:0:NaN
RRA:AVERAGE:0.5:1:244                # RRA是数据存储的形式,数据表 
RRA:AVERAGE:0.5:24:244               # CF合并统计 有average、max、min、last四种
RRA:AVERAGE:0.5:168:244              # 0.5是xff,表示缺少数据量比例大于0.5时,数据显示为空。
RRA:AVERAGE:0.5:672:244              # PDP,计算出来的一个数据点,如平均值等
RRA:AVERAGE:0.5:5760:374             # CDP,使用多个PDP合并成一个CDP,CDP是真正存入RRA的值,也是绘图时使用的值,1、24、168、672等表示多少个PDP合并成一个CDP
$ rrdtool create sys_moniter.rrd --start $(date -d '1 days ago' +%s) --step 3 DS:cpu_user:GAUGE:60:0:NaN DS:cpu_system:GAUGE:60:0:NaN DS:cpu_wio:GAUGE:60:0:NaN DS:cpu_idle:GAUGE:60:0:NaN DS:mem:GAUGE:60:0:NaN DS:uptime:COUNTER:60:0:NaN RRA:AVERAGE:0.5:1:244 RRA:AVERAGE:0.5:20:244 RRA:AVERAGE:0.5:600:244 RRA:AVERAGE:0.5:1200:244

DS 数据源的类型

  • GAUGE 保存一个数值原来的值
  • COUNTER 递增的数值
  • DERIVE 有的时候可以增有的时候可以减

2. 更新

rrdtool {update | updatev} filename [--template|-t ds-name[:ds-name]...] [--skip-past-updates|-s] [--daemon|-d address] [--] N:value[:value]... timestamp:value[:value]... at-timestamp@value[:value]...
rrdtool updatev /var/lib/monitor/rrds/server/cpu.rrd 1382646278:0.733211:0.433261:1.516414:97.317114
# /var/lib/monitor/rrds/server/cpu.rrd 是数据库文件
# 1382646278是时间戳
# 0.733211:0.433261:1.516414:97.317114是写入的具体数值,分别指代cpu_user、cpu_system、cpu_wio、cpu_idle。

3. 绘图

rrdtool graph|graphv filename [option ...] [data definition ...] [data calculation ...] [variable definition ...] [graph element ...] [print element ...]
rrdtool graph /home/xx/cpu.png
--start '-3600' --end N      // 过去一小时的时间
--width 385 --height 190     // 图片大小
--title '过去一小时CPU使用情况' --upper-limit 100 --lower-limit 0 // 题目和上下限
--vertical-label 百分比 --rigid
DEF:'cpu_user'='/path/cpu.rrd':'cpu_user':AVERAGE # 获得变量cpu_user
AREA:'cpu_user'#FF0000:'用户' // 图形形式,包括AREA、STACK、LINE等
VDEF:cpu_user_last=cpu_user,LAST // 变量定义,取具体值
VDEF:cpu_user_avg=cpu_user,AVERAGE
GPRINT:'cpu_user_last':' Now\:%5.1lf%s' // 在图片中打印数值
GPRINT:'cpu_user_avg':' Avg\:%5.1lf%s\j' DEF:'cpu_system'='/var/lib/monitor/rrds/server/cpu.rrd':'cpu_system':AVERAGE STACK:'cpu_system'#33cc33:'系统' VDEF:cpu_system_last=cpu_system,LAST VDEF:cpu_system_avg=cpu_system,AVERAGE GPRINT:'cpu_system_last':' Now\:%5.1lf%s' GPRINT:'cpu_system_avg':' Avg\:%5.1lf%s\j' DEF:'cpu_wio'='/var/lib/monitor/rrds/server/cpu.rrd':'cpu_wio':AVERAGE STACK:'cpu_wio'#1C86EE:'等待' VDEF:cpu_wio_last=cpu_wio,LAST VDEF:cpu_wio_avg=cpu_wio,AVERAGE GPRINT:'cpu_wio_last':' Now\:%5.1lf%s' GPRINT:'cpu_wio_avg':' Avg\:%5.1lf%s\j' DEF:'cpu_idle'='/var/lib/monitor/rrds/server/cpu.rrd':'cpu_idle':AVERAGE STACK:'cpu_idle'#e2e2f2:'空闲' VDEF:cpu_idle_last=cpu_idle,LAST VDEF:cpu_idle_avg=cpu_idle,AVERAGE GPRINT:'cpu_idle_last':' Now\:%5.1lf%s' GPRINT:'cpu_idle_avg':' Avg\:%5.1lf%s\j'


librrd

librrd包含RRDtool中的大部分功能。

源码分析(基于版本 v1.7.2):