系統監測的基本概念及分類:
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版本並填入相應的認證信息即可。這里不再贅述。