rrdtool學習筆記

一、前言
為了做云緩存平臺的技術儲備,從零開始學習了rrdtool,rrdtool非常強大,剛接觸會有摸不著邊的感覺,尤其是一堆概念性的東西。學習的切入點便是這些概念,一一理解后你才能品嘗到rrdtool的清香,首先要感謝ailms整理的“RRDtool簡體中文教程
v1.01
”,通俗易懂的概況了rrdtool的所有知識?,F在整理自己在學習過程中的一些筆記。

二、基本概念
RRDtool是指Round
Robin Database 工具(環狀數據庫)。Round
robin是一種處理定量數據、以及當前元素指針的技術。想象一個周邊標有點的圓環--這些點就是時間存儲的位置。從圓心畫一條到圓周的某個點的箭頭--這就是指針。就像我們在一個圓環上一樣,沒有起點和終點,你可以一直往下走下去。過來一段時間,所有可用的位置都會被用過,該循環過程會自動重用原來的位置。這樣,數據集不會增大,并且不需要維護。RRDtool處理RRD數據庫。它用向RRD數據庫存儲數據、從RRD數據庫中提取數據(來源百度問答
)。為了方便理解其工作原理,本人做了一個rrdtool存儲結構圖:
rrdtool學習筆記
1、DS用于定義 Data Soure
。也就是用于存放腳本的結果的變量名(DSN)。如eth0_in ,eth0_out, lo_in , lo_out 。DSN 從 1-19 個字符,必須是
0-9,a-z,A-Z 。

2、DST的選擇是十分重要的,如果選錯了 DST ,即使你的腳本取的數據是對的,放入
RRDtool 后也是錯誤的,更不用提畫出來的圖是否有意義了。

DST描述:
A)
COUNTER:必須是遞增的,除非是計數器溢出(overflows)。在這種情況下,RRDtool 會自動修改收到的值。例如網絡接口流量、收到的packets
數量都屬于這一類型。
B) DERIVE:和 COUNTER 類似。但可以是遞增,也可以遞減,或者一會增加一會兒減少。
C)
ABSOLUTE:ABSOLUTE 比較特殊,它每次都假定前一個interval的值是0,再計算平均值。
D) GAUGE:GAGUE
和上面三種不同,它沒有“平均”的概念,RRDtool 收到值之后字節存入 RRA 中。
E) COMPUTE:COMPUTE
比較特殊,它并不接受輸入,它的定義是一個表達式,能夠引用其他DS并自動計算出某個值。
這五種類型有什么區別?不防測試一下便知。
測試腳本:

view plaincopy to clipboardprint?
import sys,os
import time
import random
total_input_traffic = 0 
total_output_traffic = 0 
starttime=1252682400 
while 1: 
total_input_traffic = random.randrange(0, 5000) 
total_output_traffic = random.randrange(0, 5000) 
os.system("/usr/bin/rrdtool updatev /opt/rrdtool/COUNTER/eth0.rrd "+str(starttime)+":"+str(total_input_traffic)+":"+str(total_output_traffic)) 
os.system("/usr/bin/rrdtool updatev /opt/rrdtool/DERIVE/eth0.rrd "+str(starttime)+":"+str(total_input_traffic)+":"+str(total_output_traffic)) 
os.system("/usr/bin/rrdtool updatev /opt/rrdtool/ABSOLUTE/eth0.rrd "+str(starttime)+":"+str(total_input_traffic)+":"+str(total_output_traffic)) 
os.system("/usr/bin/rrdtool updatev /opt/rrdtool/GAUGE/eth0.rrd "+str(starttime)+":"+str(total_input_traffic)+":"+str(total_output_traffic)) 
if starttime>=1284218400: 
break; 
starttime+=300 
import sys,os
import time
import random
 
total_input_traffic = 0
total_output_traffic = 0
starttime=1252682400
while 1:
total_input_traffic = random.randrange(0, 5000)
total_output_traffic = random.randrange(0, 5000)
os.system("/usr/bin/rrdtool updatev /opt/rrdtool/COUNTER/eth0.rrd "+str(starttime)+":"+str(total_input_traffic)+":"+str(total_output_traffic))
os.system("/usr/bin/rrdtool updatev /opt/rrdtool/DERIVE/eth0.rrd "+str(starttime)+":"+str(total_input_traffic)+":"+str(total_output_traffic))
os.system("/usr/bin/rrdtool updatev /opt/rrdtool/ABSOLUTE/eth0.rrd "+str(starttime)+":"+str(total_input_traffic)+":"+str(total_output_traffic))
os.system("/usr/bin/rrdtool updatev /opt/rrdtool/GAUGE/eth0.rrd "+str(starttime)+":"+str(total_input_traffic)+":"+str(total_output_traffic))
if starttime>=1284218400:
break;
starttime+=300
測試結果:
a)COUNTER

rrdtool學習筆記
※為什么斷斷續續?原因很簡單,random.randrange(0,
5000)獲取的是隨機值,就存在后面value比前value值小,如公式說明:(2000-3000)/300(setup)=UNKNOWN/300=UNKNOWN
rrdtool學習筆記
※原理同上,DERIVE除了支持是遞增,也遞減。

c)ABSOLUTE
rrdtool學習筆記
※計算公式:(3000-0)/300=100,得出初值為0的絕對值再求平均。

d)GAUGE
rrdtool學習筆記
※values直接入庫,無作任何運行。

3、CDP:Consolidation
Data Point 。RRDtool
使用多個PDP合并為(計算出)一個CDP。也就是執行上面的CF操作后的結果。這個值就是存入RRA的數據,繪圖時使用的也是這些數據。

4、CF就是Consolidation
Function的縮寫。也就是合并(統計)功能。有AVERAGE、MAX、MIN、LAST四種分別表示對多個PDP進行取平均、取最大值、取最小值、取當前值四種類型。具體作用等到update操作時再說。

5、PDP:Primary
Data Point。正常情況下每個interval
RRDtool都會收到一個值;RRDtool在收到腳本給來的值后會計算出另外一個值(例如平均值),這個值就是PDP;這個值代表的一般是“xxx/秒”的含義。注意,該值不一定等于RRDtool收到的那個值。除非是GAUGE,可以看下面的例子就知道了。

6、DST就是Data
Source
Type的意思。有COUNTER、GUAGE、DERIVE、ABSOLUTE、COMPUTE5種。由于網卡流量屬于計數器型,所以這里應該為COUNTER。

7、RRA用于指定數據如何存放。我們可以把一個RRA看成一個表,各保存不同interval的統計結果

8、resolution就是每個RRA中兩個CDP相隔的時間

9、什么是
CF?
以第2個RRA和4,2,1,3這4個PDP為例
AVERAGE:則結果為(4+2+1+3)/4=2.5
MAX:結果為4個數中的最大值4
MIN:結果為4個數中的最小值1
LAST:結果為4個數中的最后一個3

三、個人理解
1、CF(N個PDP為一個刻度單位)=CDP

1、CF(N個PDP為一個刻度單位)=CDP
*只限COUNTER、DERIVE、ABSOLUTE、COMPUTE
2、N個PDP為一個刻度單位=CDP
*只限GUAGE
3、xff字段如何計算?
PDP/(PDP UNKNOWN數)
4、PDP數據如何得出?
COUNTER(接收Value)=PDP
DERIVE(接收Value)=PDP
ABSOLUTE(接收Value)=PDP
COMPUTE(接收Value)=PDP
*GUAGE除外
5、常用時間截計算(shell)
A)時間截 =>日期
引用
date -d '1970-1-1 1276059000 sec utc'
B)日期=>時間截
引用
date -d '2010-09-11 23:20' +%s
<xff=unknown 四、rrdtool create
引用
rrdtool create Flow.rrd \--start $(date -d "1 
year ago" +%s) \--step 300 \DS:eth0_in:GAUGE:600:0:5000 
\DS:eth0_out:GAUGE:600:0:5000 \RRA:AVERAGE:0.5:1:600 
\RRA:AVERAGE:0.5:6:700 \RRA:AVERAGE:0.5:24:775 
\RRA:AVERAGE:0.5:288:797 \RRA:MAX:0.5:1:600 \RRA:MAX:0.5:6:700 
\RRA:MAX:0.5:24:775 \RRA:MAX:0.5:444:797 \RRA:MIN:0.5:1:600 
\RRA:MIN:0.5:6:700 \RRA:MIN:0.5:24:775 
\RRA:MIN:0.5:444:797

RRA存儲周期計算:

1、RRA:AVERAGE:0.5:1:600
引用
(300s=5m)*1=5m*600=50h=(2.08天)2d2、RRA:AVERAGE:0.5:6:700
引用
(300s=5m)*6=30m*700=50h=(14.58天)2w3、RRA:AVERAGE:0.5:24:750
引用
(300m=5m)*24=2h*750=(64.5天)2M4、RRA:AVERAGE:0.5:288:797
引用
(300m=5m)*288=1d*797=(797天)2Y

五、rrdtool
graph
引用
rrdtool graph COUNTER/day.png -w 700 -h 200 \-n 
TITLE:11:'/opt/rrdtool/wdjt.ttf' \-n UNIT:8:'/opt/rrdtool/simhei.ttf' 
\-n LEGEND:8:'/opt/rrdtool/simhei.ttf' \-c SHADEA#DDDDDD \-c 
SHADEB#808080 \-c FRAME#006600 \-c FONT#006699 \-c ARROW#FF0000 
\-c AXIS#000000 \-c BACK#FFFFFF \-Y -X 3 \-t "服務器流量統計" -v "流量" 
\--start -1d --end now \--x-grid MINUTE:12:HOUR:1:HOUR:1:0:'%H' 
\DEF:value1=COUNTER/eth0.rrd:eth0_in:AVERAGE 
\DEF:value2=COUNTER/eth0.rrd:eth0_out:AVERAGE 
\CDEF:value3=value1,value2,+ \COMMENT:" \n" \COMMENT:" \n" 
\AREA:value1#00ff00:上傳 
\GPRINT:value1:LAST:"當前\:%8.0lf"  \GPRINT:value1:AVERAGE:"平均\:%8.0lf"  \GPRINT:value1:MAX:"最大\:%8.0lf"  \GPRINT:value1:MIN:"最小\:%8.0lf"  \COMMENT:" 
\n" \LINE2:value2#4433ff:下載 
\GPRINT:value2:LAST:"當前\:%8.0lf"  \GPRINT:value2:AVERAGE:"平均\:%8.0lf"  \GPRINT:value2:MAX:"最大\:%8.0lf"  \GPRINT:value2:MIN:"最小\:%8.0lf"  \COMMENT:" 
\n" \COMMENT:"─────────────────────────────────────────────\n" 
\LINE3:value3#ff8833:總流量 \COMMENT:" \n" \HRULE:350000#ff0000:"報警值" 
\COMMENT:" \n" \COMMENT:"\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t最后更新 \:$(date 
'+%Y-%m-%d %H\:%M')\n" -Y 
\COMMENT:"\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t天涯社區系統運維部開發與維護\n"
效果圖: rrdtool學習筆記 概念說明:
1、#分別是 
LINE1|2|3,也就是線條的粗細。

2、"--x-grid 
MINUTE:15:HOUR:1:HOUR:1:0:'%H'"說明如下:
#GTM:GST:控制次要格網線的位置。GTM 是一個時間單位,可以是 
SECOND、MINUTE、HOUR、DAY 、WEEK、MONTH、YEAR 。GST 
則是一個數字,控制每隔多長時間放置一根次要格線。例如我們要畫一個1天的圖表,決定每15分鐘一根次要網格線,則格式為 
MINUTE:15

#MTM:MST:控制主要網格線的位置。MTM 同樣是時間單位,MST 
是一個數字。接上面的例子,決定一個小時1根主要網格線。則格式為 HOUR:1

#LTM:LST :控制每隔多長時間輸出一個label 
。決定為1小時1個 label 。則格式為 HOUR:1:0(不清楚0做什么用) ,如10 11 12 
13

#LPR:LFM:LTM:LST只是決定了label的顯示位置了,沒有指定要顯示什么內容。LPR指的是如何放置label。如果LPR為0,則數字對齊格線(適用于顯示時間)。如果不為0,則會做一些偏移(適用于顯示星期幾、月份等)。至于LFM則需要熟悉一下date命令的參數,常用的有%a(星期幾)、%b(月份)、%d(天)、%H(小時)、%M(分)、%Y(年)。我們決定顯示小時和分,所以用%H%M,最好將'%H:%M'括起來,哪只顯示小時就'%H'。

3、"-Y 
-X 0 
"說明如下:
a)Y軸還有一個很方便的選項就是–Y,它可以最大限度的優化Y軸的刻度,建議每次繪圖都加上去。
b)Y軸另外一個有用的選項就是–X(雖然選項名是-X,但確實是用來設置Y軸刻度值的)。在上面的圖我們看到RRDtool自動對Y軸的值進行調整,以k為單位顯示。但如果你不想以k顯示,而是想固定以某個單位來顯示(M,b)該怎么辦呢?這就要用到–X選項了。-X后面跟一個參數,參數值范圍是-18、-15、-12、-9、-6、-3、0、3、6、9、12、15、18。0表示以原值顯示,3表示數值除以1000,也就是以k為單位顯示,6就是以M顯示,9就是以G顯示,12則T。如果你給出1或者2,則RRDtool也可以接受,但會被“靜悄悄”的改為0。下面就是一個以原值(-X0)顯示原始數據,100k顯示 
為100000。

4、字體參數說明

引用
-n TITLE:12: 
simhei.ttf    #修改top標題字體-n  AXIS:8: simhei.ttf    #修改X軸數據字體,如01 02 03 
04...-n  LEGEND:10: simhei.ttf  #修改數字報表字體,如最大、最小、平均值及其它-n  UNIT:8: 
simhei.ttf    #修改Y軸標題字符,如"流量"-n  WATERMARK:8: 
simhei.ttf    #數據區右則字體,如"RRDTOOL-TOBIOETIKER"5、HRULE:100000#ff0000:"報警值"繪制一根水平線,在 
100k 處畫一根水平線,并指出這是報警值6、COLOR參數說明
引用
-c SHADEA#CCCCCC  #左上邊框color-c 
SHADEB#000000  #右下邊框color-c FRAME#EEEEEE  #數據標志說明邊框color,如"上傳"左邊的小正方形。-c 
FONT#006699    #圖形所有字體color-c ARROW#FF0000  #兩個箭頭color-c 
AXIS#FF0099    #兩條箭頭線color-c BACK#FFFFFF    #圖形背景(不含數據區)color-c 
CANVAS#000000   #圖形數據區背景color-c MGRID#ee2359  #主網格線color-c 
GRID#FF0000    #次網格線color

轉自:http://blog.liuts.com/post/215/#entrymore</xff=unknown

原創文章,作者:s19930811,如若轉載,請注明出處:http://www.www58058.com/1267

(0)
s19930811s19930811
上一篇 2015-03-20
下一篇 2015-03-21

相關推薦

  • 封裝和結構及set

    封裝|set

    Linux干貨 2017-10-09
  • 馬哥教育網絡班21期+第8周課程練習

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 集線器(HUB)是在OSI模型的第一層——物理層——連接多臺主機、延長網絡的設備。其主要功能是將從一個端口接收到的數據包轉發給所有端口。中繼器(Repeater)是將由電纜傳過來的電信號或光信號調整波形和放大再傳給另一個電纜的設備,提供多端口服務的中繼器稱作集線器。二者的主要區別…

    Linux干貨 2016-09-05
  • 第三周作業

      1. 列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# who | cut -d' ' -f1 | sort -u root 2. 取出最后登錄到當前系統的用戶的相關信息。 [root@localhost ~]# who | tail -1 roo…

    Linux干貨 2016-12-26
  • varnish淺述

    安裝varnish,安裝包需要到官網下載http://www.varnish-cache.org/releases/index.html varnish的程序環境: /etc/varnish/varnish.params:配置varnish服務進程的工作特性,例如監聽的地址、端口及緩存機制等; /etc/varnish/default.vcl:配置各Chil…

    2016-11-15
  • 游戲運維工程師

    愛樂盟互動為深圳市政府評定的深圳市重點文化企業,同時為廣東省高科技產業商會常務理事單位,注冊資金人民幣1000萬元。公司的原創大型MMORPG網游《王者傳說2》為深圳市政府重點支持的網游項目,《王者傳說2》將全面領先于國內的同類產品,成為業界新標準的重要網游產品??! 《王者傳說2》已進入產品研發的重要階段。除《王者傳說2》,愛樂盟也已經啟動了數款全新大型網游…

    Linux干貨 2016-10-19
  • Linux終端類型

    Linux中各種終端的解釋 設備終端   鍵盤鼠標顯示器 物理終端( /dev/console ) )   在Linux 系統中,計算機顯示器通常被稱為控制臺終端(Console)。 虛擬終端(tty :teletypewriters, /dev/tty# # 為[1-6])   tty 可有n 個,Ctrl+Alt+…

    Linux干貨 2016-10-13
欧美性久久久久