陳衛麗
(廣州商學院 信息技術與工程學院,廣州 511365)
證券業是資金、知識密集型行業,對電腦信息系統的依存度以及系統運行的精確性、穩定性要求非常高,幾乎所有業務都在信息系統的支撐下進行的. 證券公司的經紀業務模式將由傳統的提供交易通道服務向“以客戶為中心、以產品(服務)為主線”的服務模式轉變,經紀業務的轉型使得網絡規模日趨擴大,系統由于和銀行、交易所、中登等進行各類業務數據流通、與內部各個系統之間互聯的結構日趨復雜,包含了數以百計的路由交換設備、應用服務器、數據庫服務器、通信中間件和業務中間件等系統資源[1]. 券商的信息系統很多是在不同的歷史階段通過多方外購或自主研發形式所構建,存在硬件設備多樣性、應用系統差異性IT架構、監控接口不統一的問題,系統日常運維及故障消除工作缺乏相應的工具支持. 為了保證交易通道的暢通和長期高效穩定的系統運行,券商有必要構建一個統一的、全流程和全方位的集中監控系統,以實時掌控系統的運行狀態,監測運行故障,分析運行性能,面向公司整體的信息系統實施一體化的監控. 針對這些情況,有必要建立靈活的數據采集機制,對券商信息系統實現從網絡通信、硬件設備、應用軟件到業務過程的集中數據采集和實時監控,對所出現的系統故障、異常進行在線評估和報警,為故障定位、智能修復和故障消除打下基礎. 在此背景下,本文提出基于異構網絡環境下數據采集方案,完成券商核心業務、網絡通信、文件系統、操作系統特色指標采集,設計一個實用的IT監控系統框架,并給出應用案例.
近年來,對信息系統的網絡、硬件、操作系統、業務的監控顯得越來越重要,目前對于被監控的系統的數據采集技術實現的技術途徑主要有3種[2]:
(1) 通過SNMP (簡單網絡管理協議)網絡管理系統的MIB (管理信息庫)中的各項屬性可以方便的進行網絡數據分析和流量分析,SNMP可以及時獲取設備的重要狀態從而對計算機基礎資源進行狀態監視[3].
(2) 通過引入新的中間件技術,尤其在分布式環境下,業務單元四處散布,包羅萬象的應用系統運行在不同的軟、硬件平臺上,中間件主要提供應用集成所必須的數據的遞送、收集、翻譯、過濾、映射和路由等功能,屏蔽不同的硬件平臺、應用系統、消息格式、通信協議之間的鴻溝與差異,提供應用到應用、點到點之間的高效、便捷的通信能力.
(3) 通過廠家的專用應用來實現,如SolarWinds網絡管理軟件,使用SolarWinds監控網絡,可以實時發現網絡中的異常情況,集中化的管理架構可以方便的快捷地輔助網絡管理員完成故障的排查和解決,進而保證網絡的正常運行. 同時,SolarWinds網絡監控系統還可以監控網絡鏈路的狀態,當網絡鏈路發生故障的時候也可以根據預設的閾值進行報警.
對比上述3種數據采集方式可知,SNMP存在獲得OID (對象標示符) 信息太多,采集數據量大,不方便篩選,開發難度大的缺點,同時SolarWinds只能監控網絡設備的性能,無法對業務進行監控. 中間件技術能屏蔽不同的硬件平臺、數據庫、消息格式、通信協議之間的鴻溝與差異,提供應用到應用之間的高效、便捷的通信能力,在靈活性、移植性和成熟度等方面均居明顯優勢[4]. 券商信息系統種類繁多,其核心的業務系統出于安全、性能上的考慮,結構尤其復雜、多樣,普遍均采用分布式、負載均衡的系統架構以獲得業務處理上的高性能,分網段對各系統區域進行分區保護.Java中間件具有標準化、開放性、安全性、跨平臺特點,可無縫嵌入到券商業務系統通信網絡架構和通信模式中,被系統中網絡設備、主機設備廣泛支持,可作為實現集中IT監控系統的基本技術線路.
由于證券公司現有集中式業務處理系統,為實現交易安全穩定運行,必須解決好3個環節:為保證大量的并發請求得到迅速處理,集中式業務處理系統必須做好充分的技術準備工作; 營業部的所有業務請求通過通信線路發送到公司總部進行處理,并將處理的請求實時發送到與之業務相關的交易所、登記公司或者其它系統; 必須采取高速、穩定的通信線路來保證數據傳輸效率.
由于證券交易實時性、連續性、完整性的要求,原來分布在各營業部的信息技術風險集中到公司總部.按照《關于加強證券公司信息安全事故通報工作的通知》,為避免行情揭示與分析系統、集中交易系統、網上交易系統、第三方存管系統、證券結算系統、證券營業部的信息技術系統等直接影響投資者交易行為的系統出現鏈路中斷與業務異常,需要對以下幾類情況進行監控.
(1) 鏈路連通性實時的監控. 行情揭示與分析系統、集中交易系統、網上交易系統、第三方存管系統、證券結算系統、證券營業部的信息技術系統等進行鏈路連通監控.
(2) 數據庫連接實時監控. 對于集中交易、三方存管、賬戶系統等的后臺數據庫活動連接數、數據庫表的空間使用率、已切換連接數,預連接數,總連接數的數據庫性能狀況也必須設定閥值進行實時的監控并報警.
(3) 報盤業務實時監控. 每個交易日開市期間,證券公司通過上述通訊鏈路就會將投資者的委托請求實時地發送到兩個證券交易所,實現投資者的證券投資交易,由于報盤業務關系投資者委托下單是否正常交易的關鍵業務,因此必須通過監控程序對報盤業務進行實時的監控.
(4) 文件監控. 包括文件是否更新和是否存在的監控. 例如每個交易日開市前都需要檢查行情文件是否更新為當天的文件,清算前需要檢查基金文件上傳是否成功等.
(5) 客戶的資金監控. 包括可用資金監控,低傭透支檢查等.
(6) 硬件和系統監控. 包括CPU、內存、硬盤的利用率和進程監控.
(7) 應用系統的端口監控.
(8) 系統初始化監控. 包括多金融初始化、基金代碼初始化、開放式基金初始化、賬戶系統初始化、集中交易系統初始化等.
(9) 三方存管監控,例如已報狀態監控.
由于公司內部絕大部分機器是Linux系統,Java中間件通過開源包JSCH可以滿足技術要求. 被監控機器的監控選項通過IO流的形式返回到中間件調用端,由于需要盡量減少數據傳輸帶寬對交易通信線路的影響,IO返回來的數據必須既少又能反映被監控設備的狀態. 中間件通過采集到的數據進行分析和處理寫入輕量數據庫MySlq,日終或第二天監控前將當日已經監控的數據再歸檔到后臺的大型歸檔歷史數據庫,用作分析和查詢.
對于部分被監控的Windows系統,由于通過開源包JSCH來采集被監控設備的數據,在被監控機器上安裝WIN Agent的代理精小系統,用于專門采集Windows系統的CPU、內存、硬盤的使用率信息.WIN Agent精簡而短小,對被監控設備的CPU、內存、硬盤避免造成負荷影響. 在維護上能在被監控機器啟動時WIN Agent代理小系統能夠自動啟動. WIN Agent與中間件對接采取Socket客戶端的技術,傳輸的數據也必須要求不能影響帶寬. 客戶端模塊是RSCMS的管理和展示工具,對所有系統的監控都展示在該模塊上. 為簡化客戶端日后開發復雜度以及監控功能擴展,對它的開發采用較為松散動態鏈接庫架構方式,將該工具的各個子功能和對RSCMS的展示功能都以DLL方式實現,這樣可以避免由于修改軟件,導致程序全部重新發布,并對客戶端的開發和擴展可以分解為對DLL的開發,實現多人協同開發.
為降低系統的開發難度和提高系統的可擴充性,整個RSCMS系統的框架采用如上圖的可分布式架構,從功能和結構上把RSCMS分為四層:被監控設備層、中間件層、客戶端層、數據庫層. 被監控設備層包括行情揭示與分析系統、集中交易系統、網上交易系統、第三方存管系統、證券結算系統、投顧系統、法人清算系統、呼叫中心系統、CRM系統、數據中心系統等,如果被監控機器是Windows系統,在該機上安裝WIN Agent小系統. 中間件層運行的是Java中間件系統,中間件的設計要求程序具有能跨操作系統的特性以及實現靈活配置的數據收集,增加中間件的靈活部署和擴展監控,通過中間件把收集到的被監控系統的相關異常信息寫入輕量MySQL數據庫層,再由客戶端層不間斷循環讀取輕量數據庫數據信息展示監控的情況. 這樣通過以Java中間件為中心的分布式部署方式,并且可以對尤為重要的系統部署雙監控的方式,提高監控的穩定性,避免單一監控異常導致其他監控不能正常運行. 平臺架構的中間件可以對被監控系統實現1-N的信息收集. 在生產環境中,中間件與被監控系統的對應關系可根據具體被監控系統的業務復雜情況,適當配置其對應關系.
從圖1可見,中間件是監控平臺的最重要組成部分,是監控客戶端與被監控系統之間的橋梁,它必須是能靈活擴展、能適應不同操作系統的跨平臺程序. 因此,中間件在設計開發時將采用Java開發. 此外,設計的中間件也應具有一定的通用性,能依靠簡單配置實現監控大部分的被監控系統.
(1) 線程調度和任務管理
通過分析目前公司的各個被監控系統,對被監控系統的監控業務分門歸類,找出其共性. 并把共性的業務抽象成一個類,把所有的任務包括ping、telnet、文件監控、數據庫業務監控、日志監控、命令行監控封裝各自封裝成一個線程類、并把所有的線程裝載進一個線程池,通過讀取數據庫配置文件定時不間斷地去運行.
(2) 數據庫連接池管理
為了減少對監控機器的數據庫頻繁的建立、關閉連接而造成中間件的性能和被監控主機性能的影響,
使用數據庫連接池連接復用技術. 通過建立一個數據庫連接池以及一套連接使用管理策略,使得一個數據庫連接可以得到高效、安全的復用. 本文采取開源的C3P0的jar包來實現數據庫連接池技術.

圖1 RSCMS系統框架
輕量數據庫是收集的異常數據存放地. 為較少監控平臺部署的復雜性,平臺設計時采用輕量型的數據庫MySql,該數據庫可以作為監控客戶端的一部分,共同部署在同一服務器上. 采用輕量數據庫另外一個原因是實時監控一般只對當前的情況做出快速的響應,而對歷史數據無實時查詢的要求,所以設計數據庫時只保留當天的異常監控信息,每日結束后才將信息歸檔到歷史數據庫.
監控客戶端是監控平臺的主要人機交互界面. 客戶端設計的原理是設置監控配置如監控名稱,監控類型,被監控的IP地址和操作系統,登陸的用戶名和密碼,監控時間和監控間隔,監控閥值,是否報警等.Java中間件讀取配置參數對被監控機器進行實時采集,監控客戶端通過多線程實時把Java中間件的數據進行展示和報警,并實現權限控制、短信發送等功能. 而異常內容展示則會根據不同的目標監控系統會有不同的變化.
在設計客戶端時一方面需要實現統一的一個平臺工具,另一方面也要求客戶端就有較為靈活的擴展性,能適應日后不同的被監控系統. 因此,針對客戶端的開發設計采用動態鏈接庫為功能擴展的思路,先實現客戶端的基礎平臺框架,然后依靠DLL(或ACTIVEX控件)實現功能擴展,使得客戶端的架構模式變為松散的方式,將對客戶端程序的開發轉為對DLL或其他插件的開發,減少并行開發可能帶來的風險,方便日后升級維護. 客戶端的設計框架如圖2所示.

圖2 客戶端設計框架
其中客戶端監控異常內容的展示和報警是技術實現的關鍵. 本文采取目錄樹的一級菜單形式對業務系統進行歸類,如法人清算系統,樹的二級菜單對每個系統進行細分監控選項,如網絡連通性監控、數據庫和中間件端口監控、數據庫業務監控、日志文件監控、命令行監控等. 通過單擊目錄樹的二級菜單可以查看到動態矩形展示具體的監控. 對于監控異常采取紅色警告顯示和聲音報警,并使目錄樹也進行紅色顯示. 技術實現C# WINFORM的開發技術,難點是利用多線程的方式動態刷新樹目錄和動態刷新畫板上的矩形監控項.
由于監控平臺采用分散監控原則,且在輕量數據庫中僅保存當日數據以提高監控效率. 此外,為各個維護部門日后對被監控系統進行故障分析和評估提供數據依據,需要對分布的各個監控平臺監控數據定時歸檔到歷史數據庫,作備份歸檔.
數據歸檔將采用在客戶端實現定時的歸檔和初始化作業. 在設定的時間進行自動數據歸檔,并初始化數據. 實現該功能注意保持數據的一致,在確定完成數據歸檔后才能對數據進行初始化,否則不進行操作,留待人工處理.
WIN Agent小系統的設計是針對被監控目標主機是Windows操作系統的數據采集,基于前面的分析,WIN Agent主要是對Windows機器的CPU、內存、硬盤的使用率和Windows系統日志、普通日志、操作系統的時間和進程等進行監控. 為了盡量減少被監控主機的性能影響,WIN Agent需要盡量精小和高效.本文采取C++的開發語言對WIN Agent進行處理.
本文設計的監控系統在廣州某證券公司進行了應用,不僅實現了主機、操作系統、網絡、交易系統的監控,還能對應用系統軟件、組件性能及整體性能進行監控. 經過幾個月的測試運行,監控效果良好. 集中監控平臺實時監控界面如圖3所示. 集中監控平臺WIN Agent監控界面如圖4所示. 集中監控平臺JAVA中間件監控展示效果如圖5所示.

圖3 集中監控平臺實時監控界面

圖4 集中監控平臺WIN Agent監控系統圖

圖5 集中監控平臺JAVA中間件監控系統
本文設計了一個可以快速實時響應、靈活監控證券公司各個系統的網絡連通和業務功能運行情況,以提高部門的實時監控效率并為系統的運行情況提供數據評估依據的監控系統(RSCMS). 通過劃分Java中間件層、監控客戶端層和WIN agent代理客戶端層構成一個整體的集中監控系統,并提出了關鍵技術的解決方法. 本系統的設計主要依托廣州某證券股份有限公司的具體業務情況進行分析和設計,顯著提高了運維監控的效率和故障解決率,保障了證券市場交易的穩定可靠運行.