從 RRD 文件中提取數據
**********************************************************************************************************************
注 :該教程參考瞭如下內容 :
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
**********************************************************************************************************************
一)前言
RRD 是 Round Robin Database 的意思,那麼是否可以象普通的數據庫進行查詢操作呢?
答案是可以的。fetch 就是用來做這種事情的工具。當然
fetch 不能和 select 語句相比,它只是根據用戶指定的時間,
從合適的 RRA 中取出數據,並加以格式化。不過和 MRTG 相比,已經好很多了,至少你不用取看該死的 log 文件。
實際上,fetch 操作其實可以不學,因爲 RRDtool 會自動幫你選好數據。但你如何確定 RRDtool 取的數據就是你想要的呢?
或者說你如何證明 RRDtool 繪製出來的圖是正確的呢?
廢話少說,下面開始正文
二)fetch 操作的語法
CODE:
rrdtool fetch filename CF [--resolution|-r resolution] [--start|-s start] [--end|-e end]
其中 --start、--end、-r 都是可選的 。RRDtool 默認的 --end 是 now ,--start
是 end-1day ,也就是1天前。
CF 可以是 AVERAGE、MAX、MIN、LAST ,當然必須建庫時有該
CF 類型的 RRA 纔可以查,否則會報錯。
三)fetch 如何取數據
在確定了時間範圍後,RRDtool 會從多個 RRA 中挑選最佳的那個 RRA 的數據。至於什麼是“最佳”,則從兩個方面考慮 :
A)第一是該 RRA 的數據要儘可能的覆蓋所請求的時間範圍。如何計算一個 RRA 的覆蓋時間呢?以 eth0.rrd 的第一個RRA 爲例,
有 600 個記錄,每個記錄相隔300秒,則總的時間覆蓋範圍是180000 秒≈2天,所以如果 –-start 和
-–end 規定的時間範圍
大於2天,則
RRDtool 不會從該 RRA 中取數據。
B)第二是 resolution 的要求。還是上面的例子,如果是要畫3天的數據,從時間覆蓋範圍上來講,第2、3、4 個 RRA 都符合要求。
那究竟挑選那個 RRA 的數據呢?如果 fetch 中有指定 –r 選項,則挑選 resolution 等於 –r 指定的值那個 RRA 的數據。如果沒有
–r 選項,則從第一個合適的 RRA 中取數據。
C)fetch 如果不加 –-start、--end、-r ,則默認輸出
resolution 最小的那個 RRA 的數據。就像下面的例子1一樣。
四)實際例子
實例一 :默認情況
CODE:
[root@dns1 bob]# rrdtool fetch eth0.rrd AVERAGE |more
eth0_in eth0_out
1164467700: 1.1337243905e+01 9.6323712631e-02
1164468000: 1.7896453039e+01 0.0000000000e+00
1164468300: 1.8469136234e+01 1.2215723119e+00
。。。。(中間省略)
1164553800: 6.9634610564e+01 4.9644415243e+01
1164554100: nan nan
CODE:
[root@dns1 bob]# date (當前時間)
日 11月 26 23:11:12 CST 2006
[root@dns1 bob]# date -d '1970-1-1 1164554100 sec utc' (最後一個記錄的時間)
日 11月 26 23:15:00 CST 2006
[root@dns1 bob]#
[root@dns1 bob]# date -d '1970-1-1 1164467700 sec utc' (第一個記錄的時間)
六 11月 25 23:15:00 CST 2006
[root@dns1 bob]#
fetch 輸出的第一列是 timestamp ,表示後面的數據是在什麼時間收到的。”:” 後面就是DS的值。fetch 不能指定只取那個 DS 的數據,
只能一次性取出全部 DS 的值。可以看到,eth0.rrd 有兩個 DS :eth0_in 和
eth0_out ,每個 DS 的值用 空格進行分隔,一律採用科學記數法的格式。
如果 fetch 不指定 –-start 和 -–end ,則默認取從當前時刻算起,往前1天的數據(289個記錄)。因爲現在是 23:11 ,還不到 23:15,所以最後一個記
錄的值是 NaN (Not a Number),也就是 UNKNOWN 的意思。可以看到,兩個記錄之間的時間間隔是300。
實例二:使用 --start 和 --end 指定時間範圍
CODE:
[root@dns1 bob]# rrdtool fetch eth0.rrd AVERAGE --start
1164467700 --end 1164553800 |more
eth0_in eth0_out
1164468000: 1.7896453039e+01 0.0000000000e+00
1164468300: 1.8469136234e+01 1.2215723119e+00
1164468600: 1.5988336199e+01 1.4417769382e-01
。。。。。(中間省略很多)
1164553800: 6.9634610564e+01 4.9644415243e+01
1164554100: 1.7481962958e+02 2.3086574912e+02
[root@dns1 bob]#
可以看到第一個記錄和最後一個記錄都比 –-start 和 –-end 晚了300秒。
實例三 :使用 AT風格的時間
CODE:
[root@dns1 bob]# rrdtool fetch eth0.rrd AVERAGE --start
end-1day --end 1164553800 |more
eth0_in eth0_out
1164467700: 1.1337243905e+01 9.6323712631e-02
1164468000: 1.7896453039e+01 0.0000000000e+00
。。。。。。。(中間省略很多)
1164554100: 1.7481962958e+02 2.3086574912e+02
[root@dns1 bob]#
注意 --start 的值是
end-1day ,這就是 AT風格的時間。end 就是 --end 中給出的1164553800 。具體的時間範圍是表示起始時間從1164553800 往前1天 。
可以看到,現在第一個記錄和實例二相比,提前了300秒。和例2中的 –start 一致了。所以能夠用 AT風格的時間的時候還是用 AT 風格的時間比較方便。
可以省去計算的麻煩,別人也比較容易看。
實例四 :提取指定 resolution 的數據
CODE:
[root@dns1 bob]# rrdtool fetch eth0.rrd AVERAGE --start
1164467700 --end start+1day -r 1200 |more
eth0_in eth0_out
1164468000: 1.7899370295e+01 3.8782610300e+00
1164469200: 2.0828335735e+01 3.4166666667e-01
1164470400: 1.4581351504e+01 3.5000000000e-02
。。。。。。(中間省略很多)
1164554400: 9.4367707174e+01 9.4866775629e+01
[root@dns1 bob]
可以看到,現在記錄兩兩之間的時間間隔變成了1200 了。輸出的行數爲
(86400/1200)+1=73 (72+1)。
實例五:如果指定一個不存在的 resolution 呢?
CODE:
[root@dns1 bob]# rrdtool fetch eth0.rrd AVERAGE --start
1164467700 --end start+1day -r 1000 |more
eth0_in eth0_out
1164468000: 1.7899370295e+01 3.8782610300e+00
1164469200: 2.0828335735e+01 3.4166666667e-01
。。。。。。(中間省略很多)
1164554400: 9.4367707174e+01 9.4866775629e+01
[root@dns1 bob]#
我們指定的 resolution 是 1000 ,但並沒有那個 RRA 的
resolution 爲 1000,所以 RRDtool 挑選了第一個合適的 resolution ,
也就是 1200 的那個 RRA 的數據作爲結果輸出。注意,RRDtool 只會挑選 resolution 比 –r 指定的值相等或者更高的 RRA ,不會挑
選比 –r 指定的值小的 RRA 。例如在該例子中,RRDtool 就不會挑選 resolution=300 的第一個 RRA 。爲什麼呢?
各位可以自己根據第三部分“fetch 如何提取數據”的兩個準則考慮一下
實例六 :再來看一個 –r 的例子
如果我不想指定 –-start 或者 –end ,就想看 resolution 爲 1200 呢?
CODE:
[root@dns1 bob]# rrdtool fetch eth0.rrd AVERAGE -r 1200
eth0_in eth0_out
1164470400: 1.4581351504e+01 3.5000000000e-02
1164471600: 1.9312781373e+01 3.5000000000e-02
。。。。。(中間省略很多)
1164555600: 8.5249300043e+01 7.0171152327e+01
1164556800: nan nan
[root@dns1 bob]#
咦?爲什麼還是使用記錄的時間間隔還是 300 秒呢?我們不是指定了 –r 1200 嗎?
老實說,這種方法 90% 以上的機率是不會成功嗎?那應該怎麼辦呢?
實例七 :正確使用 –r 的方式
CODE:
[root@dns1 bob]# rrdtool fetch eth0.rrd AVERAGE -r 1200
--end $((($(date +%s)/1200)*1200)) |more
eth0_in eth0_out
1164470400: 1.4581351504e+01 3.5000000000e-02
1164471600: 1.9312781373e+01 3.5000000000e-02
1164472800: 1.7383358822e+01 3.5000000000e-02
1164474000: 1.4781054841e+01 3.3225406191e-01
。。。。。。(中間省略很多)
1164555600: 8.5249300043e+01 7.0171152327e+01
1164556800: nan nan
[root@dns1 bob]#
現在 resolution 已經變成 1200 的了。同理,如果想看 7200,86400 resolution的 RRA,只要把 end 部分的 ( )中的數字替換爲相應的值就可以了。
CODE:
[root@dns1 bob]# rrdtool fetch eth0.rrd AVERAGE -r 7200
--end $((($(date +%s)/7200)*7200))
[root@dns1 bob]# rrdtool fetch eth0.rrd AVERAGE -r 86400 --end $((($(date
+%s)/86400)*86400))
實例八 :關於 fetch 提取數據準則1的測試
CODE:
[root@dns1 bob]# rrdtool fetch eth0.rrd --start now-3day
AVERAGE |more
eth0_in eth0_out
1164298800: nan nan
1164300000: nan nan
。。。。。。(中間省略很多)
1164556800: 6.4118014239e+01 1.8871145267e+01
1164558000: nan nan
[root@dns1 bob]#
和第一個例子不同,這次的 resolution 是 1200 了?爲什麼呢?因爲我們指定的時間範圍是3天,而第一個 RRA只保存2天的數據多一點,所以
RRDtool 不會從
該 RRA 取數據,那麼會從那個 RRA 取數據呢?由於我們沒有指定 –r 選項,所以 RRDtool 選擇1200
的那個 RRA
實例九 :關於 fetch 提取數據準則2的測試
CODE:
[root@dns1 bob]# rrdtool fetch eth0.rrd --start now-3day
AVERAGE -r 7200 |more
eth0_in eth0_out
1164304800: nan nan
1164312000: nan nan
1164319200: nan nan
。。。。。。(中間省略很多)
1164549600: 5.1899602485e+01 4.3073128067e-01
1164556800: 7.9766222122e+01 4.0644151093e+01
1164564000: nan nan
[root@dns1 bob]#
現在 resolution 不再是 1200 ,而是指定的 7200 了。
因爲雖然 resolution=1200 的 RRA 就可以滿足 --start 和 --end 的需求,
但因爲 -r 指定 resolution=7200 ,所以從第3個 RRA 中取數據
五)總結
從上面我們可以看出,fetch 實際上是非常複雜的一個命令,如果想要輸出你所要的數據,就必須考慮好幾個因素
:
A)第一是具體想輸出的時間範圍?
B)第二是計算好 –-start 和 –end。建議至少給出一個,最好2個都給出
C)第三是如果有多個RRA符合條件,則使用 –r 指定具體的 resolution
使用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
**********************************************************************************************************************
一)前言
使用RRDtool 我們最關心什麼?當然是如何把數據畫出來了。雖然前面談了很多,但這些都是基礎來的。掌握好了,可以讓你在繪圖時更加得心應手。
本來還有 RPN (反向波蘭表達式)一節的,但考慮一下,覺得還是放到後面,先從基本的繪圖講起。
這一節的內容雖然很多,但基本都是實驗性的內容,只要多試幾次就可以了。
二、graph 操作的語法
CODE:
rrdtool graph filename [option ...]
[data definition ...]
[data calculation ...]
[variable definition ...]
[graph element ...]
[print element ...]
其中的 data definiton、variable definition 、data calculation、分別是下面的格式
CODE:
DEF:<vname>=<rrdfile>:<ds-name>:<CF>[:step=<step>][:start=<time>][:end=<time>][:reduce=<CF>]
VDEF:vname=RPN expression
CDEF:vname=RPN expression
其中 filename 就是你想要生成的圖片文件的名稱,默認是 png 。你可以通過選項修改圖片的類型,可以有 PNG、SVG、EPS、PDF四種。
A)DEF 是 Definition (定義)的意思。定義什麼呢?你要繪圖,總要有數據源吧?DEF 就是告訴 RRDtool 從那個
RRD 中取出指定
DS(eth0_in、eth0_out)的某個類型的統計值(還可以指定 resolution、start、end),並把這一切放入到一個變量 <vname>中 。
你可能會感到奇怪,爲什麼還有一個 CF 字段?因爲 RRA 有多種 CF 類型,有些 RRA 可能用來保存平均值、有些 RRA 可能用於統計最大值、
最小值等等。所以你必須同時指定使用什麼 CF 類型的 RRA的數據。至於 :start 和 :end 、:reduce
則用得比較少,最常用的就是 :step 了,
它可以讓你控制 RRDtool 從那個 RRA 中取數據。
B)VDEF 是 Variable Definition (變量定義)的意思。定義什麼呢?記得 MRTG 在圖表的下面有一個稱之爲 Legend 的部分嗎?
那裏顯示了1個或者2個 DS (MRTG 沒有 DS 一說,這裏是借用 RRDtool 的)的 “最大值”、“平均值”、“當前值”。這些值是如何
計算的呢?
RRDtool 中用 VDEF 來定義。這個變量專門存放某個
DS 某種類型的值,例如 eth0_in 的最大值、eht0_out
的當前值等。當你需要象
MRTG 一樣輸出數字報表(Legend)
時,就可以在 GPRINT 子句(sub clause)中調用它。
同樣它也需要用一個變量來存放數值。要注意的是,舊版 的 RRDtool 中是用另外一種格式來達到相同的目的。新版的 RRDtool 則推薦使用
VDEF 語句。但在使用過程中,卻發現 VDEF 的使用反而造成了困擾。 例如你有5個 DS 要畫,每個 DS 你都想輸出最大值、最小值、平均值
、當前值。 如果使用 VDEF ,則需要 4 * 5 = 20 個 VDEF 語句,這會造成極大的困擾。具體例子可以看第十一節“數字報表”部分。
C)CDEF 是 Calculation Define 的意思。使用過MRTG 的都會體會到一點,MRTG 的計算能力實在太差了。例如你有兩個 Target ,
一個是 eth0_in , 一個是
eth0_out,如果要把它們相加起來,再除以8,得出
bytes 爲單位的值,如何計算呢?或者說你只想看
eth0_in 中超過 10Mb/s 的那部分, 其餘的不關心,又如何實現呢?因爲 MRTG 不能對它從 log 取出來的數據進行修改,只能原
原本本的表現,所以很難滿足我們的要求。而使用 CDEF , 這一切都可以很容易的實現。CDEF 支持很多數學運算,甚至還支持簡
單的邏輯運算 if-then-else ,可以解決前面提到的第2個問題:如何只繪製你所關 心的數據。不過這一切都需要熟悉 RPN 的語法,
所以我們放到下一節介紹,這一節就介紹如何把 RRDtool 中的數據以圖表的方式顯示出來。
三)選項分類
本部分我們按照官方文檔的方式,把選項分成幾大類,分爲 :
A)Time range : 用於控制圖表的X軸顯示的起始/結束時間,也包括從RRA中提取指定時間的數據。
B)Labels :用於控制 X/Y 軸的說明文字。
C)Size :用於控制圖片的大小。
D)Limits :用於控制 Y 軸的上下限。
E)Grid :用於控制 X/Y 軸的刻度如何顯示。
F)Miscellaneous :其他選項。例如顯示中文、水印效果等等。
G)Report :數字報表
需要說明的是,本篇當中並不是列出了所有選項的用法,只是列出較爲常用的選項,如果想查看所有選項的的用法,可以到官方站點下載文檔,
這裏就不一一列出了,望各位見諒。
四)時間範圍控制(Time Range)
CODE:
[-s|--start time] [-e|--end time] [-S|--step seconds]
既然要繪圖,就應該有一個起始/結束的時間。Graph 操作中有 –s ,-e 選項。這兩個選項即可以用於控制圖表的 X 軸顯示的時間範圍,也可以用
於控制 RRDtool 從 RRA 中提取對應時間的數據。如果沒有指定 –-end ,默認爲 now;如果沒有指定 –-start,則默認爲1天前。如果兩者都沒有
指定,則圖表默認顯示從當前算起1天內的。數
回頭看一下 DEF 中,也有 :start ,:end ,
:step ,這些和 –-start、--end、--step 之間有什麼關係呢?
讓我們先看 :step 和 –step之間的關係是如何的。
下面以 eth0.rrrd 爲例,假設要繪製的時間範圍 range
等於 end -start[
A)如果 0 < ragne < 180000 (第一個 RRA 的時間覆蓋範圍) ,則默認從第1個RRA中取數據 :
如果 DEF 中給出的
:step > 300 ,例如 1000 ,則從
resolution= 1000 的或者第一個高於 1000 的RRA 中挑選數據,由於 eth0.rrd 中沒有
resolution = 1000 的 RRA,則
RRDtool 會從 resolution = 1200 的第2
RRA 中取數據。
如果 DEF 中給出的
:step <= 300 ,例如 200 ,則
RRDtool 會忽略該設定,還是從第一個 RRA 中取數據。
B)如果 180000 < range < 720000 ,由於第一個RRA只能保存2天的數據,所以默認從第2個RRA中取數據 :
如果 DEF 中給出的
:step > 1200 ,例如 1800,則
RRDtool 會從 resolution = 7200 的第3
RRA 中取數據
如果 DEF 中給出
:step<= 1200,例如 300 ,則
RRDtool 會忽略,還是從第2個 RRA 中取數據
C)如果 720000 < range < 4320000 ,則默認從第三個 RRA 中取數據 :
如果 DEF 中給出的
:step > 7200 ,例如 10000 ,則從第4個 RRA中取數據
如果 DEF 中給出的
:step <= 7200 , 例如 1200 ,則忽略該值,並還是從第3 個 RRA 中取數據
D)如果 4320000 < range < 63072000 ,則默認從第4個 RRA 中取數據 :
如果 DEF 中給出的
:step > 86400 ,則行爲未知
如果 DEF 中給出的
:step <=86400 ,則從第4個 RRA 中取數據
E)-S 選項可以直接控制 RRDtool 如何挑選 RRA 。
例如 -S 1200 ,即使DEF 中不加 :setp ,則 RRDtool 會從第2個 RRA 中取數據,即使 rang
< 180000
如果 -S 和 :step 同時出現,則 :step 優先。
F)DEF 中的 :start 和 :end 可以覆蓋 –-start 和
–-end 的值。
默認情況下,如果 DEF 中不加 :start 和 :end ,則等於
–-start 和 –end
如果 DEF 中定義了 :start 和 :end ,則以 :start 和
:end 爲準。
實例1 :使用 –-start 指定 X 軸的起始時間
CODE:
[root@dns1 bob]# rrdtool graph 1.png /
> --start now-120000 / # 表示起始時間是當前時間往前
120000 秒,也就是 33 個小時左右
> DEF:value1=eth0.rrd:eth0_in:AVERAGE / # 從eth0.rrd 中取出 eth0_in 的數據,CF 類型爲 AVERAGE
> AREA:value1#ff0000 # 用“方塊”的形式來繪製 value1 ,注意這裏是用 value1 ,不是用 eth0_in
481x154 # 如果 RRDtool 有繪圖方面的語句,則這裏顯示圖片大小,否則爲 0x0。
[root@dns1 bob]#
可以看到 X 軸的文字有些是亂碼,不過不要緊,你可以臨時已用 env LANG=C rrdtool xxxx 來解決該問題,或者在後面用
–n 來設定 RRDtool 使用中文字體,就不會出現這樣的情況了
實例2 :使用 :step 從第2個RRA中取數據
CODE:
[root@dns1 bob]# rrdtool graph 2.png /
> --start now-120000 /
> DEF:value1=eth0.rrd:eth0_in:AVERAGE:step=1000 / # :step 指定 resolution=1000
> AREA:value1#ff0000
481x154
[root@dns1 bob]#
這裏是 :step=1000,但
RRDtool 會取 :step=1200 的 第2個 RRA 的數據來繪圖,可以和上面的
1.png 比較,發現比較平滑。
實例3 :使用 –S 從第2個RRA中取數據
CODE:
[root@dns1 bob]# rrdtool graph 4.png
> -S 1200 / # 使用 –S 控制 RRDtool 從 resolution=1200 的 RRA 中取數據
> --start now-120000 /
> DEF:value1=eth0.rrd:eth0_in:AVERAGE /
> AREA:value1#ff0000
481x154
[root@dns1 bob]#
可以看到和上面的圖一樣,說明 RRDtool 的確按照 -S 的設置從第2個RRA 中取數據了
使用 –S 可以對 DEF 中所有的 DS 都使用相同的 resolution,等於在每個 DEF後都加上 :step=<value> ,value 是 –S 的值
實例4 :同時使用 –S 和 :step
CODE:
[root@dns1 bob]# rrdtool graph 5.png
> -S 1200 / # -S 指定
resolution=1200
> --start now-120000 /
> DEF:value1=eth0.rrd:eth0_in:AVERAGE:step=300 / # :step 指定 resolution=300
> AREA:value1#ff0000
481x154
[root@dns1 bob]#
可以看到 5.png 和
1.png 是一樣的,也就是說 –S 1200 並沒有起作用,而是 :step=300 起作用了
實例5 :使用 :start 和 :end 只顯示指定時間內的數據
CODE:
[root@dns1 bob]# rrdtool graph 1.png /
> --start now-1h / # X 軸顯示1個小時的長度
> DEF:value1=eth0.rrd:eth0_in:AVERAGE:start=now-600:end=now-300 / # 但只取10分鐘前到5分鐘前的這部分
> AREA:value1#00ff00:in
475x168
[root@dns1 bob]#
如果我們不加 :start 和
:end ,則效果如下 :
我們甚至可以讓兩個對象顯示不同的時間,例如
實例6 :讓兩個對象顯示不同時間段的數據
CODE:
[root@dns1 bob]# rrdtool graph 1.png /
> --start now-2h / # 規定時間爲2小時內
> DEF:value1=eth0.rrd:eth0_in:AVERAGE:end=now:start=end-1h / # 規定時間爲1小時內
> DEF:value2=eth0.rrd:eth0_out:AVERAGE / # 沒有指定
:start 和 :end,默認和 –-start 一樣也是2小時
> AREA:value1#00ff00:in /
> LINE2:value2#ff0000:out:STACK
475x168
[root@dns1 bob]#
實例7 :把一段時間分爲幾段分別顯示 :
CODE:
[root@dns1 bob]# rrdtool graph 1.png /
> DEF:value1=eth0.rrd:eth0_in:AVERAGE:end=now:start=end-1h / # 當前1小時內
> DEF:value2=eth0.rrd:eth0_in:AVERAGE:end=now-1h:start=now-2h / # 2小時前
> DEF:value3=eth0.rrd:eth0_in:AVERAGE:end=now-2h:start=now-3h / # 3小時前
> LINE1:value1#00ff00:"1 hours ago" /
> LINE2:value2#ff0000:"2 hours ago" /
> LINE3:value3#000000:"3 hours ago"
475x168
[root@dns1 bob]
我們把3個小時內的數據用三種不同粗細、不同顏色的曲線畫了出來。
看到了嗎,out部分(紅色)顯示了2個小時內的流量,而in部分(綠色)則只顯示了1個小時內的部分
在這裏要提一點,雖然我們指定了 –-start 或者 –-end ,或者 :start , :end,但並不意味着曲線就一定會從指定的時間點開始和結束。
例如我們上面指定了 :start=now-600:end=now-300 ,也就是隻顯示5分鐘的數據。但圖表出來的效果卻是10(10:05-10:15)分鐘
的數據,這是因爲我們挑選的時間當中“不慎”橫垮了兩個週期(10:05-10:10,10:10-10:15),所以 RRDtool 會把它們全部畫出來,而不是隻畫其中的5分鐘。