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