韓超
摘要:讓基于Java語言開發(fā)的維護程序,通過SSH2協(xié)議遠程登入到CMACast接收服務器,實時檢測當前CMACast資料接收業(yè)務的運行狀態(tài),形成系統(tǒng)運行進程、硬盤使用情況、FTP推送情況、衛(wèi)星入鎖情況、通道文件接收情況五個維度的運行參數(shù),并利用這些狀態(tài)參數(shù)對業(yè)務運行情況進行診斷,然后針對診斷結(jié)果遠程對Linux服務器作出相應的操作,從而達到故障判斷和故障處理自動化的目的。最后通過WebService技術(shù)將診斷結(jié)果實時推送給網(wǎng)頁、手機等多端監(jiān)控平臺。
關(guān)鍵詞:CMACast;SSH協(xié)議;自動維護;實時播報
中圖分類號:TP311 文獻標識碼:A
文章編號:1009-3044(2019)31-0068-04
1背景
CMACast系統(tǒng)是中國氣象局自2012年6月正式投入業(yè)務使用的新一代氣象衛(wèi)星廣播系統(tǒng),它是目前各地區(qū)氣象局接收衛(wèi)星氣象數(shù)據(jù)的主要手段。CMACast接收服務器作為CMACast系統(tǒng)的重要一環(huán),自然也成了各氣象局網(wǎng)絡維護工作的重要科目。全新架構(gòu)下的CMACast衛(wèi)星接收系統(tǒng)在數(shù)據(jù)接收速率和接收時效上都有了質(zhì)的飛躍,就市級衛(wèi)星小站而言,單日數(shù)據(jù)接收量可達250G,接收文件數(shù)量達267萬個。這也意味著在接收服務器上,平均每分鐘將產(chǎn)生1854個文件。所以對于網(wǎng)絡維護人員來說,時間就是珍貴的氣象數(shù)據(jù),一旦CMACast系統(tǒng)發(fā)生故障,能否第一時間發(fā)現(xiàn)并排除將直接影響當天數(shù)據(jù)接收的完整性。設(shè)計一個能夠自動監(jiān)控CMACast運行狀態(tài),自動排除CMACast常見故障的維護系統(tǒng),最大限度得保障衛(wèi)星資料接收的完整性,對于CMACast系統(tǒng)的維護工作顯得尤為重要。
2系統(tǒng)概述
CMACast數(shù)據(jù)接收服務的系統(tǒng)功能主要由Recv_daemon、MeidaRecv、FileFtp、CMACast四個進程來配合實現(xiàn)。其中Recv_daemon和MeidaRecv負責數(shù)據(jù)接收和生成,F(xiàn)ileFtp負責數(shù)據(jù)推送,CMACast則負責系統(tǒng)運行狀態(tài)的監(jiān)測顯示。CMA-Cast作為小站接收監(jiān)控軟件,整體基于C/S架構(gòu)設(shè)計。軟件開發(fā)者通過將系統(tǒng)運行和系統(tǒng)監(jiān)控分離的方式,合理得將任務分配給了不同的系統(tǒng)進程,并通過較為直觀的圖形界面,分別從系統(tǒng)硬件和服務軟件兩個方面進行實時監(jiān)測和展示。
由于其監(jiān)控軟件整體基于C/S架構(gòu)設(shè)計的特點,所以在系統(tǒng)運行時,服務進程會對系統(tǒng)各項狀態(tài)都留有較為完整的運行日志。這使得我們能夠基于這種架構(gòu),重新設(shè)計C/S架構(gòu)中的c端,通過查詢Linux系統(tǒng)和服務進程留下的運行日志,診斷CMACast運行狀態(tài)以便程序進行相應的自主維護操作。
3維護程序與接收服務器的遠程交互
3.1遠程登入系統(tǒng)
SSH(安全外殼協(xié)議)是Secure Shell的縮寫,由IETF的網(wǎng)絡小組(Network Working Group)所制定。SSH是建立在應用層基礎(chǔ)上的安全協(xié)議,專為遠程登人會話和其他網(wǎng)絡服務提供安全性的協(xié)議。SSH作為一種安全可靠的通訊協(xié)議已被廣泛應用于Liunx系統(tǒng)的遠程登入管理上。
JSch是一個純Java實現(xiàn)的第三方SSH2協(xié)議類庫,項目地址為WrfirW.jcraft.com/jsch/,利用該類庫可實現(xiàn)遠程登入到CMA-Cast接收服務器并執(zhí)行SHELL查詢命令的功能。下載類庫包并引入項目后,首先在項目里用代碼初始化Sessionf遠程登入會話),運行代碼如下所示。
jSch=new JSch();
session=jsch.getSession(用戶名,IP地址,端口);
session.setPassword(密碼);
由于嚴格的SSH公鑰檢查會影響Java維護系統(tǒng)的自動化任務,所以在Session初始化完成后需要取消SSH公鑰檢查。最后讓Java檢測遠程登人CMACast服務器。運行代碼如下所示。
session.setConfig(”StrictHostKeyChecking”,”no”);
session.connect(登人超時時間);
3.2執(zhí)行命令和獲取反饋
讓監(jiān)控程序通過SSH的22端口對遠程服務器進行管理,是實現(xiàn)CMACast服務器智能維護的基礎(chǔ)。它使我們不僅可以判斷出正在發(fā)生的故障,還能讓監(jiān)控系統(tǒng)全面接管CMACast接收服務器,從而達到智能維護的目的。
遠程執(zhí)行命令并實時獲取執(zhí)行后的反饋,是監(jiān)控程序全面接管服務器的關(guān)鍵點。通過讓Java支持SSH2協(xié)議后,這一點并不難實現(xiàn)。首先用Session打開命令通道(channelExec),然后在新建的通道中運行setCommand()來執(zhí)行查詢命令。因為ChannelExec命令通道支持shell的分隔符,所以可以像在本機上執(zhí)行shell腳本一樣,運用“;”和“I”等符號在一次查詢中提交多個命令。最后在命令通道中用getlnputStream方法獲取執(zhí)行結(jié)果。運行代碼如下所示。
ChannelExec channel=(channelExec)session.openChannel("exec"):
4維護邏輯設(shè)計與實現(xiàn)
4.1常見故障
CMACast接收服務器的主要功能是衛(wèi)星資料接收和傳遞,因其特殊的功能定位,日常維護中時常會遇到三種常見的系統(tǒng)故障。首先是衛(wèi)星入鎖狀態(tài)異常,故障表現(xiàn)為系統(tǒng)無法接收到新的衛(wèi)星資料,同時監(jiān)控界面顯示“未入鎖”狀態(tài)。其次是硬盤剩余空間異常,當“sdbl”“sdb2”“sdb3”三個磁盤分區(qū)的空間使用量長時間停留在90%時,會造成硬盤空間異常。最后是FTP推送異常,具體表現(xiàn)為系統(tǒng)無法將資料通過ftp推送至數(shù)據(jù)存儲服務器。
4.2日志系統(tǒng)
CMACast接收服務器內(nèi)各個資料的運行流轉(zhuǎn)主要依賴四個掛載點,分別是位于/dvbs2目錄下的“sdbl”“sdb2”“sdb3”和“sdb4”,其中容量為62G名為“sdb4”的掛載點內(nèi)存儲著系統(tǒng)運行的各項日志。日志系統(tǒng)以天為單位形成記錄文件,并采用在文件末尾逐條添加的方式實時更新系統(tǒng)的各項狀態(tài)。有了系統(tǒng)日志的數(shù)據(jù)支持,我們便能夠以此為依據(jù),自行定制智能維護系統(tǒng)的程序邏輯。
4.3入鎖故障
入鎖故障常見于冬天降雪天氣,衛(wèi)星接收器的金屬拋物面被積雪覆蓋后,造成衛(wèi)星信號無法反射到信號焦點處的高頻頭內(nèi),導致接收設(shè)備無法入鎖。入鎖異常除了受雨雪天氣影響較大外,還可能受通訊電纜中斷和高頻頭損壞等因素的影響。實際維護時,網(wǎng)絡值班人員需要時刻注意CMACast監(jiān)控界面的入鎖狀態(tài)顯示,發(fā)現(xiàn)入鎖異常后需要及時檢查室外的衛(wèi)星接收器。
在CMACast日志系統(tǒng)的運行邏輯方面,系統(tǒng)當前的入鎖狀態(tài)會以1分鐘的頻率,實時記錄在“/dvbs2/sdb4/log/dvb”路徑下,以“YYYYMMDD.log”命名的日志文件里。不同時次的數(shù)據(jù)以換行符為間隔,記錄下形如“12:46:25 Y 95 8.0 0.000000E+046657”樣式的數(shù)據(jù)。每個時次數(shù)據(jù)又以空格符為間隔,分別記錄下時間、狀態(tài)、信號強度、信噪比(Eb/No)、誤碼率和數(shù)據(jù)率6項衛(wèi)星入鎖參數(shù)。
在設(shè)計程序的維護邏輯時,首先需要判斷“/dvbs2/sdb4/log/dvb”路徑下是否已經(jīng)生成了當天的入鎖日志文件。讓維護程序通過“LS”命令獲取日志目錄下所有日志文件的名稱,從而判斷是否包含當前日期的日志文件即可完成判斷過程。在代碼編寫上,由于ChannelExec命令通道支持shell的分隔符,所以在Java中可以使用“/n”換行符來連接多條查詢命令。把切換目錄和文件名顯示命令合并成一條語句后,代碼可以用如下方式組織。
String cmd=”cd ∧ncd/dvbs2/sdb4/log/dvb∧nls/n”:String message=shell.exeeCommand(cmd);
執(zhí)行查詢命令后,維護程序會獲得由所有日志文件名稱組成的字符串。最后判斷該字符串中是否包含當前日期即可確定當前的CMACast日志系統(tǒng)是否正常工作。
在確定當天入鎖日志正常生成之后,可以讓維護程序以日志文件為依據(jù),檢測當前衛(wèi)星的入鎖狀態(tài)。由于系統(tǒng)是在文件尾部逐條添加狀態(tài)參數(shù),所以可以用“tail-n”的命令,直接獲取日志文件尾部的最新狀態(tài)信息。程序可以重點監(jiān)控時間和狀態(tài)兩項參數(shù),當檢測到日志生成異?;蛘咝l(wèi)星入鎖異常時,可以通過短信或語音的方式及時通知網(wǎng)絡管理員。
入鎖故障檢測邏輯如圖1所示。
4.4磁盤清理故障
磁盤清理異常是日常工作中出現(xiàn)幾率最高的故障之一。CMACast系統(tǒng)會依次在“sdbl”“sdb2”和“sdb3”三個路徑下存儲文件。當三個掛載點的空間使用率都達到90%左右時,CMA-Cast系統(tǒng)會選擇清空其中一個文件系統(tǒng)后繼續(xù)儲存文件。但是在日常工作中,磁盤清理功能時常會無法正確工作。這使得數(shù)據(jù)文件堆積達到設(shè)定闕值后無法被系統(tǒng)清空,導致新文件無法正常生成。在實際維護時,管理員通常需要手動重啟操作系統(tǒng)。系統(tǒng)重啟后一般能重新喚醒清理進程再次檢查當前的磁盤狀態(tài),并執(zhí)行相應的清理命令。
由于CMACast系統(tǒng)并未在日志文件內(nèi)記錄硬盤的使用狀態(tài),所以在設(shè)計程序的維護邏輯時,首先需要實時監(jiān)控當前文件系統(tǒng)的使用情況。在維護程序遠程打開CMACast系統(tǒng)的命令通道后,執(zhí)行“dr-h”命令,即可獲取形如圖2的反饋數(shù)據(jù)。其中“/dev/sda5”“/dev/sda6”和“/dev/sda7”三個文件系統(tǒng)分別對應“/dvbs2/sdbl”“/dvbs2/sdb2”和“/dvbs2/sdb3”三個掛載點。正常狀態(tài)下,當這三個掛載點的使用率達到90%時,CMACast系統(tǒng)會直接將對應的文件系統(tǒng)重新格式化。系統(tǒng)執(zhí)行格式化命令的耗時很短,通常在1分鐘以內(nèi)。所以當我們以5分鐘的間隔去定時檢測系統(tǒng)硬盤時,如果累計兩次都檢測到三個文件系統(tǒng)使用率停留在90%,即可確定系統(tǒng)沒能正常清理磁盤空間。
在檢測到系統(tǒng)出現(xiàn)磁盤清理故障之后,需要讓遠端的維護程序代替CMACast進程,在SUSE系統(tǒng)中執(zhí)行分區(qū)格式化的命令。在執(zhí)行格式化命令之前,需要先終止CMACast相關(guān)進程使系統(tǒng)停止繼續(xù)接收衛(wèi)星數(shù)據(jù)。通過讓維護程序執(zhí)行“/home/cmacast/bin”目錄下的“stopdaemon”腳本,即可在系統(tǒng)中停止Recv_daemon、MeidaRecv、FileFtp、CMACast四個進程。在CMACast停止接收數(shù)據(jù)之后,可讓維護程序通過以下四步完成分區(qū)格式化的任務。首先通過執(zhí)行“umount/dvbs2/sdbl”命令卸載“/dev/sda5”分區(qū)的掛載點“/dvbs2/sdbl”,然后讓程序繼續(xù)執(zhí)行“mkfs.reiserfs/dev/sdb5”命令,將“/dev/sda5”分區(qū)重新格式化成reiserfs文件系統(tǒng)。待系統(tǒng)執(zhí)行完畢后用“mount/dev/sda5/dvbs2/sdbl”命令將格式化后的文件系統(tǒng)重新掛載。最后執(zhí)行“chown-R emacast:users/dvbs2/sdbl”命令將cmacast用戶組添加到“/dvbs2/sdbl”。至此維護程序已通過命令行的方式,在遠端完成磁盤清理任務。
磁盤分區(qū)被清空之后,維護程序需要重新運行“/home/cma-cast/bin/”路徑下的start程序來恢復業(yè)務。由于維護程序和服務器之間的交互主要基于SSH協(xié)議來實現(xiàn),遠端無法顯示系統(tǒng)的圖形界面,這導致基于圖形界面運行的CMACast監(jiān)控程序無法被正常運行。想要在無人值守的狀態(tài)下重新恢復業(yè)務,需要在SUSE系統(tǒng)中添加so庫路徑,以便維護程序能夠繞過CMA-CAST監(jiān)控程序,直接啟動數(shù)據(jù)接收和ftp推送進程。通過在“/etc/ld.so.conf”系統(tǒng)文件中添加“/home/cmacast/lib/”路徑即可完成CMACast系統(tǒng)的so庫路徑加載設(shè)置。此時在系統(tǒng)控制臺輸入“l(fā)dd/home/cmacast/bin/Recv_daemon”后可以查看Recv_dae-mOB、MeidaRecv、FileFtp三個進程所要調(diào)用的so庫能否被系統(tǒng)正常加載。最后讓維護程序遠程提交“cd/home/cmacast/bin∧n./star/n./Recv_daemon\n”命令,即可重新恢復衛(wèi)星數(shù)據(jù)的接收和推送。
磁盤清理故障的檢測邏輯如圖3所示。
4.5FTP推送故障
數(shù)據(jù)文件推送是CMACast數(shù)據(jù)接收的最后一環(huán),由進程“filenp”負責主要工作。當數(shù)據(jù)文件在本地成功生成后,會由“filefn)”進程推送至指定的FTP服務器。所以當文件無法及時被推送到數(shù)據(jù)存儲服務器時,其故障可能由CMACast服務器或者FTP服務器異常導致。
在CMACast日志系統(tǒng)的運行邏輯方面,當有數(shù)據(jù)文件推送失敗時,系統(tǒng)會實時記錄下推送時間、推送失敗原因以及文件完整路徑三項內(nèi)容,并以換行符為單項文件分隔標記,保存在路徑“/dvbs2/sdb4/log/fileftp/error/fileftp/”下。日志文件以天為單位獨立保存,當天的新記錄在日志尾部逐條添加,其數(shù)據(jù)格式如圖4所示。其中“[Thread.c 14531”括號內(nèi)標識的“1453”為錯誤代碼,不同的故障原因各對應不同的故障代碼。
在設(shè)計維護程序的運行邏輯時,主要考慮檢測FTP服務器和分析本地FTP推送日志兩個方面。首先檢測FTP服務器是否可用,讓維護程序在遠端用ftp協(xié)議登入資料存儲服務器即可完成檢測任務。當目標ftp服務器發(fā)生異常無法登入時,通過語音播報或手機短信的方式提醒管理員及時維護。在確定遠端FTP服務器正??捎煤?,可繼續(xù)分析CMACast的FTP推送狀態(tài)。
FTP推送狀態(tài)的檢測分析可從兩個方面著手,一方面是檢測“fileftp”進程是否被正常運行。維護程序在遠端提交“ps-A”命令后可獲取包含CMACast服務器所有進程的反饋列表。分析反饋字符中是否包含“fileftp”關(guān)鍵詞即可判斷FTP推送進程是否被正常開啟。如果推送進程未被正常開啟,則CMACast服務器無法執(zhí)行推送任務。另一方面是分析錯誤推送日志。讓維護程序提交“cd/dvbs2/sdb4/log/fileftp/error/fileftpAnls\n”命令,來獲取“fileftp”進程生成的錯誤日志列表。由于系統(tǒng)以“YYYYMMDD.log”的格式來命名日志文件,所以當維護程序發(fā)現(xiàn)有當前日期的日志文件時,則進一步分析文件內(nèi)容。
在冗長的日志文件中,維護程序主要提取三個方面的內(nèi)容。首先是統(tǒng)計FTP推送錯誤的文件總數(shù)。由于系統(tǒng)用逐條添加的方式記錄日志,所以讓維護程序遠程提交“we-l當前日期.log”命令來獲取當前日志文件的總行數(shù),即可得知錯誤文件的總數(shù)。第二是分析近期推送錯誤出現(xiàn)的頻率。如果維護程序發(fā)現(xiàn)CMACast服務器在短時間內(nèi)出現(xiàn)大量FTP推送錯誤時,則用語音或者短信的方式通知管理員及時維護。其代碼組織邏輯是讓維護程序在遠端執(zhí)行“cd/dvbs2/sdb4/log/fileftp/error/fileftp∧ntail-n 100當前日期.log”命令,以便截取當前日志的最后100條錯誤記錄,格式如圖5所示。在獲取錯誤日志后,維護程序逐行分析錯誤推送的發(fā)生時間,并統(tǒng)計最近5分鐘內(nèi)所發(fā)生的錯誤次數(shù)。當統(tǒng)計值超過報警闕值時,維護程序?qū)㈤_始分析PrP推送出錯的主要原因。維護程序要提取的第三項內(nèi)容是近期出現(xiàn)頻率最高的錯誤代碼。不同的錯誤代碼意味著不同的推送異常原因,分析并提煉出近期出現(xiàn)次數(shù)頻率最高的故障代碼,將對系統(tǒng)的維護工作有著重要的參考價值。在代碼邏輯方面,利用統(tǒng)計第二項內(nèi)容時所截取的部分日志,進一步統(tǒng)計各類錯誤代碼出現(xiàn)的次數(shù)。錯誤代碼以“Thread.c”為開始標識,以之后第一次出現(xiàn)的“1:”符號為結(jié)束標識,截取這兩者間的字符串即可。通過對系統(tǒng)日志這三方面內(nèi)容的提取和分析,維護程序不僅能夠在FTP系統(tǒng)運行的過程中及時發(fā)現(xiàn)問題,還能歸納出錯誤原因供管理員參考。其程序邏輯如圖5所示。
5通道文件的統(tǒng)計與監(jiān)控
通道文件的接收狀態(tài)被設(shè)計在CMACast監(jiān)控程序的首頁,在界面左側(cè)占據(jù)著較大的版位。界面中時刻變化的接收文件數(shù)量,猶如心跳包一般,直接示意著當前系統(tǒng)的運行狀態(tài)。在傳統(tǒng)的維護工作中,通道組的文件接收狀態(tài)只能通過電腦顯示器進行監(jiān)控,其監(jiān)控方式和維護效率有很大的局限性。讓維護程序通過SSH協(xié)議遠程登入系統(tǒng)后,可以在無人值守的狀態(tài)下實時查詢各個通道組的文件接收狀態(tài),并借由WebService平臺向手機、網(wǎng)站等多端推送。
在CMACast日志系統(tǒng)的運行邏輯方面,當相應的通道有數(shù)據(jù)文件被接收時,會在“/dvbs2/sdb4/log/chan/”路徑下實時記錄兩類以“chan”字符開頭的日志文件。分別是“l(fā)og”結(jié)尾的完整接收文件日志和“err”結(jié)尾的未完整接收文件日志,其名稱為“chan通道號YYYYMMDD”。日志記錄仍以向文件尾部逐行添加的方式,記錄每個文件的完整路徑。
CMACast系統(tǒng)通過不同的通道組來分發(fā)各種類型的氣象數(shù)據(jù),不同的通道組由各種通道號組成,其分類與對應關(guān)系如圖7所示。在設(shè)計維護程序的運行邏輯時,只需統(tǒng)計每個通道號對應日志文件的行數(shù)后相加匯總,即可完成各個通道組的文件接收狀態(tài)提取。組織代碼時,只要讓維護程序向服務器提交“wc-1日志文件路徑”命令后獲取反饋,最后按照圖6的分組方式匯總所有數(shù)據(jù)即可完成信息提取。
6執(zhí)行效率評估
維護程序在遠程登人CMACast服務器后,需要對系統(tǒng)進程、硬盤狀態(tài)、CMACast運行日志進行統(tǒng)計和提取。雖然每次維護所涉及的資料達數(shù)百萬行,但由于采用了文件行數(shù)統(tǒng)計和文件尾部資料提取等特殊的優(yōu)化方法,使得程序整體的執(zhí)行速度非??捎^。為驗證其執(zhí)行效率,設(shè)定程序檢測項目如圖7所示,執(zhí)行維護并作出反應的平均耗時為45秒左右。
7總結(jié)與討論
維護程序通過SSH協(xié)議,可以遠程提取CMACast接收服務器的各項運行狀態(tài)。在程序分析各項運行參數(shù)的同時結(jié)合人工維護的一些經(jīng)驗,針對性得設(shè)計一系列智能維護邏輯,可以實現(xiàn)在無人值守的狀態(tài)下自動處理大部分運行故障。維護程序在提取CMACast系統(tǒng)的各項運行狀態(tài)后,通過數(shù)據(jù)庫和WebService平臺,可以實現(xiàn)向網(wǎng)頁、手機等多端分發(fā)系統(tǒng)狀態(tài)信息。
基于SSH協(xié)議的CMACast智能維護系統(tǒng),通過對監(jiān)控方式和維護手段的改進,打破了傳統(tǒng)維護工作的各種局限,增加了發(fā)現(xiàn)問題的主動性,提高了工作效率,使得整個維護工作更加智能化。
[通聯(lián)編輯:謝媛媛]