.NET監(jiān)控技術(shù)應(yīng)用與分析
在平時除了業(yè)務(wù)系統(tǒng)具有良好的容錯、備份機(jī)制以外,還有必要對關(guān)鍵系統(tǒng)的運行狀態(tài)、輸出日志等進(jìn)行監(jiān)控。一旦出現(xiàn)異?,F(xiàn)象,及時的反饋給技術(shù)人員,使得我們可以對部署在各地的服務(wù)器進(jìn)行一個有效地處置。下面將分析一下在Windows平臺如何開發(fā)此類.NET監(jiān)控技術(shù)應(yīng)用。
先來大致描述一下網(wǎng)站.NET監(jiān)控技術(shù)方面的東西,我們這個網(wǎng)站是用ASP.NET開發(fā)的,服務(wù)器操作系統(tǒng)是Windows 2003,專門提供視頻內(nèi)容分享方面的服務(wù)。前臺基本上是以shtml頁面展現(xiàn)內(nèi)容,后臺有負(fù)責(zé)生成頁面內(nèi)容的系統(tǒng),負(fù)責(zé)視頻上傳,轉(zhuǎn)換,分發(fā),存儲及播放的系統(tǒng),負(fù)責(zé)數(shù)據(jù)統(tǒng)計方面的系統(tǒng),站內(nèi)搜索的系統(tǒng)等。后臺的系統(tǒng)是以系統(tǒng)服務(wù)的形式運行,各數(shù)據(jù)中心的系統(tǒng)通過IBM的MQ進(jìn)行通信。需要監(jiān)控的地方主要可以分為硬件,軟件及網(wǎng)絡(luò)方面,例如:存儲視頻的磁盤空間小于某個閥值,MQ的核心隊列堆積了大量數(shù)據(jù)包,某個系統(tǒng)服務(wù)輸出了錯誤的日志信息,某臺服務(wù)器出現(xiàn)故障關(guān)機(jī),網(wǎng)絡(luò)中斷等。
一、系統(tǒng)架構(gòu)分析
該系統(tǒng)一種典型的網(wǎng)絡(luò)通訊應(yīng)用,所以可以在系統(tǒng)的每個層次之間通過業(yè)務(wù)協(xié)議作為接口,協(xié)議根據(jù)業(yè)務(wù)的內(nèi)容可以不斷的擴(kuò)充,這樣層與層之間的耦合性低,功能相對獨立。在數(shù)據(jù)采集和數(shù)據(jù)通訊層都比較完善的時候,數(shù)據(jù)展現(xiàn)層的功能擴(kuò)展對下面兩層的影響可以降低到最小。數(shù)據(jù)通訊的模式可以分為主動和被動的方式發(fā)送數(shù)據(jù)到監(jiān)控平臺。例如有一些數(shù)據(jù)需要被監(jiān)控計算機(jī)實時發(fā)送,而另一些數(shù)據(jù)是由操作員向某臺計算機(jī)發(fā)出查詢命令,然后被監(jiān)控計算機(jī)執(zhí)行應(yīng)答??梢詮墓δ苌峡梢宰韵露习颜麄€系統(tǒng)的架構(gòu)分為數(shù)據(jù)采集,數(shù)據(jù)通訊和數(shù)據(jù)展現(xiàn)共三個層次。
【圖 2-1】
數(shù)據(jù)采集層是服務(wù)器數(shù)據(jù)的源。主要包括對服務(wù)器運行狀態(tài)、IIS可用性與性能、MQ服務(wù)器與消息隊列、Oracle數(shù)據(jù)庫服務(wù)、自行開發(fā)的服務(wù)和服務(wù)器資源的使用情況等等軟硬件數(shù)據(jù)進(jìn)行抓取。從技術(shù)上分析可以把采集的數(shù)據(jù)分為兩大類:一是被監(jiān)控服務(wù)器主動發(fā)送出來的數(shù)據(jù),這里又包含計算機(jī)的實時運行狀態(tài)和一些定制的事件。二是監(jiān)控中心向被監(jiān)控服務(wù)器發(fā)送的各項數(shù)據(jù)指令。
數(shù)據(jù)通訊是傳輸數(shù)據(jù)的承載體。主要是把采集到的數(shù)據(jù)準(zhǔn)確,安全的輸送到監(jiān)控中心。這里需要考慮通訊的性能,安全,以及現(xiàn)有的網(wǎng)絡(luò)結(jié)構(gòu)。然后綜合這些情況選擇合適的網(wǎng)絡(luò)通訊模型。與采集數(shù)據(jù)的接口是業(yè)務(wù)協(xié)議。這個層面負(fù)責(zé)把協(xié)議進(jìn)行解析,關(guān)鍵數(shù)據(jù)進(jìn)行加密,然后傳輸數(shù)據(jù)。
數(shù)據(jù)展現(xiàn)層是對采集的數(shù)據(jù)進(jìn)行加工、表現(xiàn)的地方,它是作為監(jiān)控人員與機(jī)器之間的一個控制接口,所有的業(yè)務(wù)功能都最終體現(xiàn)到這個層面。例如:各服務(wù)器的運行信息實時顯示,遠(yuǎn)程操作服務(wù)、權(quán)限管理、輸出報表、數(shù)據(jù)的存放以及預(yù)警功能。
.NET監(jiān)控技術(shù)中數(shù)據(jù)上行流程:
- 數(shù)據(jù)通訊層
- 數(shù)據(jù)采集層
- 事件
- 狀態(tài)
- 數(shù)據(jù)通訊層
- 數(shù)據(jù)展現(xiàn)層
- 網(wǎng)絡(luò)環(huán)境
- WMI
- 數(shù)據(jù)打包
- 協(xié)議
- 發(fā)送數(shù)據(jù)
- 接收數(shù)據(jù)
- 協(xié)議
- 數(shù)據(jù)解包
- 數(shù)據(jù)存取管理
- 數(shù)據(jù)庫
- 消息
- 實時數(shù)據(jù)顯示
- 消息
二、數(shù)據(jù)采集技術(shù)分析
因為服務(wù)器的操作系統(tǒng)是Windows Server,數(shù)據(jù)的采集就可以用WMI技術(shù)。它可以采集到幾乎所有的軟硬件數(shù)據(jù)信息。Microsoft把WMI封裝成COM接口的形式提供給開發(fā)人員使用。而在 .NET 框架中,提供了更為簡便的使用方法來查詢系統(tǒng)各種的信息、訂閱事件。
System.Managerment, System.Management.Instrumentation命名空間就包含了所有對WMI的操作功能。通過WMISQL語句就可以查詢和訂閱計算機(jī)的運行狀態(tài)信息。例如:
查詢某臺機(jī)器的類型創(chuàng)建事件,就可以用類似SQL語法的程序代碼來完成?! ?/P>
三、數(shù)據(jù)通信技術(shù)分析
傳輸?shù)臄?shù)據(jù)內(nèi)容是由業(yè)務(wù)功能決定的,但其設(shè)計方法可以統(tǒng)一制定一個規(guī)范??紤]到網(wǎng)絡(luò)通訊程序的特點,可以用消息的形式,發(fā)送方把數(shù)據(jù)進(jìn)行封裝,然后轉(zhuǎn)換成字節(jié)流,由網(wǎng)絡(luò)通訊層把數(shù)據(jù)發(fā)送到目的機(jī)器。目的機(jī)器接收到某段字節(jié)流后,解析之,然后轉(zhuǎn)換成對應(yīng)的消息。
每一個消息都包含消息頭和消息體。由命令標(biāo)識、序列號、消息長度,再加上特定的業(yè)務(wù)信息就構(gòu)成了一個完整的消息。協(xié)議解析時就可以根據(jù)消息標(biāo)識,選擇相應(yīng)的消息處理對象,生成對應(yīng)的消息實體。數(shù)據(jù)展現(xiàn)層再負(fù)責(zé)把消息實體持久化到數(shù)據(jù)庫中。
針對不同的消息,會有應(yīng)答消息,即消息一般以成對的方式出現(xiàn)。比如監(jiān)控方向被監(jiān)控方查詢某個設(shè)備狀態(tài),它接收到命令后,會把查詢的結(jié)果以相同的序列號為關(guān)聯(lián),發(fā)出應(yīng)答消息。這樣監(jiān)控方就可以準(zhǔn)確無誤的收到信息。.NET監(jiān)控技術(shù)的好處正在于此。
消息頭格式
字段 |
長度(字節(jié)) |
類型 |
說明 |
Message Length |
4 |
Integer |
消息的總長度(字節(jié)) |
Command ID |
4 |
Integer |
命令ID |
Sequence Number |
12 |
Integer |
序列號 |
消息體格式
字段 |
長度(字節(jié)) |
類型 |
說明 |
MessageLength |
4 |
Integer |
消息的長度 |
MessageContent |
Message Length |
String |
消息的內(nèi)容 |
Reserve |
8 |
String |
保留,擴(kuò)展用 |
應(yīng)答格式
字段 |
長度(字節(jié)) |
類型 |
說明 |
Result |
1 |
Integer |
命令是否成功執(zhí)行。 0:執(zhí)行成功 其它:錯誤碼 |
MessageLength |
4 |
Integer |
消息的長度 |
MessageContent |
Message Length |
String |
消息的內(nèi)容 |
Reserve |
8 |
String |
保留,擴(kuò)展用 |
消息ID名稱 |
消息ID取值 |
BIND |
0x1 |
BIND_RESP |
0x80000001 |
UNBIND |
0x2 |
UNBIND_RESP |
0x80000002 |
錯誤碼 |
描述 |
0 |
無錯誤 |
1 |
非法用戶名 |
2 |
… |
3 |
… |
四、基于.NET監(jiān)控技術(shù)與分析總結(jié)
在Windows平臺下可以通過WMI技術(shù)采集服務(wù)器的狀態(tài),然后把狀態(tài)消息發(fā)送到監(jiān)控中心,對接收到的數(shù)據(jù)進(jìn)行加工呈現(xiàn),同時以郵件,短信發(fā)送警報信息。最終實現(xiàn)對服務(wù)器軟硬件狀態(tài)的有效監(jiān)控。
【編輯推薦】