RRDtool簡體中文教程 v1.01 – 5

rel="File-List" href="file:///C:%5CDOCUME%7E1%5Ccxgao%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"> rel="Edit-Time-Data" href="file:///C:%5CDOCUME%7E1%5Ccxgao%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_editdata.mso">

RRDtool簡體中文教程 v1.01 – 5

 

使用RRDtool 進行繪圖_(二)
**********************************************************************************************************************
注 :該教程參考瞭如下內容 :
A
)官方文檔 :http://oss.oetiker.ch/rrdtool/doc/index.en.html
B
abel 兄的大作 :http://bbs.chinaunix.net/viewthread.php?tid=552224&highlight=rrdtool
http://bbs.chinaunix.net/viewthread.php?tid=552220&highlight=rrdtool
作者 :ailms <ailms{@}263{dot}net>
版本 :v1
最後修改 :2006/11/17 17:35
**********************************************************************************************************************

五)說明文字(Label

[Copy to clipboard]

CODE:

[-t|--title string] [-v|--vertical-label string]


-t
是用於圖表上方的標題,-v 是用於 Y 軸的說明文字

實例1 :給圖表增加標題

[Copy to clipboard]

CODE:

[root@dns1 bob]# rrdtool graph 1.png /
> --start now-183600 / #
從當前開始往前51個小時
> -t "51 hours ago" -v "Traffic" / #
標題是 “51 hours ago”Y 軸的說明文字是 “Traffic”
> DEF:value1=eth0.rrd:eth0_in:AVERAGE /
> DEF:value2=eth0.rrd:eth0_out:AVERAGE /
> LINE1:value1#0000ff:in / #
註釋 :以1個像素寬的曲線畫出 value1,顏色是藍色,圖例的說明文字是“in”
> LINE2:value2#ff0000:out #
註釋 :以2個像素寬的曲線畫出 value2,顏色是紅色,圖例的說明文字是 “out”
497x179
[root@dns1 bob]#


現在我們用的是 LINE 的方式來繪圖。LINE 可以有3種,分別是 LINE1|2|3,也就是線條的粗細。還有一種是 STACK 方式下面再介紹。

可以看到流入的流量比流出的流量稍大,這樣看的話,out 流量比較難看,是否可以有別的方式呢?RRDtool 還提供了

另外一種格式,就是 STACK 。意思就是在前一個對象的基礎(把前一個對象的值當成 X 軸)上繪圖,而不是從 X 軸開始。

實例2 :使用 STACK 方式繪圖

[Copy to clipboard]

CODE:

[root@dns1 bob]# rrdtool graph 3.png /
> --start now-120000 /
> -t "33 hours ago" /
> -v "Traffic" /
> DEF:value1=eth0.rrd:eth0_in:AVERAGE /
> DEF:value2=eth0.rrd:eth0_out:AVERAGE /
> AREA:value1#00ff00:in /
> LINE:value2#ff0000:out:STACK #
注意最後的 “STACK” ,表示在 value1 的基礎上繪圖
497x179
[root@dns1 bob]#


這是沒有采用 STACK 方式繪圖的效果 :

可以看得出上面採用 STACK 方式的比較清晰,但要注意,採用 STACK 方式後,在讀取 out 流量時,Y 軸的刻度不再是 out 的值,

應該用刻度值減去 in 的值,纔是 out 真正的值。這點比較麻煩。需要配合 GPRINT 語句才能達到一定的效果。

六)圖表大小(Size

[Copy to clipboard]

CODE:

[-w|--width pixels] [-h|--height pixels]


這裏說圖表大小而不是圖片大小,是因爲 –w -h 控制的是 X/Y 軸共同圍起來的那部分大小,而不是整個圖片的大小,這點在前面就可以看出了。

默認的圖表大小是 400 (長)x 100 (高),但一般會返回497x179 這樣的數字,這個纔是圖片的大小。

RRDtool
MRTG 好的一個地方就是 MRTG 一放大圖片,就會變得模糊。RRDtool 則不會。

在官方文檔中,-w 似乎是一個比較敏感的參數,我們看下面的描述 :

QUOTE:

First it makes sure that the RRA covers as much of the graphing time frame as possible. Second it looks at the resolution of the

RRA compared to the resolution of the graph. It tries to find one which has the same or higher better resolution. With the ``-r''

option you can force RRDtool to assume a different resolution than the one calculated from the pixel width of the graph.

 

QUOTE:

By default, rrdtool graph calculates the width of one pixel in the time domain and tries to get data from an RRA with that resolution.

With the step option you can alter this behaviour. If you want rrdtool graph to get data at a one-hour resolution from the RRD, set

step to 3'600. Note: a step smaller than one pixel will silently be ignored


這兩段話分別是從rrd-beginners   rrd_graph 文檔中摘出來的。似乎看起來 –w 會影響到圖表的 resolution ,進一步影響到 RRDtool 如何選擇 RRA

但經過實驗卻發現並非如此。

我對這兩段話中的圖表的 resolution 一詞不知如何理解和計算,希望好心的朋友能夠指點一下 ^_^ .


實例1 :使用 –w 設定圖表大小爲 300 像素

[Copy to clipboard]

CODE:

[root@dns1 bob]# rrdtool graph 3.png
> -w 300 / #
設定 size 300 pixel
> --start now-120000 /
> DEF:value1=eth0.rrd:eth0_in:AVERAGE /
> AREA:value1#ff0000          
381x154
[root@dns1 bob]#


可以看到圖表是不是變小了呢?而且整個圖片的大小也變小了。

如果用前面的話來推理,由於 120000/300-w的值)= 400 > 300 step,由於沒有 resolution=400 RRA

所以應該採用 resolution=7200 的第2 RRA 的數據來繪圖,但實際上不是。

上面這個纔是 300 pixel 寬,resolution=7200 的效果

所以我覺得 –w –h 並不能影響 RRDtool 如何選擇 RRA ,只能起到縮小放大的作用。

BTW
:當你繪製的時間範圍較大時,可以使用 –w 增大圖表大小,這樣看起來比較舒服

七) Y 軸上下限(Limits

[Copy to clipboard]

CODE:

[-u|--upper-limit value] [-l|--lower-limit value] [-r|--rigid]


默認情況下,RRDtool 會和 MRTG 一樣自動調整 Y 軸的數字,來配合當前的數值大小。如果想禁止該特性,可以通過 –upper-limit

-–lower-limit
來做限制,表示Y軸顯示的值從多少到多少。如果沒有指定 –rigid ,則在圖表的上下邊界處還是會有一些延伸,但如果指定了
  
-–rigid
,則嚴格按照 –-upper-limit –-lower-limit 繪製。

在使用 –lower-limit 時要注意,如果數據中有負數,如果 -–lower-limit 0,則負數部分是顯示不出來的。

實例1 :使用 –-upper-limit –-lower-limit 限制 Y 軸的上下限

[Copy to clipboard]

CODE:

[root@dns1 bob]# rrdtool graph 1.png /
> --start now-120000 /
> -v "Traffic" -t "33 Hours ago" /
> --lower-limit -5000 / #
限制Y軸下限爲 -5000
> --upper-limit 10000 / #
上限爲 10000
> --rigid /      #
嚴格按照上面的規定來畫
> DEF:value1=eth0.rrd:eth0_in:AVERAGE /
> DEF:value2=eth0.rrd:eth0_out:AVERAGE /
> AREA:value1#00ff00:in /
> LINE1:value2#ff0000:out:STACK
497x179
[root@dns1 bob]#


八) X/Y 軸刻度(Grid

[Copy to clipboard]

CODE:

[-x|--x-grid GTM:GST:MTM:MST:LTM:LST:LPR:LFM]
[-x|--x-grid none]
[-y|--y-grid grid step:label factor]
[-y|--y-grid none]
[-Y|--alt-y-grid]
[-X|--units-exponent value]


RRDtool
中設置 X 軸的刻度比較複雜,如果沒有必要,可以交給 RRDtool 自動去處理。

例如上面的圖,33 小時的情況下,X 軸只有2個值,顯得很不足。這時候有兩種方法 :

A
)一是使用 –w 增大圖表的寬度,這樣 RRDtool 會自動加多一些刻度上去。

不過需要增加多大纔會有上面的這種效果不得而知,所以這種方法不是很方便。

B
)二是通過上面的選項自己設置 X/Y 軸的刻度如何顯示。首先看上圖,在垂直的線中,紅色的線稱爲 Major Grid(主要網格線),

灰色的線稱爲 Base Grid (次要網格線)(這裏是借用 EXCEL 中的概念 ^_^ )。 X 軸下面的時間文字成爲 Label 。瞭解這

三樣東西后,就可以動手調整刻度了。

C
)有兩種方法可以快速去掉 X/Y 軸的刻度,就是 –-x-grid none –-y-grid none

D
GTM:GST 控制次要格網線的位置。GTM 是一個時間單位,可以是 SECONDMINUTEHOURDAY WEEKMONTHYEAR

    GST
則是一個數字,控制每隔多長時間放置一根次要格線。例如我們要畫一個1天的圖表,決定每15分鐘一根次要網格線,則格式爲 MINUTE:15
   
E
MTM:MST 控制主要網格線的位置。MTM 同樣是時間單位,MST 是一個數字。接上面的例子,決定一個小時1根主要網格線。則格式爲 HOUR:1

    LTM:LST
:控制每隔多長時間輸出一個label 。決定爲1小時1 label 。則格式爲 HOUR:1

G
LPR:LFM LTM:LST 只是決定了 label 的顯示位置了,沒有指定要顯示什麼內容。LPR 指的是如何放置 label 。如果LPR 0,則數字對齊格線

(適用於顯示時間)。如果不爲0,則會做一些偏移(適用於顯示星期幾、月份等)。至於LFM 則需要熟悉一下 date 命令的參數,常用的有 %a(星期幾)、

%b
(月份)、%d(天)、%H(小時)、%M(分)、%Y(年)。我們決定顯示小時和分,所以用 %H%M

H
)綜合起來,X 軸的刻度定義就是 –-x-grid MINUTE:15:HOUR:1:HOUR:1:0:’%H:%M’。最好把 %H:%M 括起來

   
建議 MST GST 2-6倍,MST LST 相同。這樣畫出來的圖比較美觀一些


這明顯就是圖片太小了,不夠顯示。把上面的 :%M 去掉就可以了,只顯示小時,不顯示分鐘

如果把圖片放大一點就更好了 (-w 800)

所以在設置 X 軸的刻度時,要記得不要顯示太多東西,否則需要增大圖片的大小

I
Y 軸刻度的設置又不一樣了

grid step
用於控制Y軸每隔多少顯示一根水平線

label factor
默認爲1,也就是在每根水平線的高度那裏顯示一個值。

例如下面就是一個例子 (每隔800顯示一根水平線)



J
Y 軸還有一個很方便的選項就是 –Y ,它可以最大限度的優化 Y 軸的刻度,建議每次繪圖都加上去。

K
Y 軸另外一個有用的選項就是 –X (雖然選項名是 -X ,但確實是用來設置 Y 軸刻度值的)。在上面的圖我們看到 RRDtool 自動對 Y 軸的值進行調整,

   
k 爲單位顯示。但如果你不想以 k 顯示,而是想固定以某個單位來顯示(Mb)該怎麼辦呢?這就要用到 –X 選項了。-X 後面跟一個參數,參數值
   
   
範圍是 -18-15-12-9-6 -30369121518 0 表示以原值顯示,3 表示數值除以1000,也就是以 k 爲單位顯示,6 就是以
   
    M
顯示,9 就是以 G 顯示。如果你給出1或者2,則 RRDtool 也可以接受,但會被靜悄悄的改爲0。下面就是一個以原值(-X 0)顯示的例子

使用RRDtool 進行繪圖_(三)

**********************************************************************************************************************
注 :該教程參考瞭如下內容 :
A
)官方文檔 :http://oss.oetiker.ch/rrdtool/doc/index.en.html
B
abel 兄的大作 :http://bbs.chinaunix.net/viewthread.php?tid=552224&highlight=rrdtool
http://bbs.chinaunix.net/viewthread.php?tid=552220&highlight=rrdtool
作者 :ailms <ailms{@}263{dot}net>
版本 :v1
最後修改 :2006/11/17 17:35
**********************************************************************************************************************


九、 其他(Miscellaneous

[Copy to clipboard]

CODE:

[-n|--font FONTTAG:size:[font]]
[-g|--no-legend]
[-b|--base value]


A
-n | --font 是一個有意思的選項。CU abel 兄曾提供了一箇中文 patch 可以實現顯示中文的效果。但對於我這等對 C 一竅不通的傢伙,就不知道怎麼用了。

不過幸好 –n 選項可以實現這個目的,只需要中文字體的文件就可以搞定了。

   
首先你要找出一箇中文的字體文件。例如/usr/share/fonts/zh_CN/TrueType/gkai00mp.ttf 。你也可以把 Windows 上的 C:/Windows/Fonts 下面的中
   
   
文字體拷貝到 Linux 上,例如home/bob/Fonts/simhei.ttf (黑體)效果不錯,其他的則不太行,會出現模糊或者重疊的情況。建議就使用黑體算了。

   
其次是確定字體大小。中文字體不宜小於 7 ,否則看不清楚

   
確定你要修改的是圖表的那個部分。有 DEFAULT(全部),TITLE (標題)、AXIS(座標軸字體)、UNITY軸單位字體)、LEGEND(圖例字體)幾種。

下面就以實際的例子來說明如何顯示中文 :

實例1 :使用 –n RRDtool 顯示中文

[Copy to clipboard]

CODE:

[root@dns1 bob]# rrdtool graph 4.png /
> -n TITLE:10:'/home/bob/Fonts/simhei.ttf' / #
修改標題的字體爲黑體
> -n AXIS:10:'/home/bob/Fonts/simhei.ttf' / #
修改 X 軸的字體爲黑體
> --start now-240000 / #
大於3天的數據
> DEF:value1=eth0.rrd:eth0_in:AVERAGE /
> AREA:value1#00ff00:in -t "33
小時前的 eth0 接口流量" -v "traffic"
> -Y –w 600 #
圖表寬度爲 600 pixel
503x190
[root@dns1 bob]#


這就是最終的效果了,可以看到標題和 X 軸都是中文的,但 Y 軸的字體還是默認的字體。

B
-g |--no-legend 用於取消圖表下方的圖例,不過不建議這麼做。

C
-b|--base value MRTG RRDtool 中,默認 1k=1000 ,使用 –b 可以進行調整,例如 –b 1024

十)數字報表

看看上面的圖表,是不是覺得還少了些什麼呢?對了,就是隻有圖,沒有文字說明。如何象 MRTG 那樣能夠顯示最大值平均值當前值呢?

這就需要用到 GRPINT COMMENT 語句了。
GPRINT
就是在圖表的下方(仍然屬於圖片的內部)輸出最大值、最小值、平均值這些東東;COMMENT 就是用來輸出一些字符串,例如報表的表頭。

A
GPRINT的格式是GPRINT:vname:CF:format 。由於 format 部分太多參數了,我這裏就用最常用的那個 : %x.ylf

B
COMMENT 的格式是COMMENT:text 。要注意 COMMENT 默認是不輸出換行的,如果要輸出換行,必須用 “/n”

下面就以一個實例來說明如何打印報表 : 繪製1小時前的流量圖,並打印數字報表(參照 abel 兄給出的例子)

[Copy to clipboard]

CODE:

[root@dns1 bob]# rrdtool graph 1.png /
> --start now-1h -w 600 -n DEFAULT:8 /
> DEF:value1=eth0.rrd:eth0_in:AVERAGE /
> DEF:value2=eth0.rrd:eth0_out:AVERAGE /
> COMMENT:" /n" /
> COMMENT:"      
當前值--------------平均值--------------最大值--------------最小值------------ --/n"    > COMMENT:" /n"
> AREA:value1#00FF00:"
流入" /
> GPRINT:value1:LAST:'%13.2lf'   /
> GPRINT:value1:AVERAGE:%13.2lf   /
> GPRINT:value1:MAX:%13.2lf   /
> GPRINT:value1:MIN:%13.2lf   /
> COMMENT:" /n" /
> LINE2:value2#ff0000:"
流出":STACK / # 注意這裏是 STACK 方式
> GPRINT:value2:LAST:%13.2lf   /
> GPRINT:value2:AVERAGE:%13.2lf   /
> GPRINT:value2:MAX:%13.2lf   /
> GPRINT:value2:MIN:%13.2lf   /
> COMMENT:" /n" /
> COMMENT:” /n” /
> COMMENT:"LAST UPDATED /:$(date '+%Y-%m-%d %H/:%M')/n" -Y
687x270
[root@dns1 bob]#


注意比較 Y 軸刻度值和流出部分的值的關係, Y 軸刻度值 —“流入” =“流出

由於時間精力有限,關於對齊方面的工作就大家自己試驗吧.如果繪製的對象數量不是很多,可以用橫向報表,不要用這種垂直的格式,

這種格式的好處是便於比較各個對象的值。不過我可以肯定,如何讓這些數字和上面的表頭對齊是一個會令你極度抓狂的工作的!!!

上面的   COMMENT 一是輸出表頭,二是輸出空行。注意,要用 COMMENT 輸出空行,必須用 COMMENT:’ /n’

注意到 ‘/’ 前面的空格嗎?這個是不可以漏的,否則就不會有空行的效果了。

十一)特殊功能

[Copy to clipboard]

CODE:

VRULE:time#color[:legend]
HRULE:value#color[:legend]
SHIFT:vname:offset


A
VRULE/HRULE 可以用於在圖表上面繪製垂直線/水平線。例如我們想要在圖表上面標出最大值,可以用 HRULE Y 軸的指定刻度值

那裏繪製一根水平線,例如 HRUE:100000#ff0000:”最大值 100k 處畫一根水平線,並指出這是最大值。

SHIFT
可以用來移動數據,例如 abel 兄曾經在 “[教學]中的教學() RRDTOOL 1.2 更新項目中提到過一個問題,

就是“xx同期相比如何畫?下面就以如何比較3天的數據。

實例1 :繪製連續3天的數據

[Copy to clipboard]

CODE:

[root@dns1 bob]# rrdtool graph 1.png /
> DEF:value1=eth0.rrd:eth0_in:AVERAGE:end=now:start=now-1d / # 1
天前
> DEF:value2=eth0.rrd:eth0_in:AVERAGE:end=now-1d:start=now-2d / # 2
天前
> DEF:value3=eth0.rrd:eth0_in:AVERAGE:end=now-2d:start=now-3d / # 3
天前
> LINE1:value1#00ff00:"1 day ago" /
> LINE1:value2#ff0000:"2 days ago" /
> LINE1:value3#000000:"3 days aog" /
> -Y
475x168
You have new mail in /var/spool/mail/root
[root@dns1 bob]#


爲什麼只有1天前的數據呢?因爲我們沒有指定 –-start RRDtool 默認只繪製1天前的數據。由於這裏覆蓋了3天,

所以我們可以把 –-start 定義爲 –-start now-3d 就可以了。

現在是不是3天的數據都畫出來了呢?不過由於它們是橫向排列的,所以要比較同個時間段的並不容易,能否把它們

垂直的方式排列呢?這就要用到 SHIFT 了!

[Copy to clipboard]

CODE:

[root@dns1 bob]# rrdtool graph 3.png /
> DEF:value1=eth0.rrd:eth0_in:AVERAGE:end=now:start=now-1d / # 1
天前
> DEF:value2=eth0.rrd:eth0_in:AVERAGE:end=now-1d:start=now-2d / # 2
天前
> DEF:value3=eth0.rrd:eth0_in:AVERAGE:end=now-2d:start=now-3d / # 3
天前
> LINE1:value1#00ff00:"1 day ago"   /
> SHIFT:value2:86400 LINE1:value2#ff0000:"2 days ago" / #
把曲線向右移動1
> SHIFT:value3:172800 LINE1:value3#000000:"3 days ago" / #
把曲線向右移動2
> -Y –w 600
475x168


[root@dns1 bob]#

和上面的圖表比較,是否可以發現 X 軸不同了,不再是3天,而是1天多1點了。而且3根曲線重疊在一起了,可以看出在這三天中,

只有1天前的23點左右有一點流量之外,其餘絕大部分都沒有流量。

這就是 SHIFT 的功能了,可以把曲線/方塊沿着 X 軸移動(左右都可以),我們達到比較同期數據的目的。是不是很好用呢?

十二)總結

這次的內容可真夠多的,足足寫了19頁。不過工具性的東西就是這樣 :別看內容 N多,你只要動手畫出1個圖之後,就會覺得一

切都很簡單了。以後只要套用就可以了。關鍵是如何更好的把你想要的數據以合適的發給你是呈現出來。

上面這些內容都是我通過實驗得出的,由於具體的環境不同,可能會跟大家的不同,或者出現錯誤。我希望大家不要客氣,有錯誤

的地方就指正,有什麼好的發現也提出來,一起完善 RRDtool 的文檔。這樣就可以讓越來越多的人瞭解、掌握 RRDtool 了 。
發佈了4 篇原創文章 · 獲贊 1 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章