供稿|劉麟, 王紅偉, 史旭天, 張莉, 馮曉蕾 / LIU Lin, WANG Hong-wei, SHI Xu-tian, ZHANG Li, FENG Xiao-lei
隨著企業(yè)信息化的不斷發(fā)展,ERP、OA、CRM等各種應(yīng)用分析系統(tǒng)的上線運行,系統(tǒng)服務(wù)器資源逐步增多,其中包括的AIX、Linux、Windows等服務(wù)器近百臺。通常會有一個數(shù)人的團隊來負(fù)責(zé)這服務(wù)器的日常運維工作,試想只依靠幾個人來管理數(shù)百臺服務(wù)器,處理系統(tǒng)故障問題,保證系統(tǒng)正常對外提供服務(wù),保證各種應(yīng)用程序能夠正常運行,將會是一件多么艱巨的任務(wù)[1]。
而且目前這種運維方式還存在以下問題:(1)被動式響應(yīng),由于系統(tǒng)數(shù)目繁多,軟件應(yīng)用龐雜,其中每臺系統(tǒng)就有成百個需要監(jiān)控的參數(shù),再加上應(yīng)用,可見通過人工的方式想實現(xiàn)主動是監(jiān)控是不可能的;(2)問題重復(fù)發(fā)生,系統(tǒng)管理員每天要處理大量問題,日積月累起來其中有大量問題是重復(fù)的;(3)手工處理問題,在系統(tǒng)運維的實際工作中,日常業(yè)務(wù)人員報告的80%的問題基本上都是重復(fù)的問題,目前只能通過系統(tǒng)管理員手工處理。
面對這樣的問題,傳統(tǒng)的運維方式已顯得力不從心。這時,選擇一套系統(tǒng)監(jiān)控軟件提高對系統(tǒng)的管理運維水平就顯得特別的重要,既可以變被動為主動,做到及時發(fā)現(xiàn)系統(tǒng)問題,處理問題。對重復(fù)問題進行分類分析,從中歸納出一套固定的處理流程,變手工處理為通過程序自動處理系統(tǒng)故障,將系統(tǒng)管理員從瑣碎的日常問題中解放出來,重點考慮系統(tǒng)的性能,優(yōu)化等重要問題中來。
SSH是英文Secure Shell的簡寫形式。http、ftp、pop和telnet等協(xié)議都可以用來進行網(wǎng)絡(luò)數(shù)據(jù)傳輸,但是由于它們是使用明文傳輸口令、密碼,并且其安全嚴(yán)重方式也有弱點,很容易受到“黑客”的攻擊。而SSH協(xié)議可以把所有傳輸?shù)臄?shù)據(jù)進行加密,這樣“黑客”的攻擊就不可能實現(xiàn),并且SSH協(xié)議也可以用來防止DNS欺騙和IP欺騙,因此SSH已成為目前服務(wù)器管理中最常用的通訊協(xié)議。SSH相對來說有兩個優(yōu)點:(1)SSH是比較可靠的遠(yuǎn)程登錄和其他安全服務(wù)的協(xié)議,它采用了數(shù)據(jù)加密機制,能夠防止DNS欺騙和IP欺騙。(2)所傳輸?shù)臄?shù)據(jù)是經(jīng)過壓縮的,因此相對來說加快了傳輸速度。SSH協(xié)議是建立在應(yīng)用層和傳輸層上的安全協(xié)議,主要包括三個部分:(1)傳輸層協(xié)議內(nèi)容,提供認(rèn)證,數(shù)據(jù)的完整性檢查等功能。(2)用戶認(rèn)證協(xié)議層,它運行在傳輸層上,主要實現(xiàn)了通信過程中的身份認(rèn)證,認(rèn)證方式包括口令認(rèn)證,密鑰認(rèn)證等。(3)連接協(xié)議層,負(fù)責(zé)分配加密通道到邏輯通道上,運行在用戶認(rèn)證協(xié)議層上。SSH協(xié)議可以替代以一些傳統(tǒng)網(wǎng)絡(luò)程序協(xié)議,在不安全的通信環(huán)境中提供了比較可靠的數(shù)據(jù)保護機制。
本文要采用的服務(wù)器管理方式正式基于SSH協(xié)議,各種不同的編程語言對于SSH都進行了封裝,比如windows下基于C語言的WinSCP鏈接庫,基于python語言的ssh、scp模塊,基于ruby語言的netssh、net-scp模塊等,本文則采用基于C#語言封裝的SharpSSH鏈接庫進行程序開發(fā)。
監(jiān)控軟件的主要任務(wù)就是對系統(tǒng)主機的CPU、內(nèi)存、網(wǎng)絡(luò)等關(guān)鍵參數(shù)進行監(jiān)控,判斷其是否超過閾值。對于超過系統(tǒng)警戒線的參數(shù),提醒系統(tǒng)管理員及時關(guān)注處理,不要等到對系統(tǒng)照成嚴(yán)重影響再進行處理,如果不采用監(jiān)控軟件,系統(tǒng)管理員往往就只有等發(fā)生問題后才能進行處理,浪費了第一解決問題的時間。通常這些監(jiān)控軟件都具備監(jiān)控網(wǎng)絡(luò)服務(wù)的功能,比如SMTP、POP3, HTTP, NNTP,PING等,而且可以通過SNMP(Simple Network Management Protocol,簡單網(wǎng)絡(luò)管理協(xié)議)協(xié)議來獲取網(wǎng)絡(luò)設(shè)備的實時情況[3]。
架構(gòu)上大部分監(jiān)控軟件都采用監(jiān)控客戶端的方式,在需要監(jiān)控的服務(wù)器上安裝監(jiān)控代理程序,由監(jiān)控代理程序負(fù)責(zé)定時收集服務(wù)器參數(shù)信息,然后將監(jiān)控數(shù)據(jù)發(fā)送的中央服務(wù)器上,最后再由監(jiān)控軟件負(fù)責(zé)分析和展現(xiàn)監(jiān)控數(shù)據(jù)。其中監(jiān)控代理通??梢允且欢蝡ython、perl等腳本程序,也可以是用Java、C++等語言編寫的客戶端程序。針對Windows、Linux、AIX等不同操作系統(tǒng),監(jiān)控腳本程序各不相同,因此需要部署不同的監(jiān)控代理客戶端。
通過上面的介紹,可以看到市面上的這些監(jiān)控軟件產(chǎn)品功能上基本上都差不多,可以對服務(wù)器、網(wǎng)絡(luò)等資源進行監(jiān)控,架構(gòu)上采用監(jiān)控代理的方式。
不過,對于企業(yè)來說,使用這類監(jiān)控軟件還是存在很多問題的。(1)使用監(jiān)控代理的方式就很不方便,有數(shù)百臺服務(wù)器就需要部署數(shù)百個監(jiān)控代理,而且根據(jù)操作系統(tǒng)的不同還要做以區(qū)分,特別是后期的升級維護也很麻煩;(2)這種軟件不具備針對企業(yè)特點定制開發(fā)的功能,只能使用其提供的功能,但是,由于企業(yè)情況各不相同,其上線的應(yīng)用系統(tǒng)也各不相同,期望這種軟件能滿足所有企業(yè)的要求是不可能的;(3)只提供系統(tǒng)層級的監(jiān)控,沒有應(yīng)用層監(jiān)控,由于企業(yè)應(yīng)用系統(tǒng)各不相同,這種軟件在不了解應(yīng)用的前提下,是不可能做出針對企業(yè)的應(yīng)用層監(jiān)控的,而往往系統(tǒng)最容易出現(xiàn)問題的就是應(yīng)用程序;(4)不包含管理功能,這種軟件只提供監(jiān)控功能,可對于企業(yè)來說,數(shù)百臺服務(wù)器,如何對這些臺賬、資產(chǎn)、變更等信息進行有效的管理同樣是特別重要的。
通過使用SSH協(xié)議,我們可以建立一條與目標(biāo)服務(wù)器的臨時通道,然后我們通過該通道獲取目標(biāo)服務(wù)器需要的監(jiān)控參數(shù),非常的方便,而且容易實現(xiàn)。而且通過SSH協(xié)議我們不光能進行參數(shù)的收集,還可以執(zhí)行其他命令,也就是說使我們開發(fā)的監(jiān)控平臺不僅僅具備監(jiān)控的功能,同時具備日常管理等功能。同樣的,通過監(jiān)控發(fā)現(xiàn)的系統(tǒng)問題,通過命令也可以自動處理。
基于不同編程語言,SSH都有不同的實現(xiàn)版本,本文采用的是基于C#語言SSH協(xié)議的一種實現(xiàn)版本SharpSSH,它是開源的可以隨意使用。
如圖1展示了如何通過SharpSSH來進行監(jiān)控AIX服務(wù)器的CPU、內(nèi)存值,其中SshExec是最核心的操作對象,在輸入服務(wù)器IP、用戶名、密碼后,通過執(zhí)行connect命令,我們就成功建立了與目標(biāo)服務(wù)器的通道,接著我們再通過它提供的RunCommand函數(shù)來執(zhí)行具體的命令,例如通過執(zhí)行“vmstat | sed -n '2p' |awk '{print $4}'”命令,我們就成功獲得了服務(wù)器的內(nèi)存信息,最后再通過SshExec提供的Close函數(shù)關(guān)閉該通道。
通過上面的例子可以看到,通過使用SharpSSH對服務(wù)器無論是監(jiān)控,還是管理、運維都非常的方便,我們僅僅需要知道服務(wù)器的IP、用戶名、密碼就可以了,而且這部分信息基本上也會作為服務(wù)器臺賬信息保存在系統(tǒng)中,執(zhí)行的命令部分也會作為系統(tǒng)中一個單獨的模塊,監(jiān)控命令由系統(tǒng)管理員構(gòu)建一次,然后服務(wù)器之間可以進行復(fù)用。
圖1 基于SharpSSH的CPU、內(nèi)存監(jiān)控
整個系統(tǒng)運維監(jiān)控綜合平臺由三大模塊組成,運維管理模塊、監(jiān)控模塊和故障管理模塊。其中運維管理模塊主要管理設(shè)備相關(guān)信息,監(jiān)控模塊負(fù)責(zé)系統(tǒng)監(jiān)控,故障管理模塊負(fù)責(zé)管理設(shè)備的故障信息,如圖2所示。
運維管理模塊包括設(shè)備臺賬信息的管理,其中記錄了設(shè)備購買時間、價格、廠商信息、系統(tǒng)版本、服務(wù)器IP地址、用戶名、密碼等信息;變更管理包括設(shè)備變更記錄,比如更換電源、風(fēng)扇等硬件更換,以及物理位置變更等變更信息;資產(chǎn)管理模塊主要用來計算設(shè)備的固定資產(chǎn)、折舊等情況。
監(jiān)控模塊是最核心的功能,監(jiān)控配置管理主要負(fù)責(zé)對監(jiān)控腳本命令做統(tǒng)一的管理,然后再不同的服務(wù)器之間進行復(fù)用;應(yīng)用程序監(jiān)控以中間件監(jiān)控為基礎(chǔ),統(tǒng)計中間件運行情況及應(yīng)用程序運行情況,比如數(shù)據(jù)庫連接監(jiān)控、最大連接數(shù)監(jiān)控等;操作系統(tǒng)監(jiān)控主要針對CPU、內(nèi)存、文件系統(tǒng)、網(wǎng)絡(luò)等參數(shù)進行監(jiān)控;數(shù)據(jù)庫監(jiān)控主要用來監(jiān)控數(shù)據(jù)庫的運行狀況,比如鎖表監(jiān)控、最耗時SQL監(jiān)控,最大排序數(shù)等參數(shù)的監(jiān)控。
故障管理模塊,是對運維管理和監(jiān)控管理模塊的一個擴充,首先用來記錄系統(tǒng)產(chǎn)生的故障信息,之后對這些故障信息進行統(tǒng)計分析,建立一個故障的知識庫,保存處理故障的方式。
圖2 系統(tǒng)架構(gòu)圖
本文首先介紹了目前企業(yè)內(nèi)部系統(tǒng)運維的普遍狀況,提出了使用監(jiān)控軟件提高運維水平的必要性。介紹了SSH協(xié)議的作用、應(yīng)用范圍和使用方法,對比分析了目前市場上主流開源監(jiān)控軟件的優(yōu)缺點,接著提出了基于SSH協(xié)議的監(jiān)控系統(tǒng)的方案,分析其優(yōu)勢,最后給出了一個完整的運維監(jiān)控系統(tǒng)的整體系統(tǒng)架構(gòu)圖。
總之,使用基于SSH協(xié)議開發(fā)的企業(yè)內(nèi)部監(jiān)控運維系統(tǒng),最大的好處在于靈活、方便,而且能夠根據(jù)企業(yè)的實際情況定制化開發(fā),滿足企業(yè)的實際需求。
[1] 戴康娣. 高校機房監(jiān)控管理系統(tǒng)的設(shè)計與研究. 信息與電腦: 理論版, 2012, (07): 37
[2] 李穎. 機房監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn). 中國科技信息, 2010, (13): 117
[3] 饒彩雯. 基于IT運維的設(shè)備維護管理系統(tǒng)分析與實現(xiàn). 昆明: 云南大學(xué), 2012