Linux SNMP命令講解和應用實例

http://network.51cto.com/art/201006/208549_all.htm

Linux SNMP命令講解和應用實例



在對Linux SNMP的不斷學習中,它的一些命令設置一直是我們強調的重點內容。所以我們再來把相關的一些命令程序進行一下複習。今天將介紹Linux SNMP問題的解決方法RRD數據庫更新實例。update 命令:它使用1個或多個參數,其格式爲: : . 如果你知道可以用一個 N 表示當前的時間,你一定會高興的。或者你可以用Perl中的 time 函數來指定時間:perl: perl -e ‘print time, “\n” ‘shell: date +%s如何按照固定間隔運行某個程序各操作系統不同。不過可以用僞碼來表示:- Get the value and put it in variable “$speed”- rrdtool update speed.rrd N:$speed 就這些。每5分鐘運行一次上面的腳本。在你想知道圖像看起來是啥樣時,運行上面的例子。你可以把他們放入一個腳本中。運行此腳本後,查看我們剛纔創建的graph。

Linux SNMP相關知識

我可以想像到只有少數的人能夠每5分鐘從他們的汽車中讀取一次真實的數據。其他人不得不清算其他類型的計數器。你可以測量打印機打印的頁數,咖啡機做的咖 啡杯數,計算使用的電流的設備,都可以。

遞增的計數器可以被監視,並且用你已經學會的方法被繪製成圖像。稍後我們就能夠監視像溫度計這樣的值了。大多數對RRDtool感興趣的人會使用一個跟蹤網絡設備傳輸數據量的計數器。這樣我們下一步就來作這個。我們會從解釋如何收集數據開始。

有些人會說有些工具可以幫助你收集數據。他們是對的!不過,我感覺理解這些工具不是必須的非常重要。在你能夠確定爲什麼事情發生了錯誤,你要知道他們是如何工作的。本例中使用的工具在本文檔前面非常簡短地提到過,它就是所謂的Linux SNMP。它是與聯網設備交談的方式。下面用到的工具名爲 Linux SNMPget ,以下是關於它是如何工作的說明:

Linux SNMPget device password OID或Linux SNMPget -v[version] -c[password] device OID對於device, 你要用設備的名稱或者IP地址來替換。對於password, 你需要使用Linux SNMP領域中稱爲 comunity read string 來替換。

對於某些設備來說,缺省的 public 可以工作,但是該設置可能會被關閉,調整或者由於安全和機密的原因而被保護起來。請閱讀你的設備或程序的文檔。 接下來有一個稱爲OID的參數,它用來表示 對象標識符 。

剛開始學習Linux SNMP時,它看起來有些令人困惑。在你看到MIB管理信息基時,就不會那麼困難了。MIB是用來描述數據的倒狀樹,它有隻有一個根結 點,並且由根結點開始有多個分支。這些分支都以另一個結點終結,他們繼續向下分支,如此繼續。

所以的分支都有一個名稱,它們構成了一個我們能夠沿着往下的 路徑。我們所沿着的這些分支都被命名了:iso, org, dod, internet, mgmt 和mib-2.這些名稱也可以用數字方式記錄,就像 1 3 6 1 2 1。

iso.org.dod.internet.mgmt.mib-2 (1.3.6.1.2.1) 有些程序會使用前導點 . , 令人感到許多困惑。在一個OID中並 沒有前導點。爲了顯示OID縮記法和OID完整記法的區別,(通常約定)在使用OID的完整記法時使用前導點。

通常這些程序在返回數據給你時,會省略卻缺 省的部分。這些程序有的有幾個缺省前綴,這會讓事情顯得更加糟糕。Ok, lets continue to the start of our OID: we had 1.3.6.1.2.1 From there, we are especially interested in the branch interfaces which has number 2 (e.g., 1.3.6.1.2.1.2 or 1.3.6.1.2.1.interfaces).

好了,我們繼續OID的初步學習:我們有一個1.3.6.1.2.1的OID,我們對(其下面的) interface 分支特別感興趣,其編號爲2(例如:1.3.6.1.2.1.2 或 1.3.6.1.2.1.interface)。

首先,我們得要有幾個Linux SNMP的程序。先看看你的OS平臺上是否有已編譯好的軟件包。這是最便捷的方式。如果沒有,你就得下載源代碼、並編譯。互聯網上到處都是源代碼、程序。你可以用你喜歡的任何方式、搜索引擎來找到相關的信息。

假設你已經有了這些程序。先試着收集大多數系統都有的數據。記住:那些引起我們興趣的樹,它上面的部分都有一個簡略名。在此我會給出一個在Fedora Core 3操作系統上可用的例子。如果對你的操作系統不可用,請查看Linux SNMP的手冊,並作相應的調整讓它能夠運行。

Linux SNMPget -v2c -c public myrouter system.sysDescr.0該設備應當迴應其自身的描述,該描述可能是一個空的。只有在你從某個設備獲得響應後,你才能夠繼續。其中可能需要使用不同的口令、或者不同的設備。

Linux SNMPget -v2c -c public myrouter interfaces.ifNumber.0最好你得到的結果是一個數字。如果這樣的話,你就可以繼續往下,並試試另一個叫做 Linux SNMPwalk 的程序。Linux SNMPwalk -v2c -c public myrouter interfaces.ifTable.ifEntry.ifDescr如果該命令返回一系列的接口,這就對了。以下是該命令運行的返回結果的例子:

[user@host /home/alex]$ Linux SNMPwalk -v2c -c public cisco 2.2.1.2  interfaces.ifTable.ifEntry.ifDescr.1 = "BRI0: B-Channel 1" interfaces.ifTable.ifEntry.ifDescr.2 = "BRI0: B-Channel 2" interfaces.ifTable.ifEntry.ifDescr.3 = "BRI0" Hex: 42 52 49 30  interfaces.ifTable.ifEntry.ifDescr.4 = "Ethernet0" interfaces.ifTable.ifEntry.ifDescr.5 = "Loopback0" 對於cisco設備,我想監視 ‘Ethernet0` 接口,從上面的輸出結果能夠看到該接口的編號是 4。

我試着運行如下命令:[user@host /home/alex]$ Linux SNMPget -v2c -c public cisco 2.2.1.10.4 2.2.1.16.4

interfaces.ifTable.ifEntry.ifInOctets.4 = 2290729126 interfaces.ifTable.ifEntry.ifOutOctets.4 = 1256486519 這樣,我就有兩個OID需要監視,他們是(這次使用完整記法):1.3.6.1.2.1.2.2.1.10和1.3.6.1.2.1.2.2.1.16這兩個OID都有接口編號4。

別被糊弄了,我可不是試一次就搞定的。我花了一些數據來搞清這些數字都是什麼意思。把這些編號轉換成描述文字大有幫助… 至少在大家談論MIB和OID時,你知道他們是什麼東西。別忘了接口編號(如果它不是附屬接口,就是0),如果用Linux SNMPget沒有得到響應,試試 Linux SNMPwalk。

應用RRDtool的實例

實際運用的例子開始有趣的東東吧。首先,創建一個新的數據庫。它包含輸入和輸出2個計數器的數據。該數據被放入能夠進行平均的歸檔中。他們一次使用1、6、24、或 288個樣本。他們同時被存入保存最大數字的歸檔中。稍後會解釋。樣本間隔時間爲300秒,也就是5分鐘,這是一個好的開始。:

1個樣本 “平均” 保留5分鐘的週期  6個樣本 每30分鐘進行一次平均  24個樣本 每2小時進行一次平均  288個樣本 每1天進行一次平均 我們試着與MRTG互相兼容,MRTG存儲以下數據::

600 5分鐘樣本數: 2天和2小時  600 30分鐘樣本數: 12.5天  600 2小時樣本數: 50天  732 1天樣本數: 732天 這些範圍被補充進去,因此在數據庫中保存的數據總數大約797天。RRDtool存儲不同的數據,它不會在 每日 歸檔停止的地方開始 每週 歸檔。對於這兩個歸檔,最新的數據會是在 now 附近,因此我們需要比MRTG保存更多的數據!我們需要::

600個5分鐘的樣本 (2天和2小時)  700個30分鐘的樣本 (2天和2小時,加12.5天)  775個2小時的樣本 (上述+50天)  797個1天的樣本 (上述+732天,環型迴繞最大797) rrdtool create myrouter.rrd \  DS:input:COUNTER:600:U:U \  DS:output:COUNTER:600:U:U \  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:288:797

接下來要做的就是收集數據並把它保存起來。以下是一個例子。它是用僞碼寫的,你得根據OS調整後讓它能夠運行。:

while not the end of the universe  do  get result of  Linux SNMPget router community 2.2.1.10.4  into variable $in  get result of  Linux SNMPget router community 2.2.1.16.4  into variable $out  rrdtool update myrouter.rrd N:$in:$out  wait for 5 minutes  done 在收集了1天的數據後,試着用下面的命令創建圖像::

rrdtool graph myrouter-day.png --start -86400 \  DEF:inoctets=myrouter.rrd:input:AVERAGE \  DEF:outoctets=myrouter.rrd:output:AVERAGE \  AREA:inoctets#00FF00:"In traffic" \  LINE1:outoctets#0000FF:"Out traffic" 這會產生一個具有1天流量值的圖像。1天有24(小時)x60(分鐘)x60(秒)。我們從當前時間-86400秒開始。我們用DEF把輸入和輸出字節數定義成myrouter.rrd數據庫中的的平均值,並且繪製輸入流量區和輸出流量線。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章