文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>RRDTools 教学 (二)

RRDTools 教学 (二)

时间:2007-02-14  来源:evegl

6.3 rrdtool graph 一些參數簡單介紹
你若想知道得很清楚建議您到http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/manual/rrdgraph.html
參考其詳細語法,不必費心找其他的連結,因為我覺得其巳經很詳細了.

我僅列出我要介紹的部份供大家參考,你慢慢去體會囉
rrdtool graph image-filename
-s        繪圖資料的起始時間,預設是一天前(-1d),可參考上面的 script ,-s `date …` 的應用,
-e        繪圖資料的結束時間,預設是現在(now),除date 應用外,可用 -e -1w 表示繪圖的時間結束於一週前
--no-minor        不要副格線
-t        圖檔標題
-v        Y 軸說明
-w        資料區的寬度,資料區指的是數據顯示的部份,而非說明或圖例
-h        資料區的高度
-u        Y 軸正值高度
-l        Y 軸負值高度

DEF        重要的地方,其語法為 DEF:your_var:rrd_filename S_name:[AVERAGE|MAX..]
        請參考上面的 tcpdump-graph.sh
        主要用處在於您要取出那個 RRD 檔案的 DSN 到這個 graph 的參數來
CDEF        一個虛擬的變數,其值為 DEF 的某些運算,其運算式需寫成後序
        EX: a=1+3 寫成 a=1,3 +
        http=(smtp+http+telnet)/1024 寫成 http=1024,smtp,http,telnet,+,+,/
        不懂 ? http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/tutorial/ 這裏可以參考,由於
        CDEF 太過複雜(其實這裏才是精髓),除了 +-*/ ,您可自行研究
LINE{1|2|3}:vname[#rrggbb[]]
        LINE1:your_var#rgb顏色值:圖例說明,這個 "your_var" 需存在 DEF 或 CDEF 的宣告中,
AREA:vname[#rrggbb[]]
        AREA 則是畫出資料數值至 0 之間的區磈圖
STACK:vname[#rrggbb[]]
        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 則是為了好算位置)
        如果你不懂 printf, man 一下會比我解釋一大堆來得快.

其他沒有介紹的參數就有待你自己去發掘了(多看官網上的說明,我相信經過我的介紹您一定可以看懂的)
,還有很多沒有講到的,不過我都講完就沒有意思了.依據這裏的介紹,我們再將流量圖美化些,讓它可以
產生說明文字,更有助於我們的判讀,並將如何 update 資料也一併加入:

CODE:

[Copy to clipboard]

#tcpdump.sh
RRD_PATH="/root/study/tcpdump.rrd"
image_path="/root/study/html"
sec=300
killall tcpdump
mv ip.packet ip.packet.1
tcpdump -w ip.packet  tcp or udp or icmp &
scan_port="23 25 53 80 110"
rrd_data=""
for sport in $scan_port
do
        port=`tcpdump -r ip.packet.1 port $sport -v | sed -e 's/.*, len \(.*\))/
\1/g' |  tr '\n' '+'`
        port=`echo ${port}0| bc`
        port=`expr $port / $sec`
        rrd_data="$rrd_data$port:"
done
total=`tcpdump -r ip.packet.1 -v  |grep -v 'config'| sed -e 's/.*, len \(.*\))/\
1/g'  |  tr '\n' '+'`
total=` echo ${total}0 | bc`
now=`date +%s`
echo "rrdtool update tcpdump.rrd $now:$rrd_data$total" >;>;tcpdump.cmd
rrdtool update tcpdump.rrd $now:$rrd_data$total

image_path=/home/httpd/html/enum/study
now=`date "+%Y/%m/%d %H:%M:%S"`
start_time=`date -d "2003/08/12 19:00" +%s`
time="hour day week month year"
for t in $time
do
/usr/local/bin/rrdtool graph $image_path/example-$t.png \
--title "本機重要 port 流量"        \
DEF:t1=$RRD_PATH:telnet:AVERAGE \
DEF:t2=$RRD_PATH:smtp:AVERAGE \
DEF:t3=$RRD_PATH:domain:AVERAGE \
DEF:t4=$RRD_PATH:http:AVERAGE \
DEF:t5=$RRD_PATH:total:AVERAGE \
CDEF:v1=t1,t2,t3,t4,+,+,+ \
CDEF:v2=t1,t2,t3,+,+ \
CDEF:v3=t1,t2,+ \
CDEF:v4=t1 \
CDEF:v5=t5,1024,/ \
COMMENT:"各 PORT 流量統計---最大------平均-------最小-------?#123;在\n"         \
AREA:v1#339966:"HTTP" \
GPRINT:t4:MAX:"      %12.0lf "  \
GPRINT:t4:AVERAGE:"%12.0lf "            \
GPRINT:t4:MIN:"%12.0lf "                \
GPRINT:t4:LAST:"%12.0lf \n"               \
AREA:v2#ffff00:"DNS"        \
GPRINT:t3:MAX:"       %12.0lf "  \
GPRINT:t3:AVERAGE:"%12.0lf "            \
GPRINT:t3:MIN:"%12.0lf "                \
GPRINT:t3:LAST:"%12.0lf \n"               \
AREA:v3#FF0000:"SMTP"        \
GPRINT:t2:MAX:"      %12.0lf "  \
GPRINT:t2:AVERAGE:"%12.0lf "            \
GPRINT:t2:MIN:"%12.0lf "                \
GPRINT:t2:LAST:"%12.0lf \n"               \
AREA:v4#0000ff:"TELNET"        \
GPRINT:t1:MAX:"    %12.0lf "  \
GPRINT:t1:AVERAGE:"%12.0lf "            \
GPRINT:t1:MIN:"%12.0lf "                \
GPRINT:t1:LAST:"%12.0lf \n"               \
LINE2:v5#000000:"全部(Kb)"        \
GPRINT:v5:MAX:"  %12.0lf "  \                             
GPRINT:v5:AVERAGE:"%12.0lf "            \
GPRINT:v5:MIN:"%12.0lf "                \
GPRINT:v5:LAST:"%12.0lf \n"               \
COMMENT:"\n" \
COMMENT:"\n" \
COMMENT:"    Last Updated:  $now" \
-v "per second (bytes)" -M -U 10 \
-Y -X b -h 200 -w 480 -s `date -d "-1 $t" +%s`
done

hour:


day:


week:


加上數值的顯示是不是更清楚了呢 ?不過請注意 rrdtool 是不支援中文的,請您用英文來表示你的資料即可.
嗯~如果你覺得很複雜那是正常的,但是其實仔細觀察你可以發現,其實很多地方都很類似,我的感覺是在初學
時才覺得複雜,等做過了一兩個成功的例子後就覺得很簡單了,學任何東西不也都是如此嗎 ?
嗯~tcpdump 抓封包那一段不在我的介紹範圍內,有興趣的人自可 man tcpdump 自己學習一番,或是有人要
貢獻一下也是很好的.

提供大家我的幾個範例當參考,學習的過程中範例其實很重要的,但 rrdtool 的範例其實不多,不然就都是
英文的

相关阅读 更多 +
排行榜 更多 +
泽塔奥特曼变身器模拟器手机版下载

泽塔奥特曼变身器模拟器手机版下载

角色扮演 下载
假面骑士ZZZ模拟器SWF下载

假面骑士ZZZ模拟器SWF下载

角色扮演 下载
军团再临安卓版下载

军团再临安卓版下载

策略塔防 下载