- 論壇徽章:
- 0
|
ONJava.com -- JDMK 和遺留信息技術(shù)管理 JDMK 和遺留信息技術(shù)管理作者
Stephen B. Morris
譯者
墩子
02/16/2005
鞏固、集成、重構(gòu)和移植是當今流行的標語式詞匯。它們反映了一個除舊迎新的過程--舊者不是從本質(zhì)上被更改就是被新者替代而棄之一旁。然而,在許多情況下,我們還是無法擺脫舊的設(shè)備和軟件。不得不繼續(xù)從老掉牙的基礎(chǔ)結(jié)構(gòu)中提取更多的服務(wù),以及負責它們的管理。
Java 動態(tài)管理工具包 (Java Dynamic Management Kit, JDMK)
是一個用于創(chuàng)建基于 Java 的管理軟件和基于 SNMP 的遺留系統(tǒng)的框架。它是對
Java 管理擴展
(Java Management Extensions,JMX) 的擴展,JMX 允許分析程序通過網(wǎng)絡(luò)實現(xiàn)對資源的遠程監(jiān)視。
下文中的一個文件包含一個受管對象的列表,這些對象可以被 JDMK 代碼引用。下表摘錄了部分 RFC1213_MIBOidTable.java 文件。(本文的所有代碼都可以從
資源
部分直接下載。)此文件是根據(jù)另一標準的
MIB
文件生成的。
//感興趣的受管對象的元數(shù)據(jù)(Metadata)定義new SnmpOidRecord("ifInOctets", "1.3.6.1.2.1.2.2.1.10", "C"),new SnmpOidRecord("ifLastChange", "1.3.6.1.2.1.2.2.1.9", "T"),new SnmpOidRecord("ifOperStatus", "1.3.6.1.2.1.2.2.1.8", "I"),每個 SnmpOidRecord 中的符號都可以通過網(wǎng)絡(luò)管理軟件直接訪問。也是我們管理網(wǎng)絡(luò)設(shè)備的接口。
稍后,我們將探索 JDMK 關(guān)于遺留設(shè)備管理的一些獨道之處。我們將了解到,使用 JDMK 制造單項級別的管理工具是一種簡單、省錢的方法。這些工具可以幫助 IT 管理者加深對網(wǎng)絡(luò)原理和網(wǎng)絡(luò)服務(wù)的認識。
另外還介紹了,使用適配器模式作為訪問 JDMK API 的方法。這增加了我們使用標準 API 的抽象級別。
寒酸的遺產(chǎn)
想象您被提升為只有兩名手下的網(wǎng)管。負責四個部門共 200 人的所有計算機設(shè)備。部分任務(wù)還聯(lián)系到公司局域網(wǎng)、電話系統(tǒng)支持、PC 升級、應(yīng)用程序開發(fā)、服務(wù)器等等;旧习怂芯W(wǎng)絡(luò)任務(wù)。
讓我們假設(shè)圖 1 是您所負責的網(wǎng)絡(luò)。
![]()
圖 1. 一個企業(yè)網(wǎng)絡(luò)
在圖 1 中,我們看到一個三層建筑的設(shè)備分布圖。 每層上的設(shè)備都連接到一個開關(guān)(正如大多數(shù)情況),這些鏈接每個具有 10 M 帶寬并終止于一個線路盒(未顯示)。 開頭的另一端連接到一個建筑層級別的開關(guān)(第一層開關(guān)為 F1,第二層為 F2,第三層為 F3)。 層開關(guān)的另一端由高速鏈接連接到一個核心開關(guān)。 它的另一端則可能連接到 WAN 或一個服務(wù)提供網(wǎng)絡(luò)。
由圖 1 我們也許會立即發(fā)現(xiàn)一些問題。 問題存在的部位是:
- Links 1, 2 , 3
- Switch Core 與層開關(guān)之間的鏈接
- 各個獨立的開關(guān)
永遠記住網(wǎng)絡(luò)的性能取決于它最脆弱的一環(huán) -- 也就是說網(wǎng)絡(luò)是非常脆弱的。 網(wǎng)絡(luò)設(shè)計者的任務(wù)就是維持服務(wù)的流量與提供信息冗余度兩者之間的平衡。 在圖 1 中,有一些弱點是可以從再次審視中改進的。 下面將著重討論通過編寫 JDMK 代碼來幫助我們了解,問題會在何時出現(xiàn)以及問題在何時將要出現(xiàn)。
門指南
IT 管理者的一項很重要的工作就是識別網(wǎng)絡(luò)的薄弱點。 這需要你與用戶和前任管理人員(如果可能)細心地交談來收集信息以及一些鼓勵信息收集的辦法。 每個網(wǎng)絡(luò)都有其不足之處! 一些網(wǎng)絡(luò)鏈接可能會時不時地過載;一兩個路由或開關(guān)可能會剝落,服務(wù)器許可也許會過期。
一位細心的前任也許會在交接時將這些至關(guān)重要的信息告訴你。 讓我們假設(shè)他是一位好心的想幫助你順利進入角色的前任。 比如說,他會提醒你“小心 Link 1 -- 它有一些堵塞,一層的用戶對此頗有微詞! 這是重要的內(nèi)部信息,我們將在稍后的 Java 編碼中使用到。
大多數(shù)情況下,網(wǎng)絡(luò)是由一些薄弱的腳本和內(nèi)部決竅組織在一起的組合體。 我在本文中想說的是,制造一個幫助維護網(wǎng)絡(luò)的 JDMK 工具是一件相當直接了當?shù)氖虑椤?當然,無法代之以一個設(shè)計優(yōu)秀、維護良好的網(wǎng)絡(luò),但即使屬于這種情況,Java 工具還是可以提供一些輔助功能。
借助標準應(yīng)用程序
HP OpenView Network Node Manager
(NNM) 提供了一個被廣泛使用的應(yīng)用程序,該程序既可以在企業(yè)網(wǎng)絡(luò)中使用也可以用于提供服務(wù)的網(wǎng)絡(luò)。 它提供了許多有用的功能,其中包括動態(tài)發(fā)現(xiàn)和映射網(wǎng)絡(luò)設(shè)備、接收通知消息以及添加自己喜歡的軟件等功能。 簡言之,NNM 提供了一個可以看見網(wǎng)絡(luò)的用戶界面。 如果您能夠使用 NNM,那么它可以提供無限的對網(wǎng)絡(luò)的發(fā)現(xiàn)和監(jiān)視功能。 如果不能,也不必失望!
實現(xiàn)高效 IT 管理的決竅落在對自動工具的選擇上。 如果你有高端應(yīng)用程序軟件,那么就使用它。 我們正跨入一個自動化計算的時代,系統(tǒng)和軟件執(zhí)行自我管理的趨勢將更為突出。 在你的 IT 管理任務(wù)中盡可能地使用軟件解決方案,才能早日踏上這一特快列車!
創(chuàng)建軟件實現(xiàn)輕松管理
使用 JDMK,我們可能創(chuàng)建用于偵聽事件和讀取設(shè)備狀態(tài)的激活信息的軟件。 在本文中,我們將著重于后者,并說明主要原則。
開始,我將編寫一個簡單的程序,用于識別一個網(wǎng)絡(luò)并確定它是否有過于擁擠的趨勢。 這將通過對此鏈接一端的接口上的 SNMP 計數(shù)器進行取樣并計算平均值來完成。 有一些標準對象是由設(shè)備上運行的 SNMP 實體維護的。 有時,SNMP 實體在默認情況下是非運行狀態(tài)(即本例中的情況),我將假設(shè)網(wǎng)絡(luò)管理員(例如,你的前任)選擇了在所有設(shè)備上運行可用的 SNMP。 讓我們描述一下對代碼的簡單要求。
我們選擇的管理要求
我們創(chuàng)建的軟件需要滿足以下簡單要求:
- 返回指定接口的操作狀態(tài)。
- 計算指定接口的流量級別。
- 確定指定鏈接是否趨于擁擠。
接口通常具有 administrative(管理性) 和 operational(操作性) 語句。 管理性語句被網(wǎng)管們廣泛使用,例如,“I want this interface to be up. (我需要這個接口向上轉(zhuǎn)行。)” 操作性語句是操作接口的語句。 試著將操作語句想象為請求語句的網(wǎng)絡(luò)應(yīng)答。 如果管理語句向上轉(zhuǎn)行,而操作語句向下轉(zhuǎn)行,那么肯定是出了問題。
我將在以太網(wǎng)中使用的接口類型,特定為 10Mbps (或 10,000,000bps)。 我將檢索一個快照,它的數(shù)據(jù)來自圖 1 中 Link 1 一端的接口上接收的流入字節(jié)數(shù)。 接著,過一段時間并檢索同一計數(shù)器的值。 兩者之間的不同就是我們要利用的值。 現(xiàn)在,讓我們來看一些源代碼。
源代碼
我使用的 Java 類是 RequestData。 它包括一個 main() 方法,并使用以下 JDMK 資源:
import com.sun.management.snmp.SnmpDefinitions;import com.sun.management.snmp.SnmpOid;import com.sun.management.snmp.SnmpVarBindList;import com.sun.management.snmp.manager.SnmpPeer;
開始,我對 SNMP 管理 API 進行了初始化。 以便對上文提到的生成表進行訪問。
final SnmpOidTableSupport oidTable = new RFC1213_MIBOidTable();SnmpOid.setSnmpOidTable(oidTable);
接下來,我創(chuàng)建了一個 SnmpPeer 對象。 它表示我們要與之通信的實體。 請注意,它將傳入的端口作為命令行參數(shù)使用。
final SnmpPeer agent = new SnmpPeer(host, Integer.parseInt(port));
現(xiàn)在必需創(chuàng)建一個與遠程實體的通信會話。 這需要我們指定 SNMP 通信字符串。 這些數(shù)據(jù)元素將用于與 agent 關(guān)聯(lián)。
final SnmpParameters params = new SnmpParameters("public", "private");agent.setParams(params);
我們就要成功了! 現(xiàn)在必需構(gòu)建會話以管理請求數(shù)據(jù),并準備好創(chuàng)建請求數(shù)據(jù)列表(或等效的捆綁列表)。
final SnmpSession session = new SnmpSession("SyncManager session");session.setDefaultPeer(agent);final SnmpVarBindList list = new SnmpVarBindList( "SyncManager varbind list");
該程序是一個構(gòu)建了 SNMP 請求消息的單個 JDMK 類。 該消息使用以下代碼指定了四個對象:
// 對主機設(shè)備的描述list.addVarBind("sysDescr.0");// 接口 1 上的操作性語句list.addVarBind("ifOperStatus.1");// 接口 1 上傳入的 octets 的數(shù)量list.addVarBind("ifInOctets.1");// 接口 1 的速度list.addVarBind("ifSpeed.1");
四個請求對象被打包到一個 SNMP getRequest 消息中,并按如下方式發(fā)送給接收實體:
SnmpRequest request = session.snmpGetRequest(null, list);
現(xiàn)在,我們兩次收到了相同的對象集;使用以下代碼計算兩者的時間差:
// 計算消息間隔時間long oldTime = date1.getTime();long newTime = new Date().getTime();long elapsed = (newTime - oldTime) / MS_DIVIDEND;println("Elapsed time in seconds " + elapsed);
在本部分中,將獲取一個最近的時間,并使之減去前一檢索中記錄的時間值。 這樣便可以粗略地估計出數(shù)據(jù)樣品間的時間消耗。
顯示返回的值時,可以看到以下主要元素:
Value : 25625, Object ID : 1.3.6.1.2.1.2.2.1.5.1 (Syntax : Gauge32)Value : 10000000>> Press Enter to resend the request.Elapsed time in seconds 16Value : 26005, Object ID : 1.3.6.1.2.1.2.2.1.5.1 (Syntax : Gauge32)Value : 10000000
三個粗體顯示的項表示 ifInOctets 對象的兩個值具有 16 秒的間隔時間。 選擇的接口(支持速度為 10,000,000bps)在 T1 時間接收到 25625 octets (或字節(jié)),T2 時間接收到 26005 octets。 要確定傳入鏈接的使用率,需要用到以下公式:
Incoming Link % Utilization = ((T2 octets - T1 octets) * 8 * 100) / (ifSpeed * Sample speed)
計算出的使用率為 (26005 - 25625) * 8 * 100/(10,000,000 * 16) = 0.0019%。
顯然,該接口在傳入端的負載很輕。 可以在傳出端進行類似的測量(使用 ifOutOctets 對象)。 然后,把兩個值相加確定是否過載。 很明顯,進行任何數(shù)值計算都需要特別的小心(瞬時數(shù)據(jù)的快照變化非?),但還是可以利用它們在接口上的負載量作細微的觀察。
對負載情況細心地進行一天的觀察,也許會發(fā)現(xiàn)為什么離職的前任網(wǎng)管要提醒你注意 Link 1。不管是什么情況,這都意味著你正在開始了解網(wǎng)絡(luò)的秘密。 將這個方法應(yīng)用到網(wǎng)絡(luò)的其他區(qū)域,定會幫助從中加強認識。
運行例子
要運行程序,需要安裝
JDMK
。 可以從 Sun Microsystems 下載免費評估版本,該版本將在 90 天后過期。 所以不要肆意運行這些代碼! 再者,如果你中過幾次彩票的話,可以試著購買 JDMK。
對于其他情況,按照 examples\current\Snmp\Manager\ReadMe 文件中的介紹操作,其中的例子應(yīng)該可以順利地編譯和運行。 我使用 JDMK 5.1 版本。 另外,在我的
Network Management, MIBs & MPLS: Principles, Design & Implementation
-- 不需要中彩票就買得起 -- 一書中還提到了一些更詳細和深入的信息!
謹記:使用模式
強烈推薦使用適配器模式來隱藏 JDMK API 的復(fù)雜信息。 嚴格地說,JDMK 本身不是十分復(fù)雜,但它是專用的。 出于這個原因,不要讓應(yīng)用程序代碼調(diào)用其 API 就變得重要起來。 適配器為完成這一設(shè)計目標提供了一個有用的模型。
適配器用于向應(yīng)用程序代碼說明 JDMK (或其他)技術(shù)的詳細信息。 你的代碼將調(diào)用適配器,而不是直接使用 JDMK 接口。 所以,如果你從 JDMK 轉(zhuǎn)向使用別的技術(shù),更改代碼所需的時間也會被大大地縮短。
一些設(shè)計模式的書中介紹了有關(guān)適配器模式的詳細信息以及其應(yīng)用程序,例如 O'Reilly 的
Head First Design Patterns
。
總結(jié)
對遺留系統(tǒng)及其設(shè)備的支持是一項困難而艱巨的任務(wù),特別是 IT 預(yù)算和人員水平急劇壓縮的情況下。 然而,具有冒險精神的 Java 開發(fā)者不會懼怕任何挑戰(zhàn)! 利用網(wǎng)絡(luò)管理和 SNMP 的一些簡單概念,可以快速創(chuàng)建強大的基于 JDMK 的軟件工具。 這些工具可以用于監(jiān)視網(wǎng)絡(luò)問題的方方面面,同時你也會獲得更多有趣的任務(wù)。 它們還可能幫助你解決久而未決的疑問。
希望對捕獲消息、創(chuàng)建自己的 agent 和 menager、使用瀏覽器訪問管理界面等 JDMK 功能的介紹能夠起到拋磚引玉的作用。需要提醒的是,我們一方面看到的是網(wǎng)絡(luò)管理在概念上的簡單性,另一方面是網(wǎng)絡(luò)運行中潛在的無限復(fù)雜性。 JDMK 為促進這兩個方面提供了一片肥沃的土壤。
資源
Stephen B. Morris
s the CTO of
Omey Communications
, in Ireland.
返回
ONJava.com
.
本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u/21951/showart_230807.html |
|