[精讚] [會員登入]
303

使用RRDTOOL來繪製流量圖

使用RRDTOOL來製作流量圖的簡略說明

此文完整連結 http://n.sfs.tw/13078

複製連結 使用RRDTOOL來繪製流量圖@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-02-16 02:34:48 最後編修
2019-02-02 02:33:43 By 張○○
 

MRTG的作者 Tobias Oetiker(瑞士) [1]所製作的工具,可以自行定義和繪製流量圖形。

MRTG是個簡單的流量圖繪製工具,但是如果要繪製比較複雜一點的圖形,MRTG就不夠力,因此他另外提供了 RRDTool。

要使用RRDTool 可分為三個部分:

1. 建立RRD資料庫
2. 餵入資料
3. 繪製圖形

當然用說的很簡單,每個步驟都不是很容易上手,但是他繪製的圖形很優美,吸引不少人去學習他,要說到RRDTool的說明文件,不得不提StudyArea[2] abelyang 所寫的文章,可作為初學者的第一步,美中不足的是因為年代久遠,文中有些設定已經作廢。由於功能強大,我還有很多沒搞清楚,因此就我知道的作說明。

例如這是一個RRDTools繪製的範例圖

<<以下部分中文說明的用語是我自己編的>>

安裝

請看 [CENTOS7] 安裝rrdtool+RRDs+PERL

 

建立RRD資料庫

RRD資料庫有別於純文字的log檔,他是2進位檔,得利用 rrdtool create 建立。

請下此指令,因為指令很長,所以每一行後面有個反斜線'\' 告訴系統指令沒打完,'\'後面不要再有其他的字元

rrdtool create a.rrd --start '-2day' --step 300 \
DS:item1:COUNTER:600:0:U \
DS:item2:COUNTER:600:0:U \
DS:item3:COUNTER:600:0:U \
RRA:MAX:0.5:1:2016 \
RRA:AVERAGE:0.5:1:2016 \
RRA:LAST:0.5:1:2016

第1行 上面的範例建立一個 a.rrd的資料庫,
--start 資料啟始時間,可以使用時戳或是文字,例如 --start 154421200、--start '-6month'
--step 每筆資料的間隔時間(秒) 300代表5分鐘

第2-4行
DS 代表資料類型,等同於資料表中的欄位,他的格式是這樣的

DS:欄位名稱:類型:心跳值:最小值:最大值

  類型可使用

  GAUGE 資料是多少就多少,例如溫度、濕度、目前時速等
  COUNTER 資料是累加的要選這個,例如累積流量,累積里程、電表度數等
  DCOUNTER 同上,但是資料是有小數點的倍精數
  DERIVE |  DDERIVE | ABSOLUTE | COMPUTE
這些我沒搞懂

  心跳值(heartbeat)

    基本上此值是step的2倍,例如設定為600時,假設要取12:00的數據,而前後300秒的值(11:55-12:05) 經過平均或是取最大或最小都算是12:00的有效值。

  最小值

    此數據能接受的最小值,小於此值則該筆數據被忽略,不限定的話可設定為大寫的U

  最大值

    此數據能接受的最大值,大於此值則該筆數據被忽略,不限定的話可設定為大寫的U

第5-7行

RRA 是 Round Robin Archive ,定義數據收集的方式,他的格式是這樣:

RRA:歸檔方式:未知容許比率:幾筆算成一個小單元:最大小單元數

  歸檔方式

   有四種可選 AVERAGE | MIN | MAX | LAST

  未知容許比率

   可設定0~1,這個數值代表可接受未知數據的比例,例如你由10筆記錄組成1個RRA的小單元(稱之為CDP),設定0.7的話,你只能容許有6筆資料遺失,如果遺失7筆的話,此小單元就定義為缺失(Unknown),換句話說,設為0不容許任何遺失,設為1全部遺失才是Unknown。當然如果你的小單元是只有一個數據組成的話,設成多少都不重要。

  幾筆算成一個小單元

  例如12筆5分鐘資料設為一個小單元,則設定為12

  最大小單元數

  超過此值會被刪除,如此而已

 

餵入資料

餵入資料比較簡單,只要把資料用冒號串起來就好

rrdtool update a.rrd 1549082701:1236:3180:0

但有一些限制:

1. 欄位數一定要完全相同否則會被拒絕

2. 第一筆一定是時戳,後再帶入欄位的資料,如上例中我有3個DS:時戳:DS1:DS2:DS3。

3. 時戳一定要比rrd限定時戳來得大,例如建立時有指定 --start '-2day',因此不能餵入二天以前的數據。

4. 要循序,舊的資料要先餵,否則會出錯。

餵入資料是個漫長的過程,我餵入過10,000,000行的資料(1000個檔案),花了11個小時。

 

繪製圖形

繪圖不太容易

rrdtool graph a.png \
-a PNG --title 'in Query範例' \
--vertical-label "數量/s" \
--width 400 \
--start  '-1day' \
--x-grid 'HOUR:1:HOUR:6:HOUR:4:0:%H' \
'DEF:s1=a.rrd:item1:AVERAGE:start=-2day' \
'DEF:s2=a.rrd:item2:MAX' \
'DEF:s3=a.rrd:item1:MIN' \
'CDEF:c2=s1' \
'SHIFT:c2:86400' \
'AREA:s2#00ff00:Switch 2min' \
'AREA:s3#F0ffc0:Switchn:STACK' \
'LINE1:c2#ff00E0:Switch 1avg' \
"COMMENT:各 PORT 流量統計---平均-------最小" \
'GPRINT:s1:LAST:count\: %7.2lf ' \
'GPRINT:c2:LAST:上週count\: %7.2lf ' \

第5行 繪製圖型起始1天前
第6行 X座標格式[3]

--x-grid GTM:GST:MTM:MST:LTM:LST:LPR:LFM

簡單說明一下,第一組是小刻度格線HOUR:1表示每小時換一輕線;第二組是大刻度格線,HOUR:6表示每6小時畫一紅線;第三組是標籤值,HOUR:4表示每4小時打一個標籤;第四組是位移和顯示格式,位移可讓你顯示的標籤看是對齊格線還是格子,例如向右移一小時,就寫3600,最後的是格式,例如[3]

%Y Year as four digits, e.g. 2009
%m Month as two digits, with leading zero, e.g. 01 02 ... 09 10 11 12
%d Day as two digits, with leading zero, e.g. 01 02 ... 30 31
%a Abbreviated weekday, mon tue wed thu fri sat sun
%H Hour as two digits, with leading zero, e.g. 00 01 ... 22 23
%M Minute as two digits, with leading zero, e.g. 00 01 ... 58 59
%S Second as two digits, with leading zero, e.g. 00 01 ... 58 59 and 60(!)

 

第7-9行 DEF定義資料從rrd取得欄位,這表示繪圖時是可以跨rrd的。
第10行 CDEF是將數據作計算,後置表示法。(後置表示法在計算機學學到2 30年,第一次實用上能用到)
第11行 SHIFT是把資料移位,此例中c2原本等於s1(2天前到目前48小時的資料),移位86400秒,前天的就被移到昨天,昨天的被移到明天,但繪圖時是從一天前繪製到目前,所以就能在圖上同時顯示今天和昨天的資料。[4]

第12-13行 畫面積圖,大圖先畫,小圖後畫,第13最後有一個'STACK',表示把圖加在上面那個面積圖上產生堆疊效果。
第14行 畫線圖,注意是LINE1,沒有LINE2,3...我想原作者是想要增加其他線形,但一直沒做。
第15行 COMMENT 註解,註解要換行用\n。

第16-17行 GPRINT 是圖例,同時也能用LAST顯示最後一筆數據,你也能換成MAX顯示最大值;%7.2lf表示顯示7個整數和2個小數位。

其他可用參數(部分)
--slope-mode 線看起來會更平滑,但是稍微失真
--upper-limit 100 垂直最大值設為100(至少要有100),事實上有可能超過
--lower-limit 0 垂直最小值設為0(至少會有0),事實上有可能更低
--rigid 剛性限定垂直刻度一定介在 --lower-limit 和 --upper-limit之間

 

查看最後資料的時戳

在餵入資料時,如果最後時戳大於你數據的時戳就會報錯:

你可以使用 last 選項來確認最後加入的時戳

rrdtool last a.rrd

1549027201

 

查看RRD狀態

rrdtool info a.rrd

 

修改RRD參數

餵入數據是RRD資料庫的硬傷,很慢,沒必要千萬別重建,因此如果設定錯誤,修改是最佳解,舉例。

修改類型為GAUGE:

rrdtool tune rrdfile.rrd -d item0:GAUGE

修改上界為無限:

rrdtool tune rrdfile.rrd -a item1:U

相關參數請參考[11]

 

參考資料

[1] RRDTool官網 https://oss.oetiker.ch/rrdtool/index.en.html (EN)

[2] StudyArea http://www.study-area.org/tips/rrdtool/rrdtool.html (正體中文)

[3] X座標格式 http://rrdtool.vandenbogaerdt.nl/tutorial/x-grid.php (EN)

[4] shoichimasuhara https://www.slideshare.net/shoichimasuhara/rrdtool-35507239 (日)

[5] shoichimasuhara https://www.slideshare.net/VirtualTech-JP/vtj-open-stackbizseminar1309254?next_slideshow=1 (日)

[6] 防止資料不連續 https://stackoverflow.com/questions/38723029/how-can-i-avoid-getting-blank-spaces-in-my-rrdtool-graphs (EN)

[7] Getting Started with RRDtool http://cuddletech.com/articles/rrd/rrdintro.pdf

[8] http://blog.51cto.com/freeloda/1307492 (簡)

[9] 使用中文字 CENTOS7] 安裝中文字型

[10] DNS STAT 物件 https://thwack.solarwinds.com/docs/DOC-169132 (EN)

[11] RRDTUNE https://oss.oetiker.ch/rrdtool/doc/rrdtune.en.html (EN)

你可能感興趣的文章

[Centos7] SSL自簽憑證+APACHE+Selinux SSL的自簽憑證

PHP for sphinx 函式庫安裝 PECL/sphinx PHP>= 5.2.2 已經能原生支援 sphinx,可是預設的沒有裝,我們得自己裝才能用

[Centos] 安裝及使用postfix,設定虛擬帳號及轉寄 使用postfix來設定虛擬帳號及轉寄

DNS壓力測試工具queryperf 要怎麼知道我安裝的DNS是否能耐受的住網路上的攻擊或大量查詢,這裡有一個免費的工具 queryperf

[Centos6] 安裝VNC連線程式 在Centos6桌上環境安裝VNC 連線程式

安裝網頁套件管理程式 Bower 一個非常棒的Javascript套件管理程式bower,用完愛不釋手。

使用GPG檔案加解密 簡易的檔案加解密方式,可以讓你重要的資料包括文字檔加解密。

[Centos7] 把帳號新增移除具有root權限等級的sudoer 把帳號新增或移除具有root權限等級的sudoer

[Centos7] 安裝 semanage (selinux工具程式) 安裝selinux的工具程式 semanage

[Centos6] 安裝wordpress Centos 6下安裝wordpress,非常簡單

我有話要說


限制:留言最高字數1000字,超過部分會被截掉。請注意:留言不可帶有網址,會被濾掉。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

[jQuery] textarea 的取值和給值 HTML 的 TEXTAREA 標籤若要用 jquery 取值,不能使用 .text() 或 .html() ,使用 .

沒有非誰做不可的事,也沒有不可被取代的人 沒有非誰做不可的事,也沒有不可被取代的人

UTF-8 BOM (Byte Order Mark) 的問題 在 Michael Kaplan 那看到 Every character has a story #4: U+feff

一個邏輯的錯誤刪了全部檔案的經驗 今天本來想做一件很簡單的事,但卻足足浪費我多一倍的時間,再加上刪掉我全部的檔案,原因只是因為我自己的邏輯錯誤。

精讚的版面變化 ▓此文僅作為舊文的記錄▓ 這篇文章為了紀念改版完成而撰寫。 原本的部落格是民國97年的作品,那時還是用舊有的技術來寫,很