[精讚] [會員登入]
534

使用RRDTOOL來繪製流量圖

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

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

複製連結 使用RRDTOOL來繪製流量圖@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-10-18 11:56:08 最後編修
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] 安裝rrdtool+RRDs+PERL 要讓perl繪圖,安裝rrdtool和RRDs

TFTP Server 安裝及使用 讓設備的網路設定檔或是韌體經由TFTP拷備出來,操作的方法

[Centos7] 使用網路安裝 Centos7 使用網路來安裝Centos7,雖然這不是什麼新鮮事,但可以省你的磁碟空間或光碟片

使用mutt發信 mutt是一個簡易的發送程式,學會他就不用每次telnet mail server 煩死人

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

[Centos7] HTTPS/SSL憑證的SELINUX設置 把申請來的憑證檔放到指定的位置後,沒辦法啟動,怎麼辦?

EXCEL+phpPgAdmin 使用phpPgAdmin 匯出資料 直接使用phpPgAmin下載資料的方法

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

動態DNS -- dynamic DNS實作 BIND9動態DNS設定

使用dnstop 來觀察dns運作的情形 dnstop是非常方便的工具,可以觀察即時的dns查詢。 安裝 yum install dnstop

我有話要說


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

訪客留言

[無留言]

隨機好文

為什麼要買長達二十年的保單? 為什麼要買長達二十年的保單?找一個可以說服我買二十年保單的理由。

SELinux 常用指令和檔案 在Redhat系列中,Centos5以後加入了selinux,他並沒有這麼可怕,不必每次看到Selinux ,就想把他

[札記] 2016.7~12月札記 札記,只是札記

[JAVA] JWS, JWT, JWE, JOSE是什麼? [JAVA] JWS, JWT, JWE, JOSE是什麼?非常的複雜,儘量來搞清楚..

詭異的創業思維 創業的思維中,有多少銀彈,有多少技術,有多少人脈,有多少時間等等,每個都要考慮進去,以熱忱建立的關係脆弱的像蘇打餅乾一樣..