基于.NET技術的監控應用分析
我們都知道,作為一個百、千萬及以上訪問量的網站,網站后臺的支持系統是相當多的,各系統之間盤結交錯,系統之間頻繁的互相通信、交換數據。如果某個結點稍一出差錯,可能就導致某個業務出現停滯現象,尤其對于一些關鍵的業務系統來說,需要做到高可用性,需要每天不間斷的處于運行狀態。除了業務系統具有良好的容錯、備份機制以外,還有必要對關鍵系統的運行狀態、輸出日志等進行監控。一旦出現異常現象,及時的反饋給技術人員,使得我們可以對部署在各地的服務器進行一個有效地處置。下面將分析一下在windows平臺如何開發此類應用。
先來大致描述一下網站方面的東西,我們這個網站是用asp.net開發的,服務器操作系統是windows 2003,專門提供視頻內容分享方面的服務。前臺基本上是以shtml頁面展現內容,后臺有負責生成頁面內容的系統,負責視頻上傳,轉換,分發,存儲及播放的系統,負責數據統計方面的系統,站內搜索的系統等。后臺的系統是以系統服務的形式運行,各數據中心的系統通過IBM 的MQ進行通信。需要監控的地方主要可以分為硬件,軟件及網絡方面,例如:存儲視頻的磁盤空間小于某個閥值,MQ的核心隊列堆積了大量數據包,某個系統服務輸出了錯誤的日志信息,某臺服務器出現故障關機,網絡中斷等。
一、系統架構分析
該系統一種典型的網絡通訊應用,所以可以在系統的每個層次之間通過業務協議作為接口,協議根據業務的內容可以不斷的擴充,這樣層與層之間的耦合性低,功能相對獨立。在數據采集和數據通訊層都比較完善的時候,數據展現層的功能擴展對下面兩層的影響可以降低到最小。數據通訊的模式可以分為主動和被動的方式發送數據到監控平臺。例如有一些數據需要被監控計算機實時發送,而另一些數據是由操作員向某臺計算機發出查詢命令,然后被監控計算機執行應答。可以從功能上可以自下而上把整個系統的架構分為數據采集,數據通訊和數據展現共三個層次。
數據采集層是服務器數據的源。主要包括對服務器運行狀態、IIS可用性與性能、MQ服務器與消息隊列、ORACLE數據庫服務、自行開發的服務和服務器資源的使用情況等等軟硬件數據進行抓取。從技術上分析可以把采集的數據分為兩大類:一是被監控服務器主動發送出來的數據,這里又包含計算機的實時運行狀態和一些定制的事件。二是監控中心向被監控服務器發送的各項數據指令。
數據通訊是傳輸數據的承載體。主要是把采集到的數據準確,安全的輸送到監控中心。這里需要考慮通訊的性能,安全,以及現有的網絡結構。然后綜合這些情況選擇合適的網絡通訊模型。與采集數據的接口是業務協議。這個層面負責把協議進行解析,關鍵數據進行加密,然后傳輸數據。
數據展現層是對采集的數據進行加工、表現的地方,它是作為監控人員與機器之間的一個控制接口,所有的業務功能都最終體現到這個層面。例如:各服務器的運行信息實時顯示,遠程操作服務、權限管理、輸出報表、數據的存放以及預警功能。
數據上行流程:
二、數據采集技術分析
因為服務器的操作系統是Windows Server,數據的采集就可以用WMI技術。它可以采集到幾乎所有的軟硬件數據信息。Microsoft把WMI封裝成COM接口的形式提供給開發人員使用。而在 .NET 框架中,提供了更為簡便的使用方法來查詢系統各種的信息、訂閱事件。
System.Managerment, System.Management.Instrumentation命名空間就包含了所有對WMI的操作功能。通過WMISQL語句就可以查詢和訂閱計算機的運行狀態信息。例如:
查詢某臺機器的類型創建事件,就可以用類似SQL語法的程序代碼來完成。
三、數據通信技術分析
傳輸的數據內容是由業務功能決定的,但其設計方法可以統一制定一個規范。考慮到網絡通訊程序的特點,可以用消息的形式,發送方把數據進行封裝,然后轉換成字節流,由網絡通訊層把數據發送到目的機器。目的機器接收到某段字節流后,解析之,然后轉換成對應的消息。
每一個消息都包含消息頭和消息體。由命令標識、序列號、消息長度,再加上特定的業務信息就構成了一個完整的消息。協議解析時就可以根據消息標識,選擇相應的消息處理對象,生成對應的消息實體。數據展現層再負責把消息實體持久化到數據庫中。
針對不同的消息,會有應答消息,即消息一般以成對的方式出現。比如監控方向被監控方查詢某個設備狀態,它接收到命令后,會把查詢的結果以相同的序列號為關聯,發出應答消息。這樣監控方就可以準確無誤的收到信息。
6.1.1消息頭格式
字段 |
長度(字節) |
類型 |
說明 |
Message Length |
4 |
Integer |
消息的總長度(字節) |
Command ID |
4 |
Integer |
命令ID |
Sequence Number |
12 |
Integer |
序列號 |
6.1.2 消息體格式
字段 |
長度(字節) |
類型 |
說明 |
MessageLength |
4 |
Integer |
消息的長度 |
MessageContent |
Message Length |
String |
消息的內容 |
Reserve |
8 |
String |
保留,擴展用 |
6.1.3 應答格式
字段 |
長度(字節) |
類型 |
說明 |
Result |
1 |
Integer |
命令是否成功執行。 0:執行成功 其它:錯誤碼 |
MessageLength |
4 |
Integer |
消息的長度 |
MessageContent |
Message Length |
String |
消息的內容 |
Reserve |
8 |
String |
保留,擴展用 |
6.1.4 消息ID定義
消息ID名稱 |
消息ID取值 |
BIND |
0x1 |
BIND_RESP |
0x80000001 |
UNBIND |
0x2 |
UNBIND_RESP |
0x80000002 |
6.1.5 錯誤碼定義
錯誤碼 |
描述 |
0 |
無錯誤 |
1 |
非法用戶名 |
2 |
… |
3 |
… |
四、結束
在windows平臺下可以通過WMI技術采集服務器的狀態,然后把狀態消息發送到監控中心,對接收到的數據進行加工呈現,同時以郵件,短信發送警報信息。最終實現對服務器軟硬件狀態的有效監控。
留言列表