RRDtool的用法(結合實例)

一、簡介

RRDtool是指Round Robin Database工具,即環狀數據庫。從功能上說,RRDtool可用於數據存儲+數據展示。著名的網絡流量繪圖軟件MRTG和集羣監控系統Ganglia都使用的RRDtool。

數據存儲方面,RRDtool採用“Round Robin”模式存儲數據。所謂“Round Robin”是一種存儲數據的方式,使用固定大小的空間來存儲數據,並有指針指向最新的數據的位置。我們可以把用於存儲數據的數據庫空間看成一個圓,上面有很多刻度,這些刻度所在的位置就代表用於存儲數據的地方。所謂指針,可以認爲是從圓心指向這些刻度的一條線。指針會隨着數據的讀寫自動移動。要注意的是,這個圓沒有起點和終點,所以指針可以一直移動,而不擔心到達終點後無法繼續寫入的問題。在一段時間後,當所有的空間都存滿數據,就又從頭開始存放。這樣整個存儲空間的大小就是一個固定的數值。RRDtool所使用數據庫文件的後綴名是“.rrd”。

數據展示方面,RRDtool可以看作是一個強大的繪圖引擎。下圖是其官網上的一張效果圖,我們大致瞭解RRDtool的繪圖能力。

165106360.png

RRDtool官網鏈接:http://oss.oetiker.ch/rrdtool/

二、基本語法

RRDtool的使用分爲三個部分,建庫、更新數據、繪圖(具體使用shell命令)。因此,我們也分上述三個部分介紹基本語法。

1、建庫

爲表述清晰,這裏將建庫命令寫成分段形式,實際應用時應寫成一串。

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

具體參數意義大家參見注釋,本段代碼的大意是創建一個rrd數據庫cpu.rrd,保存cpu相關信息,每15秒更新一次數據。


二、更新

更新比較簡單,就是定時向數據庫(即.rrd文件)中寫入數據。每次寫入命令,類似下面指令。

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。

實際使用時應當寫一個程序定時獲取cpu利用率,並執行上述命令,將數據寫入數據庫。


三、繪圖

與建庫時類似,爲表述清晰,這裏將繪圖命令寫成分段形式,實際應用時應寫成一串。

/usr/bin/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'='/var/lib/monitor/rrds/server/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'


得到的圖片如下。我刻意停止更新數據一段時間,繪圖得到的圖片也在相應時間段內監控顯示沒有數據。

185928801.png

參考:

RRDTOOL 百度文庫

RRDtool繪圖使用詳細


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章