当前位置:Linux教程 - Linux文化 - RRDTOOL 1.2 更新項目教學

RRDTOOL 1.2 更新項目教學


RRDTOOL 1.2.x 的差異 1.說明 自從上次的 rrdtool 教學後,頗受好評,不過實至今日, rrdtool 巳從 1.0.x 昇級至 1.2.x 版本,這個 1.2.x 版本基本除了 graph 外,並沒有太多太大的變動,而在 graph 上新增了許多功能,本文的目的主要是向大家解釋 這些新的東西,至於原有的東西您可自參考 http://phorum.study-area.org/viewtopic.php?t=18496 之說明. 2.安裝 這一版的安裝是較費事的,因為它用了幾個較少用的東西(對我而言真的是較少用),你可以在 http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/pub/?M=D 下載到最新版的 tarball , 這個 URL 下有一個 libs/ 的目錄內的東西最好也都一次下載,因為裝 1.2.x 版的 rrdtool 一定會用到. contrib/ 下的東西也值得有興趣的人好好研究. 下載後的東西,請先安裝 libs 下的東西,基本上的裝法就是(每一個 tarball 都要)

CODE:[Copy to clipboard]$>;./configure --help                   #看好好看一下有什麼要注意的 $>;./configure --prefix=/usr          #把東西裝到 /usr 目錄下 $>;make ; make install                #編譯及安裝 請注意,若裝 cgilib-0.5 時, make install 後,需再將目錄內的 cgi.h  copy 至 /usr/include 方可,不然 ./configure 時會出錯是的,的確有點費事,且有些 libs 裝起來也要花不少時間,只好耐心等囉. 至於 rrdtool 所需的一些 libs 裝到 /usr 下.在您裝 rrdtool 時, ./configure 就可以少打很多字

CODE:[Copy to clipboard]#rrdtool 的安裝 $>;./configure --prefix=/usr --disable-rrdcgi   #我個人不用 rrdcgi,所以您一定要先看 help $>;make $>;make install $>;rrdtool -v [root@log doc]# /tmp/bin/rrdtool -v RRDtool 1.2.8  Copyright 1997-2005 by Tobias Oetiker <[email protected]>;                Compiled 週三  5月 25 15:23:18 CST 2005 Usage: rrdtool [options] command command_options Valid commands: create, update, updatev, graph, dump, restore,                 last, first, info, fetch, tune, resize, xport RRDtool is distributed under the Terms of the GNU General Public License Version 2. (www.gnu.org/copyleft/gpl.html) For more information read the RRD manpages感覺上的差異 1.2.x 版的 rrdtool 繪圖不再使用 GD , 而使用 libart 及 freetype 等功能來畫圖,所以,我個人在用起 來時,感覺速度上較 1.0.x 版慢了許多,

CODE:[Copy to clipboard]#以 1.2.8 畫 100 張圖,time 所計算之時間 real    1m23.076s user    0m52.855s sys     0m7.021s #以 1.0.42 畫 100 張圖,time 所計算之時間 real    0m27.234s user    0m21.629s sys     0m5.209s所以,可以明顯感覺到 1.2.x 較 1.0.x 版本畫圖上慢上了許多,一般公認大概差了 2~3 倍的時間,主要因為 作者(oetiker) 要讓 rrdtool 的 output 可以產生 PDF 檔,所以才造成這種現象,至於使用上的取捨,就看 您的需求囉, 並沒有說新版的一定會較好這種理由. 新的東西(以下介紹皆針對 rrdtool graph) DEF:<vname>;=<rrdfile>;:<ds-name>;:<CF>;[:step=<step>;][:start=<time>;][:end=<time>;][:reduce=<CF>;] VDEF:vname=RPN expression SHIFT:vnameffset [TICK:vname#rrggbb[aa][:[fraction][]]] 可以產生 PDF 檔 [-n|--font FONTTAG] 這裏面的文字意義如下: 更具彈性空間的定義特性 DEF DEF:<vname>;=<rrdfile>;:<ds-name>;:<CF>;[:step=<step>;][:start=<time>;][:end=<time>;][:reduce=<CF>;] 定義從那一個 RRD FILE取出裏面的那一個 DS 資料(Data Source Name,DSN) vname: rrdtool graph 用的變數名稱,可任意取名 rrdfile: 意即那個 rrd 檔案 ds-name: 在建立 RRD FILE 時,用的名稱 CF: 即 MAX/AVERAGE/MIN/LAST 等 *step:         在繪圖時,資料的取用原則,例如,你的 RRD FILE 在建立時,設了 --step 為 300 秒,所以每         個資料點距為 300 秒,畫一小時共有 12 點,此時,在 DEF 定義 step=1800, 畫一小時就會變         成兩個點,而其取用則試 CF 而定,例如 CF 為 AVERAGE, 則合併的 6 個點 (1800=300x6),         其會畫出平均值出來(官網是這麼講,但是我設了做不出來效果,不知原因何在) *start:        資料起始時間,如果你在 graph 時,以時間參數畫圖,但你只想要某個 DSN 只畫某一段時間,可         以利用此參數來做,例如, start=end-1w , 即表示要畫這個 DSN 一個星期內的資料,而其他的         畫全部的資料 *end:        其意同 start, 旨在定義時間區間 標示水平線 VDEF VDEF:vname=RPN expression 例如 ,VDEF:avg=mydata,AVERAGE , avg 如同一般的 DSN, 而 mydata 為 DEF 之 DSN,AVERAGE 表示求取平均值(時間區間內),並在圖上畫出 之一橫線,以供比較(sample5), 時間徧移 SHIFT SHIFT:vnameffset 這個功能較特別,主要在 "徧移" 整個資料,例如,你要把過去三個星期以來的數據互相比較時: DEFut0=$RRDFILE:ifOutOctets$INT:AVERAGE:start=end-1w  \                #現在以前的七天 DEFut1=$RRDFILE:ifOutOctets$INT:AVERAGE:start=now-2w:end=now-1w \         #8-14 天前 DEFut2=$RRDFILE:ifOutOctets$INT:AVERAGE:start=now-3w:end=now-2w \         #15-21 天前 SHIFTut1:604800        \        # out2 的資料時間向後移  604800 秒,意即一週 SHIFTut2:1209600        \        # out3 的資料時間向後移 1209600 秒,意即二週 所以我們可以想像,同一個 DSN 我們有三段數據,每段各代表一週的時間,把時間對齊後,我們就可 以週與週間互相比較了,所以像 "與上月比較","與去年同期比較","特定時間區間互相比較",也都可 以信手拈來,只要弄清楚 DEF 中的 start/end 用法,再加上 SHIFT 的 offset 功能,即可達成 透明處理 TICK [TICK:vname#rrggbb[aa][:[fraction][]]] 可以在圖的資料區,畫上一個顏色.有點類似底色,但會更據 DSN 來晝,而不畫 0 值或是 UNKNOWN 值 vname        即 DSN , 不過看來畫起來沒有什麼意義 #rrggbb[aa]        rgb 即顏色, aa 是透明度,數值介於 (最透明)00~ff(最不透明) fraction        佔資料區的比例,以 0.0~1.0 表示, 0.5 表示佔一半 legend                圖例名稱 可以產生 PDF 檔 以 rrdtool graph xxx.pdf .... 即可產生 PDF 格式之檔案 變更字型及字體的大小 [-n|--font FONTTAG] FONTTAG        依圖上的地區,分為 DEFAULT/TITLE/AXIS/UNIT/LEGEND, DEFAULT 代表後四種 size        為字體大小 font        使用那個 TTF 字型檔 (請注意官方 1.2.8 版並不支援中文處理) 範例:

CODE:[Copy to clipboard]-n TITLE:20:/usr/share/fonts/zh_TW/TrueType/bsmi00lp.ttf \ -n AXIS:10:/usr/share/fonts/zh_TW/TrueType/bsmi00lp.ttf \ -n UNIT:30:/usr/share/fonts/zh_TW/TrueType/bsmi00lp.ttf \ -n LEGEND:14:/usr/share/fonts/zh_TW/TrueType/bkai00mp.ttf \以例子來說明 1. 原來標準原圖(in/out 流量) screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://211.72.210.251/tmp/sample1_month.png');}" onmousewheel="return imgzoom(this);"> 2. 使用 1.2.8 的 start=end-1w 功能(即只要畫最近七天) screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://211.72.210.251/tmp/sample2_month.png');}" onmousewheel="return imgzoom(this);"> 3. 使用 1.2.8 的 start/end 功能,依最近7/14/21天來畫圖 screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://211.72.210.251/tmp/sample3_month.png');}" onmousewheel="return imgzoom(this);"> 4. 使用 1.2.8 的 step 功能...但做不出來 screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://211.72.210.251/tmp/sample4_month.png');}" onmousewheel="return imgzoom(this);"> 5. 使用 1.2.8 的 VDEF 功能...in 畫出最大線, out 畫出平均線 screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://211.72.210.251/tmp/sample5_month.png');}" onmousewheel="return imgzoom(this);"> 6. 使用 1.2.8 的 start/end + SHIFT 功能畫出週與週間的比較 screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://211.72.210.251/tmp/sample6_month.png');}" onmousewheel="return imgzoom(this);"> 7. 使用 1.2.8 的 TICK 功能畫出週與週間的比較 screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://211.72.210.251/tmp/sample7_month.png');}" onmousewheel="return imgzoom(this);"> 8. 使用 1.2.8 的 PDF 輸出 screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://211.72.210.251/tmp/sample8_month.png');}" onmousewheel="return imgzoom(this);"> 8. 使用 1.2.8 的字型及大小的處理 screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://211.72.210.251/tmp/sample9_month.png');}" onmousewheel="return imgzoom(this);"> 以上網頁 及 script 程式,您可在 http://211.72.210.251/tmp/ 取得