1. 程式人生 > >用SNMP協議實現系統監控

用SNMP協議實現系統監控

系統監測的基本概念及分類:

a.系統監測的概述:

如何對現有IT架構的整體以及細節執行情況進行科學、系統和高效地監測是目前各企業運維和管理部門一項非常重要的工作內容。隨著當前企業IT環境中伺服器、應用數量和型別的不斷地增加,運維部門需要通過科學和高效的手段儘可能詳細、實時和準確地獲取整個架構中具體到每個伺服器、每個系統甚至每個應用程式工作的細節,並且會對所獲取到的原始資料進行分析、繪圖和統計,以便為後續的效能調優、建構調整以及各型別排錯建立參考依據。

常見的監測物件基本上涵蓋了IT執行環境的方方面面,包括機房環境、硬體、網路等,而每一個方面所涉及的監測專案則種類繁多。例如對硬體環境的監測中,所涵蓋內容就會包括伺服器的工作溫度、風扇轉速等指標;針對系統環境的監測,將包括基本的作業系統執行環境,如CPU、記憶體、I/O、儲存空間使用狀況、網路吞吐量、程序數量和狀態等情況;針對具體的應用情況,涉及監測的內容可能會更多,而且也會有很多專門針對應用的指標。

相關廠商內容

相關贊助商

除了監測的內容需要儘量全面之外,同時我們還希望所使用的監測解決方案能夠靈活和具備更多擴充套件功能。例如有效地支援IT架構的變化和擴充套件,在監測量增加的情況下能夠儘可能少地佔用資源,擁有強大的事件通知機制等等。

今天本文所涉及的內容,主要是針對作業系統以及軟體環境的監測,而且尤其是針對Linux作業系統的執行情況監測。儘管目前有很多的商用軟體以及解決方案來實現相關的功能,但是實際上我們也有很多開源的解決方案可以起到相同的作用,而且效果也非常不錯。下面的內容中,我們將會對這些解決方案的實現方法進行詳細描述。

b.基於Linux上系統監測的基本原理以及種類:

在Linux系統上的系統監測所採用的方式基本上有兩種:

第一種,通過SNMP協議結合資料採集軟體來實現:

這種方法所涉及的架構一般包括兩部分,其中一部分是被監測伺服器,另外一部分則是網管工作站。至於實現方法具體來說就是在Linux伺服器上啟動SNMP簡單網路管理協議的程序snpmd來動態提供伺服器在軟體甚至硬體各方面的執行引數,這樣伺服器就成為了一個被監測的節點。然後在其他的網管工作站上的客戶端軟體應該具備兩個功能:採集SNMP資料以及彙總統計資訊。在絕大多數情況下,網管工作站上的監測軟體都會基於Web頁面方式提供系統執行狀態圖,而且涵蓋了各種執行指標。同時新的狀態資訊能夠動態更新到Web頁面。

這種型別的監測所獲得的資料格式標準而且全面,配置簡單,所以從綜合監測的角度看是一個不錯的方案。

第二種,通過編寫指令碼呼叫系統狀態監測的命令,並結合資料採集軟體來實現:

在某些情況下SNMP協議的配置會相對比較麻煩,而且獲取SNMP資訊往往需要考慮選擇不同的監測軟體。從另外一個角度講,其實Linux作業系統本身就提供了很多非常好用的狀態獲取工具,如sar(可實現多個指標的監測),iostat(專用於I/O使用率監測),vmstat(專用於cpu和記憶體使用情況監測)以及free命令等工具。這些工具都可以通過結合系統任務計劃以及自編指令碼進行週期性呼叫,這就給監測提供了相當的便利。因為可以將這些命令嵌入到指令碼中以週期性生成系統監測軟體所需要的資料,最終一樣可以通過這些資料結合繪圖軟體繪製出直觀的統計圖。這種型別的監測所獲得的資訊更加靈活和精確,對於一些熟悉指令碼程式設計的使用者來說,使用起來更是得心應手。

另外採用這種方式的情況下,利用命令監測可以無限制擴充套件,使用者可以通過各種管道來獲得和定製自己的監測指令碼。

所以綜上所述,這兩種監測方案各有優勢。因此我們會在下文中針對兩種方案各提供一些案例和操作方法由易到難分別進行說明和演示。

各種系統監測手段在企業中部署和實現方法:

a.snmp協議的配置以及在Linux下和Windows上的測試方法:

首先我們來介紹一下第一種方法,即通過SNMP協議和資料採集軟體來實現的系統執行監測方案。因為在相當多的情況下絕大多數企業都傾向於選擇通過SNMP來獲取伺服器執行的各種資訊,畢竟因為SNMP協議是業界實現監測的重要標準。

因此我們花點時間來介紹一下SNMP協議的基本概念以及工作原理。

簡單網路管理協議SNMP是一種廣泛用於監測網路裝置(計算機、路由器)甚至其他裝置(例如UPS)的網路協議,也是專門設計用於在IP網路管理網路節點(包括伺服器、工作站、路由器、交換機及 HUBS 等)的一種標準,屬於應用層協議。SNMP使網路管理員能夠管理網路效能,發現並解決網路問題以及規劃網路增長。通過 SNMP 接收隨機訊息(及事件報告),網路管理系統將獲知網路出現的各種問題。

SNMP 管理的網路有三個主要組成部分:被管理的裝置(Managed Device)、代理(Agent)和網路管理系統(Network Management Station即NMS)。

被管理的裝置是一個網路節點,包含ANMP代理並處在管理網路之中,有時也稱為網路單元,用於收集並存儲網路資訊,通過SNMP、NMS能得到這些資訊。被管理的裝置可能是路由器、訪問伺服器,交換機和網橋、HUBS、主機或印表機等。

SNMP代理是被管理裝置上的一個網路管理軟體模組。SNMP代理擁有本地的相關管理資訊,並將他們轉換成與SNMP相容的格式。

NMS執行應用程式以實現監測被管理裝置。此外,NMS還為網路管理提供了大量的處理程式及必須的儲存資源。任何受管理的網路至少需要一個或多個NMS。

目前,SNMP有3種不同的版本:SNMPv1、SNMPv2和SNMPv3。第1版和第2版沒有太大差距,但SNMPv2是增強版本,包含了其他協議操作。前兩種snmp協議主要使用基於團體名稱(community)的方式來實現網管工作站對代理的訪問認證,與前兩種相比SNMPv3則包含更多安全機制和遠端配置手段,在認證方面可以使用基於某種對稱和非對稱加密協議來加密的使用者名稱和密碼來實現網管工作站對代理的訪問認證。而且為解決不同SNMP版本間的不相容問題,RFC3584定義了三者共存策略。

另外SNMP協議包括了四種基本的動作:

Get:

如果網路管理系統需要獲得被監測的裝置資訊,則會執行get動作。

GetNext:

如果要獲得的某個專案資訊是一個專案列表中多個專案之一,網路管理系統會執行getnext獲得相關所有專案資訊。

Set:

網路管理系統使用set命令來改變被管理專案的某個值。

Trap:

如果被管理裝置需要通知網路管理系統某些資訊,需要執行trap命令。

最後需要說明的一點是在Red Hat Enterprise Linux中已經提供了SNMP相關的所有軟體包,在這些軟體包中提供了全部的MIB資訊,資訊檔案儲存於/usr/share/snmp/mibs。所謂MIB是關於某個裝置層次化的資料庫(Management Information Base)。而且對於這個裝置的每個值都採用唯一的Object Identifier即OID表示,OID格式包括可用名稱,字首或者數字。

如果在系統中安裝了net-snmp-utils包,則snmp中的MIB和OID資訊可以通過snmptranslate命令來顯示出整個MIB樹以及其上OID的資訊(如圖所示)

snmptranslate主要用於轉換以文字名稱或者數字ID顯示的OID資訊以及列出snmp的MIB結構樹。

剛才我們已經用不少的篇幅介紹了SNMP簡單網路管理協議的基本原理和組成。現在我們即將以紅帽最新 的企業版作業系統Red Hat Enterprise Linux 5 Update 8(簡稱RHEL 5u8)為例來演示如何配置和實現SNMP服務。

在RHEL 5u8中提供了一個叫做net-snmp的rpm包,net-snmp是在IPv4和IPv6上執行SNMP的v1,v2和v3版本協議的一組程式。

需要特意說明一下的是,由於在大多數環境下針對企業應用都會使用穩定版本的Red Hat Enterprise Linux作業系統,所以後面所有操作所使用的Linux平臺也都是RHEL,但是那些對技術體驗感興趣的使用者也可以使用Fedora 或者其他型別的Linux發行版來實現上述所有的操作。

在該例子中,假設伺服器192.168.1.10是被監測的系統,我們將在其上分別配置和啟用基於v1和v3版本的snmp服務,而另外一臺主機192.168.1.100權充當管理工作站,並且用snmp命令來獲得被監測系統的詳細資訊。

在伺服器192.168.1.10上,基本資訊如下圖所示(如圖所示)

首先配置v1版本的SNMP協議:

掛載DVD安裝光碟,並從光碟中安裝snmp相關的軟體包:lm_sensor,net-snmp,snmp-utils。關於net-snmp包的作用剛才已介紹,而至於net-snmp-utils主要提供了使用snmp協議管理網路的一系列工具 (如圖所示)。

裝完所需要的軟體包之後,我們可以直接修改snmp的主配置檔案/etc/snmp/snmpd.conf並重啟服務來直接啟用SNMPv1。所做的修改如圖所示:(如圖所示)。

採用SNMPv1版本的重要標誌之一就是使網路管理裝置訪問代理時需要使用基於Community的團體的驗證方式。這裡的Community使用預設的public,當然也可以根據自己的需求去修改為任意一個字串。完成之後儲存該檔並執行命令重啟服務:

# service snmpd start                               [ Enter ]
# chkconfig snmpd on                                [ Enter ]

為了監測是否能夠正確獲得整個系統中每個MIB的OID值,可以執行snmpwalk命令以獲得響應的結果(Screenshot07.png),snmpwalk命令可通過snmp的GETNEXT動作自動獲得MIB樹上的管理資訊。例如,在這種情況下執行如下資訊,表示獲取全部mib和oid資訊:

# snmpwalk –v1 –cpublic 192.168.1.10                    [ Enter ]

至此為止,被監測物件上的snmp就算配置完成了。為了說明結果,我找了一個運行於Windows的作業系統上的利用snmp協議的監測軟體來看看效果。在Windows平臺上能夠實現該功能的軟體有很多,例如Whatsup,Solawins等等。這裡以Whatsup為例,我的監測主機上作業系統選用的是Windows Server 2003 Enterprise Edition。IP地址是192.168.1.100。按照圖示的步驟安裝Whatsup軟體,方法很簡單,只要秉承Windows軟體的安裝風格——一路回車即可搞定(如圖所示)。

由於我安裝的是一個30天的免費試用版本,所以需要在啟動產品的時候選擇“Activate Later”(如圖所示)

並且在“Device Discovery Method”中選擇“IP Range Scan”(如圖所示)。

之後起始地址都填入被監測裝置的地址192.168.1.10(如圖所示)

按照在/etc/snmp/snmpd.conf檔中的內容輸入團體名稱“public”按照下圖確定掃描內容並開始掃描,掃描時間需要根據裝置的數量決定(如圖所示)。

在“Action Policy Selection”中選擇“Do Not Apply an Action Policy”並結束掃描(如圖所示)。

最後通過“Report View”標籤選擇“Device Reports”並最終獲得所有裝置的Health狀況(如圖所示)。   

在眾多的系統監測軟體中Whatsup的功能相對比較強大,而且設定方便,介面友好。在很多企業的服務監測中是一個不錯的選擇,而且Whatsup的其他檢視模式和功能也比較多。至於其他的例如Solawins等類似的軟體,在配置方面的步驟基本大同小異,所以這裡就不花時間詳述了。

在使用v1版本的SNMP協議之後,下面我們將介紹如何配置和使用v3版本的SNMP協議來實現相同的效果: 與v1版本的SNMP協議不一樣,v3版本最重要的特徵是更強的安全性。實際上v1版本的SNMP在安全性方面是有一些欠缺的,因為v1版本的團體資訊在網路上是以明文形式傳送的。因此v3版本不再使用明文的團體資訊來實現認證,而是採用對稱或者非對稱加密方式加密使用者名稱和密碼實現認證。所以安全方面自然要比v1版本的高很多,不過在配置方面也顯然會比v1版本的更加麻煩。所幸的是系統自帶的net-snmp-utils工具包為我們準備了另外一個強有力的SNMP配置工具——net-snmp-config,因此一般使用者仍然可以通過他非常方便地實現v3版本的SNMP配置。下面是配置方法:

我們先切換到光碟,由於net-snmp-config工具由net-snmp-devel包提供,所以在安裝一系列依賴包包括beecrypt,elfutils-devel,elfutils-devel-static後,最後還是要安裝net-snmp-devel包。之後將snmpd服務停止並備份其主配置檔案,然後執行命令:

# net-snmp-config --create-snmpv3-user -A 12345678 -X 12345678 -a MD5 -x DES admin [ Enter ]

關於這條命令使用的引數說明如下:

--create-snmpv3-user [-A authpass] [-X privpass] [-a MD5|SHA] [-x DES|AES] [username]

該命令執行之後將自動建立新的配置檔案snmpd.conf,而內容也十分簡單。只有使用者名稱和許可權,而關於認證方式的資訊則會儲存在系統/var/net-snmp/snmpd.conf檔案中(如圖所示)。

最後重啟snmpd服務,並再次用snmpwalk指明通過v3的認證方式獲取MIB上的OID資訊(如圖所示)。

命令是:

# snmpwalk -v3 -u admin -l auth -a MD5 -x DES -A 12345678 -X 12345678 192.168.1.10          [ Enter ]

如果要驗證配置的資訊是否OK,還是可以通過Windows下的Whatsup來監測資訊,步驟基本上和上例一樣,只不過更改一下SNMP版本並填入相應的認證資訊即可。這裡不再贅述。