about RRD

date +’%s‘ ---- 1970-1-1


rrdtool create test.rrd --start {date +'%s'} DS:speed:COUNTER:600:U:U RRA:AVERAGE:0.5:1:24 AVERAGE:0.5:6:10

創建的rrd數據庫名爲test (test.rrd),它的起始時間是我當前時間。數據庫存放一個名爲 ’speed’ 的數據源(DS),它表示一個計數器。該計數器每5分鐘(缺省)讀取一次。在同一個數據庫中,保存有2個環狀歸檔(RRA),一個是每次讀取時的平均數據(例如:沒有東西進行平均)並保留24個樣本(24乘以5分鐘是2小時)。另一個RRA有6個平均值(半小時)幷包含10個這樣的平均值(例如5個小時)。


插入數據rrdtool update
 往rrd文件中插入數據的命令是rrdtool update

* update - update an RRD

rrdtool update filename
[--template|-t ds-name:ds-name:...]
[--daemon <address>]
time|N:value[:value...]

at-time@value[:value...]

[ time:value[:value...] ..]

兩個主要選項一個就是數據源的順序,這個順序對應上後面需要插入數值的順序,另一個就是"時間:值",當前時間可以用N代替

[root@localhost22 ~]# rrdtool update test.rrd N:`echo $RANDOM`

上面的只是更新一次數據,寫個循環,讓其不斷更新

[root@localhost22 ~]# cat test.sh
while(true)
do
  sleep 3         //每隔3s插入數據
  rrdtool update test.rrd N:`echo $RANDOM`
done

然後執行該腳本,一段時間後,查看rrd文件 ,-r 2爲解析度(表示兩個PDP聚合,如果指定其他解析度是創建時RRA沒有的,取相近的)

rrdtool graph speed.png --start {date +'%s'-3600000} --end {date +'%2'} DEF:myspeed=test.rrd:speed:AVERAGE LINE2:myspeed#FF0000

該命令會創建名爲speed.png的圖像文件,該圖像從12:00開始,到13:00。有一個名爲myspeed的變量定義,它使用來自 test.rrd數據庫的 speed RRA中的數據。繪製的線條是2像素高,表示myspeed變量。顏色是紅色的.

首先在此介紹一下常用的RRDtool選項的語法,你可以粗略的讀一下,然後看例子,看完之後在仔細的研讀語法.
1.如何使用rrdtool創建各種類型、特性的RRD環型數據庫。
rrdtool create filename [--start|-b start time] [--step|-s step] [DS:ds-name:DST:dst arguments] 。net[RRA:CF:cf arguments]
說明:
RRDtool的創建功能能夠設置一個新的RRD數據庫文件。該功能完成所創建的文件全部被預填入 UNKNOWN 數值。
filename
需要創建的RRD的文件名。RRD數據庫文件名應當以 .rrd作爲擴展名。儘管RRDtool可以接受任何文件名。
--start|-b start time(default: now - 10s)
設定RRD數據庫加入的第一個數據值的時間-從1970-01-01 UTC時間以來的時間(秒數)。RRDtool不會接受早於或在指定時刻上的任何數值。
--step|-s step(default: 300 seconds)
指定數據將要被填入RRD數據庫的基本的時間間隔(默認是300秒)。
DS:ds-name:DST:dst arguments
單個RRD數據庫可以接受來自幾個數據源的輸入。例如某個指定通訊線路上的進流量和出流量。在DS配置選項中,你必須爲每個需要在RRD存儲的數據源指定一些基本的屬性。
ds-name是你要用來從某個RRD中引用的某個特定的數據源。ds-name必須爲[a-zA-Z0-9]間的、長度爲1-19個字符組成。
DST定義數據源的類型。數據源項的後續參數依賴於數據源的類型。對於GAUGE、COUNTER、DERIVE、以及ABSOLUTE,其數據源的格式爲:
DS:ds-name:GAUGE | COUNTER | DERIVE | ABSOLUTE:heartbeat:min:max
對於COMPUTE數據源,其格式爲:
DS:ds-name:COMPUTE:rpn-expression
要確定使用哪種數據源類型,請檢查下面的定義。
GAUGE
是像溫度計、或者某個房間內的人數、或共享Redhat的值這樣的東西。
COUNTER
是像路由器中 ifInOctets 計數器這樣會持續遞增的計數器。COUNTER數據源假設計算機永遠不會減小,除非計數器溢出。update功能可能導致溢出。計算機是按照每秒的頻率存儲的。當計數器溢出時,RRDtool會檢查該溢出是否會發生在32位或64位邊界,並且相應的把合適的值加入結果中。
DERIVE
存放該數據源從以往到差異線。這對於gauges類型非常有用,它可用來衡量進出某個房間的比率。在derive內部,與COUNTER幾乎是一樣的,但是沒有溢出檢查。因此,如果你的計數器在32或64位不會復位,你應當使用DERIVE或者用一個MIN值爲0的混合使用。
關於COUNTER vs DERIVE的說明
如果你不容許偶爾發生的、某個計數器的合法迴繞復位而造成的錯誤,而要用unknowns‘ 來對錶示所有計數器的合法迴繞和復位,你就要使用min=0的DERIVE類型。否則,使用具有合理max的COUNTER類型,會爲所有的合法計數器迴繞返回正確的值。<br/>對於一個步長爲5分鐘的32位計數器,計數器迴繞復位的錯誤概率大約爲:每1Mbps的最大帶寬發生概率爲0.8%.注意這等價於100Mbps接口的80%,因此對於高帶寬接口和32位計數器,最好使用帶有min=0的DERIVE。如果你使用的是64位計數器,只有任何最大值的設定可以避免計數器迴繞的錯誤發生的可能性。<br/>ABSOLUTE<br/>讀取後馬上覆位的計數器。用於易於溢出的快速計數器。因此,不要常規地讀取他們,你需要自每次讀取後確認在下一次溢出前有一個最大的有效時間。該類型的另外一個用途是你需要累積上次更新以來的信息數目。<br/>COMPUTE<br/>用於存放對RRD中的其他數據源進行公式計算的結果。該數據源在更新時不需要提供數值,它是根據rpn-表達式定義的公式從數據源的PDPs中計算出來的PDP(Primary Data Point)。歸併功能會被應用到COMPUTE數據源的PDPs上。在數據庫軟件中,此類數據集用虛擬‘ 或 ’計算‘ 列表示。
heartbeat心跳定義了在兩次數據源更新之間、在將數據源的數值確定爲 UNKNOWN 前所允許的最大秒數。
min和max定義了數據源提供、預期的數值範圍。任何數據源的超過min或max數值範圍的數值,都將被認爲是UNKNOWN 。如果你不知道或者不關心mix和max, 將他們設置爲 unknown。注意min和max總是值數據源所處理的數值。對於一個流量計數器類型的DS來說,這可以是預期中該設備獲取的數據率。
如果有可用的min/max的值信息,一定要設置min和max屬性。這可以幫助RRDtool在更新時對提供的數據進行健壯檢查。
rpn-expression定義了由同一個RRD庫的其他數據源的計算而來的、某個COMPUTE數據源的PDPs計算公式。這於graph命令的CDEF參數一樣。請參看graph手冊瞭解RPN操作符的列表和說明。對於COMPUTE數據源,不支持以下RPN操作符:COUNT、PREV、TIME、和LTIME。此外,在定義RPN表達式時,COMPUTE數據源只能夠引用在create命令中列出的數據源。這於CDEF的限制是一樣的,CDEF只能夠引用在同一個graph命令中前面定義的DEFs和CDEFs。
RRA:CF:cf arguments
RRD的一個目的是在一個環型數據歸檔中存儲數據。一個歸檔有大量的數據值或者每個已定義的數據源的統計,而且它是在一個RRA行中被定義的。
當一個數據進入RRD數據庫時,首先填入到用 -s 選項所定義的步長的時隙中的數據,就成爲一個pdp值-首要數據點(Primary Data Point)。
該數據也會被用該歸檔的CF歸併函數進行處理。可以把各個PDPs通過某個聚合函數進行歸併的歸併函數有這樣幾種:AVERAGE、MIN、MAX、LAST等。這些歸併函數的RRA命令行格式爲:
RRA:AVERAGE | MIN | MAX | LAST:xff:steps:rows
xff
xfiles factor定義了在被歸併數值仍然是一個未知時,UNKNOWN數據中,某個歸併間隔的哪個部分可以採用。
steps
定義這些PDP中的多少個可以用來構建歸併的數據點。
rows
定義在一個RRA歸檔中保留多少次的生成數據值。
例子例 1
rrdtool create temperature.rrd --step 300 \
DS:temp:GAUGE:600:-273:5000 \
RRA:AVERAGE:0.5:1:1200 \
RRA:MIN:0.5:12:2400 \
RRA:MAX:0.5:12:2400 \
RRA:AVERAGE:0.5:12:2400
上例設置了一個名爲 temperature.rrd 的RRD,它每300秒接收一個溫度值。如果超過600秒沒有提供數據,溫度值變爲UNKNOWN。其最小可接受的值爲 -273,最高值爲5000.
本例中同時還定義了幾個歸檔區。第一個RRA歸檔區存儲100小時內的溫度(1200300秒=100小時)。第二個RRA存儲每小時的最低溫度(12300秒=1小時),共存儲100天的數據(2400小時)。第三和第四個RRA分別存放最高溫度和平均溫度。
例 2
rrdtool create proxy.rrd --step 300 \
DS:Total:DERIVE:1800:0:U \
DS:Duration:DERIVE:1800:0:U \
RRA:AVERAGE:0.5:1:2016
本例是監視一個Web代理每300秒間隔(5分鐘)內處理的請求的平均請求數。此例中,該代理有兩個計數器,啓動後處理的請求總數、以及處理請求的合計累積數。顯然這些計數器都有某個迴繞點,但是使用DERIVE數據源類型同時還可以處理在Web代理停止和重啓時的復位。
在該RRD數據庫中,存儲的第一個數據源類型是間隔期內的每秒請求數。第二個數據源類型是在除以300的間隔期內的請求處理總數。
2.rrd環型數據庫的更新:
rrdtool {update | updatev} filename [--template|-t ds-name[:ds-name]...] N|timestamp:value[:value...] at-timestamp@value[:value...] [timestamp:value[:value...] ...]
filename :要更新的RRD數據庫的名稱。
--template|-t ds-name[:ds-name]... :-t ds-name要更新RRD數據庫中數據源的名稱
N|timestamp:value[:value...]:時間:要更新的值...
代碼:
$>timestamp=date -d "2003/08/15 12:00" +%s
3.如何繪製rrd環型數據庫中的採集到的數據
rrdtool graph filename [option ...] [data definition ...] [data calculation ...] [variable definition ...] [graph element ...] [print element ...]
filename 要繪製的圖片名稱
Time range時間範圍
[-s|--start time] 啓始時間[-e|--end time]結束時間 [-S|--step seconds]步長
Labels
[-t|--title string]圖片的標題 [-v|--vertical-label string] Y軸說明
Size
[-w|--width pixels] 顯示區的寬度[-h|--height pixels]顯示區的高度 [-j|--only-graph]
Limits
[-u|--upper-limit value] Y軸正值高度[-l|--lower-limit value]Y軸負值高度 [-r|--rigid]
Data and variables
DEF:vname=rrdfile:ds-name:CF[:step=step][:start=time][:end=time]
CDEF:vname=RPN expression
VDEF:vname=RPN expression
主要用處是說明您要取出那個RRD檔案的 DSN 到這個 graph 的參數中來 CDEF 通過運算得到一個虛擬的變量,,其運算式需寫成後序 EX: a=1+3 寫成 a=1,3 + LINE{1|2|3}:vname[#rrggbb[:legend]] LINE1:your_var#rgb顏色值:圖例說明,這個 "your_var" 需存在 DEF 或 CDEF 的宣告中, AREA:vname[#rrggbb[:legend]] AREA 畫出樣本數值至 0 之間的區塊圖 STACK:vname[#rrggbb[:legend]] STACK 疊在上一個值上的圖形 請注意,如果使用 AREA/STACK 時需特別注意圖蓋圖的問題,一定要先畫大的值, 再畫小的值,這纔會有層次的效果,不然,最大的數據若最後畫,會蓋住前面的數據 COMMENT 說明文字,如 COMMENT:"Last Updated" 將在圖上產生該文字,可以用 \n 等換行符號 GPRINT GPRINT:vname:CF:format vname 即DEF 中的 your_var,而 CF 看你要輸出的文字是 AVERAGE/MAX/MIN/LAST 等數值,format 如同 printf 中的格式, EX: GPRINT:telnet:AVERAGE:"%10.0lf \n" 意即要輸出這段時間中 (-s ~ -e 中,telnet的平均值,%10.0lf 則是爲了好算位置)。

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