SNMP和rrdtool詳解介紹

來源:互聯網
上載者:User

snmp全稱simple network manage protocol,snmp能夠通過簡單的命令擷取遠程主機上的服務狀況,以實現對遠程服務的監控。snmp至今經曆了3個版本,snmpv1,snmpv2,snmpv3。snmp簡單工作原理就是監控端的一台主機向被監控端的一台主機發出命令,被檢控端的主機在本機上安裝服務能夠識別到監控端主機發過來的命令並給予反饋資訊。由於這種監控的局限性,保證被監控端的主機只識別指定主機發來的監控資訊,雙方需要建立識別的資訊,這就是communite的作用。在snmpv1版本中提供了3種communite方式,分別是read-only,read-write和trap。read-only就是監控端只能接受到被監控端發過來的資訊;read-write就是監控端可以直接操作被監控端的主機,例如關機等操作;trap就是被監控端可以主動發出資訊告知監控端來監控自己。snmpv2相對於v1版本在功能上做了強大的改動,但準系統並沒有改變。snmpv3版本在認證方面做了更加安全的防範措施,並且在資料轉送方面也大大增強了其安全性。但是,目前使用的最多的依然是snmpv1的版本。

snmp有一個非常重要的概念就是MIB(management infromation base),全稱管理資訊庫。它是網路管理資料的標準,在這個標準裡規定了網路代理程式裝置必須儲存的資料項目,資料類型,以及允許在每個資料項目中的操作。所有資料採用樹形結構儲存。當前廣泛使用的是第二版MIB,稱為MIB-II。任何一台主機都會提供一個MIB-II。

NMS = Network Management System網路管理系統。是SNMP中的控制端,也是網路管理的發起者。Agent代理,為被管理的裝置提供SNMP的能力,負責裝置與NMS的通訊。

關於snmp的軟體包有兩個,一個是net-snmp和net-snmp-utils,前面那個是被監控端需要用到的工具,後面那個是監控端用到的命令。但是如果監控端需要用到trap功能的時候,在監控端上還需要裝net-snmp這個包才行。由於下面的功能全是在本機上介紹的。所以直接把這兩個包全部裝在本機上。yum install net-snmp net-snmp-utils。可以使用rpm -ql net-snmp查看安裝snmp時所裝的所有檔案。使用netstat -tunpl | grep snmp可以發現snmp監聽在tcp的199和udp的161連接埠上。如果監控端還要啟動trap功能的話,還需要把snmptrapd這個伺服器啟動起來。service snmptrapd start。snmptrapd預設監聽在udp的162連接埠上面。可以通過snmpwalk -v 2c -c public localhost來對一個主機上資源擷取伺服器上的資源狀況。snmpwalk的支援的命令和參數非常多,可以擷取到的資源狀況也非常多。

snmp的預設設定檔在/etc/snmp/snmpd.conf檔案中。這個檔案中有如下的資訊可以改變指定監控的主機和community:

#sec.name source community

com2sec notConfigUser default public

預設就是允許所有的主機通過這個public到我們的主機上進行監控,顯示這是不安全的做法,因為是本機自己監視自己,所以可以改成:

com2sec notConfigUser 127.0.0.1 qiguopublic ,而所有的mibs庫全部放在/usr/share/snmp/mibs/目錄下面。

RRDtool是指Round Robin Database 工具(環狀資料庫)。Round robin是一種處理定量資料、以及當前元素指標的技術。想象一個周邊標有點的圓環,這些點就是時間儲存的位置。從圓心畫一條到圓周的某個點的箭頭,這就是指標。就像我們在一個圓環上一樣,沒有起點和終點,你可以一直走下去。過來一段時間,所有可用的位置都會被用過,該迴圈過程會自動重用原來的位置。這樣,資料集不會增大,並且不需要維護。我們使用RRDtool來處理RRD資料庫。使用它向RRD資料庫儲存提取資料。通過對RRDtool工具的使用可以繪圖來達到流量圖監控的目的。
rrdtool在linux上是不內建的,需要自己手動安裝,這裡我們採用源碼包的方式來安裝rrdtool。準備的軟體包是rrdtool-1.4.5.tar.gz。下面開始安裝過程:
tar xf rrdtool-1.4.5.tar.gz
cd rrdtool-1.4.5
./configure --prefix=/usr/local/rrdtool
make && make install
為了使用的方式。把/usr/local/rrdtool/bin加如path環境變數
vi ~/.bash_profile
加上PATH=$PATH:$HOME/bin:/usr/local/rrdtool/bin
source .bash_profile重新讀取設定檔

下面是使用RRDtool的一些常用選項,通過這些選項便可產生繪圖。

1.使用rrdtool建立各種類型、特性的RRD環型資料庫
rrdtool create filename [--start|-b start time] [--step|-s step] [DS:ds-name:DST:dst arguments] [RRA:CF:cf arguments]
這個文法的作用是建立一個初始化的rrdtool資料庫檔案;filename就是要建立的檔案的名稱;--start time設定rrd資料庫加入第一個資料時的時間,預設是10秒前;--step step時間跨度,表示每隔多少時間接受一個資料;DS指定一個資料來源,一個資料來源可以彙總多次;RRA指定如何做彙總,歸檔的。
DS:ds-name:DST:dst arguments具體介紹如下:
DS固定格式,表示資料來源;
ds-name資料來源的名稱,這個名稱要唯一,並且最長最多隻能19個字元
DST資料來源的類型,資料來源的類型有GAUGE,COUNTER,DERIVE,ABSOLUTE,COMPUTE5個參數
GAUGE表示初A始值,儲存一個資料原來的值,不做任何改變
COUNTER表示相對值,通常都是相對上一個資料的值,而且必須比上一個資料的值要大。
DERIVE給COUNTER一樣,但是沒有counter的限制
ABSOLUTE根據原始值來取得一個相對的值
COMPUTE用於存放對RRD中的其他資料來源進行公式計算的結果
dst arguments資料來源類型的參數,預設有3個參數heartbeat,min,max
heartbeat表示當資料到來的時候,最長多少時間內認為其是對應槽內的資料
min表示儲存到來的資料的最小值,如果不知道最小值預設可以使用U
max表示儲存到來的資料的最大值,如果不知道最大值預設可以使用U

RRA:CF:cf arguments具體介紹如下:
RRA關鍵字
CF彙總函式,有4種彙總的類型,AVERAGE、MIN、MAX、LAST。分別表示平均,最小,最大,當前。
cf arguments彙總函式的參數,預設格式為xff:steps:rows
xff表示指定unknown的比例為多大時候,把他定義為unkown
steps表示彙總函式對幾個PDP做一次彙總
rows表示一共儲存多少個彙總的結果
例:
rrdtool create test.rrd --step 5 DS:qiguo:GAUGE:8:U:U RRA:AVERAGE:0.5:1:17280 RRA:AVERAGE:0.5:10:3456 RRA:AVERAGE:0.5:100:1210
上例設定了一個名為 test.rrd的RRD,它每5秒接收一個隨機值。如果超過8秒沒有提供資料,值變為*UNKNOWN*。其可以接受任何的值。本例中同時還定義了幾個歸檔區。第一個RRA歸檔區儲存1天內的隨機值(17280*5)。第二個RRA儲存兩天內的平均值(3456*10 *5),第三個儲存一周內的平均值(100*5*1210)
rrdtool info test.rrd可以查看test.rrd的具體內容。
2.為rrd環型資料庫提供資料:
rrdtool {update | updatev} filename [--template|-t ds-name[:ds-name]...] N|timestamp:value[:value...] at-timestamp@value[:value...] [timestamp:value[:value...] ...]
filename為要更新的RRD資料庫的名稱。
--template|-t ds-name[:ds-name]... :-t ds-name要更新RRD資料庫中資料來源的名稱
N|timestamp:value[:value...]:時間:要更新的值...

例:
while true;done
rrdtool update test.rrd N:$RANDOM
sleep(5);
done
rrdtool fetch -r 5 test.rrd AVERAGE可以查看為rrd環形資料庫產生的資料
-r表示多少時間產生一次資料
3.繪製rrd環型資料庫中的採集到的資料
rrdtool graph filename [option ...] [data definition ...] [data calculation ...] [variable definition ...]
[graph element ...] [print element ...]
filename 要繪製的圖片名稱
Time range時間範圍
[-s|--start time]啟始時間
[-e|--end time]結束時間
[-S|--step seconds]步長
[-t|--title string]圖片的標題
[-v|--vertical-label string] Y軸說明
[-w|--width pixels] 顯示區的寬度
[-h|--height pixels]顯示區的高度
[-j|--only-graph]只繪製映像
[-u|--upper-limit value] Y軸正值最大值
[-l|--lower-limit value] Y軸負值最小值
[-r|--rigid]固定Y軸的值,不進行縮放
[-A|--alt-autoscale]自動縮放
[-J|--alt-autoscale-min]只自動縮放最小值
[-M|--alt-autoscale-max]只自動縮放最大值
[-N|--no-gridfit]不顯示網格線
[data definition ...]data and variables擷取畫圖的資料,格式如下:
DEF:vname=rrdfile:ds-name:CF[:step=step][:start=time][:end=time]
vname定義一個變數儲存資料
rrdfile就是前面產生的rrd檔案
ds-name就是資料來源的名稱
CF就是彙總函式
step表示每過多長時間擷取資料
LINE[width]:value[#color][:[legend]]
LINE指定畫線條圖,預設使用LINE1
value表示以前面DEF定義的變數vname為值進行畫圖
color表示畫出來的圖的顏色
legend表示對應圖下面的文本資訊
例:
rrdtool graph qiguo.png -s 1400129745 -t Test -v YTest DEF:mytest=test.rrd:qiguo:AVERAGE:step=5 LINE1:mytest#FF0000:testline
註:這裡的1400129745是通過上面rrdtool fetch根據觀察而產生的時間戳記數字
上述執行個體就產生了一個從timestamp開始的一個名為qiguo.png的線條圖。圖片如下:

但是圖片只有一條資訊,那麼如何在一個圖片上繪製兩條不同的線呢?
只需要繪圖的時候多產生一個繪圖資料和繪圖函數即可:
rrdtool graph qiguo2.png -s 1400130895 -t Test -v YTest DEF:mytest=test.rrd:qiguo:AVERAGE:step=5 DEF:mytest2=test.rrd:qiguo:AVERAGE:step=50 LINE1:mytest#FF0000:testline LINE2:mytest2#00FF00:test2line
圖片如下:

但是我們觀察rrdtool的官方網站的時候很多圖下面都有最大值,最小值,當前值等。那麼需要使用另一個函數GPRINT來完成。預設格式GPRINT:vname:CF:format

vname是列印那個變數對應的值<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+Q0bKx77bus+6r8r9PC9wPgo8cD5mb3JtYXTKx8/Uyr61xCYjMjY2ODQ7yr08YnI+CsD9OiA8YnI+CiAgICBycmR0b29sIGNyZWF0ZSB0ZXN0LnJyZCAtLXN0ZXAgNSBEUzpxaWd1bzpHQVVHRTo4OlU6VSBSUkE6QVZFUkFHRTowLjU6MToxNzI4MCBSUkE6TUlOOjAuNToxOjE3MjgwIFJSQTpNQVg6MC41OjE6MTcyODAgUlJBOkxBU1Q6MC41OjE6MTcyODA8YnI+CiAgICDQtNK7uPa9xbG+d2hpbGUuc2ijrMjDy/zWtNDQPGJyPgogICAgd2hpbGUgdHJ1ZTtkb25lPGJyPgogICAgcnJkdG9vbCB1cGRhdGUgdGVzdC5ycmQgTjokUkFORE9NPGJyPgogICAgc2xlZXAoNSk7PGJyPgogICAgICAgIGRvbmU8YnI+CiAgICBycmR0b29sIGdyYXBoIHFpZ3VvNC5wbmcgLXMgMTQwMDEzMzExNSAtdCBUZXN0IC12IFlUZXN0IERFRjpteXRlc3Q9dGVzdC5ycmQ6cWlndW86QVZFUkFHRTpzdGVwPTUgREVGOm1heD10ZXN0LnJyZDpxaWd1bzpNQVg6c3RlcD01IERFRjptaW49dGVzdC5ycmQ6cWlndW86TUlOOnN0ZXA9NQogREVGOmxhc3Q9dGVzdC5ycmQ6cWlndW86TEFTVDpzdGVwPTUgTElORTE6bXl0ZXN0I0ZGMDAwMDp0ZXN0bGluZSBHUFJJTlQ6bGFzdDpMQVNUOiZxdW90O2N1clw6JTYuMmxmJnF1b3Q7IEdQUklOVDptaW46TUlOOiZxdW90O21pblw6JTYuMmxmJnF1b3Q7IEdQUklOVDptYXg6TUFYOiZxdW90O21heFw6JTYuMmxmJnF1b3Q7PGJyPgogICAgICDX7tbVyfqzybXEzbzGrMjnz8Kjujxicj4KICAgICAgPGltZyBzcmM9"http://www.2cto.com/uploadfile/Collfiles/20140516/2014051608532228.jpg" alt="">



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.