鄭琳
(中國民用航空汕頭空中交通管理站,汕頭 515000)
空管智能化的進(jìn)一步發(fā)展,空管自動(dòng)化系統(tǒng)成為一個(gè)數(shù)據(jù)豐富、邏輯復(fù)雜的綜合信息處理系統(tǒng)。為了提高運(yùn)維能力和效率,根據(jù)民航局空管局的行業(yè)標(biāo)準(zhǔn)要求,空管自動(dòng)化廠家提供了相關(guān)的系統(tǒng)運(yùn)行日志。日志文件的記錄雖然對(duì)運(yùn)維人員在排查故障時(shí)發(fā)揮著重要作用,但是,當(dāng)前日志普遍存在信息冗余度高、邏輯設(shè)計(jì)復(fù)雜等特點(diǎn),導(dǎo)致采用人工診斷的方式逐行檢查日志耗時(shí)相對(duì)較長、全面性相對(duì)較差,難以滿足高效率、高質(zhì)量的運(yùn)維要求。因此,通過日志分析系統(tǒng)對(duì)系統(tǒng)日志進(jìn)行科學(xué)的分析和重現(xiàn)對(duì)技術(shù)保障部門運(yùn)維人員有著切實(shí)可行的意義。本文根據(jù)中國民用航空汕頭空中交通管理站(以下簡稱民航汕頭空管站)的空管自動(dòng)化系統(tǒng)在實(shí)際應(yīng)用中的工作經(jīng)驗(yàn),提出一種日志分析方法并通過軟件設(shè)計(jì)實(shí)現(xiàn)。
空管自動(dòng)化系統(tǒng)主要分為雷達(dá)數(shù)據(jù)處理和飛行計(jì)劃處理兩個(gè)部分。在雷達(dá)數(shù)據(jù)處理過程中除了飛行位置和姿態(tài)等顯示外,管制員最密切關(guān)注和時(shí)常反饋的即是飛行航班的相關(guān)狀態(tài)。軟件設(shè)計(jì)以民航汕頭空管站所采用的南京萊斯空管自動(dòng)化系統(tǒng)NUMEN2000為例,主要針對(duì)系統(tǒng)在FDP服務(wù)器/home/atc/log/fdp_log路徑下部署的AllLog*.log(以下簡稱AllLog日志)和RDP服務(wù)器/home/atc/log/radar_log路徑下部署的*_SDP_couple.log(以下簡稱couple日志)多類型日志進(jìn)行合并分析和重現(xiàn)。系統(tǒng)日志以每小時(shí)一個(gè)文本文件的形式存儲(chǔ),目前每個(gè)AllLog日志平均有六萬行,每個(gè)couple日志平均有一萬行。而從一個(gè)航班計(jì)劃的生成到結(jié)束,航班生命周期普遍需要經(jīng)歷4-6個(gè)小時(shí),這無疑對(duì)人工診斷和故障排查增加了難度。因此,如何基于廠家開發(fā)人員編寫的系統(tǒng)日志產(chǎn)生規(guī)則,梳理、分析系統(tǒng)已產(chǎn)生日志的具體內(nèi)容和規(guī)則是軟件系統(tǒng)實(shí)現(xiàn)和快速定位故障的關(guān)鍵性步驟。
軟件主要通過C#設(shè)計(jì)實(shí)現(xiàn),將日志文件中的記錄提取并轉(zhuǎn)換為滿足使用需求的結(jié)構(gòu)化描述。首先通過文件流遍歷項(xiàng)目指定路徑下的已采集到的日志文件的所有行,再逐行解析,通過正則表達(dá)式匹配、解析目標(biāo)數(shù)據(jù)字段等預(yù)處理并存儲(chǔ)到航班類objectPLAN對(duì)象屬性中。方法關(guān)注、解析的字段包含有:日志記錄時(shí)刻、航班號(hào)、二次代碼、24位地址碼、計(jì)劃狀態(tài)、相關(guān)狀態(tài)、相關(guān)因素/相關(guān)結(jié)果、雷達(dá)狀態(tài)、起飛/落地機(jī)場、預(yù)起/實(shí)起時(shí)間、飛行總時(shí)間、實(shí)落時(shí)間、航路固定點(diǎn)、預(yù)計(jì)過點(diǎn)時(shí)間、出界點(diǎn)/時(shí)間、入界點(diǎn)/時(shí)間、報(bào)文、扇區(qū)、航跡號(hào)、計(jì)劃號(hào)、FIPS系統(tǒng)推送標(biāo)識(shí)等80個(gè)航班類相關(guān)的屬性(含12個(gè)屬性變化值標(biāo)識(shí))。如匹配AllLog日志日志行的status字段而非日志塊中的STATUS作為航班計(jì)劃狀態(tài)屬性的描述,C#正則表達(dá)式可以設(shè)計(jì)如下:“Regex reg_status=new Regex("status(?:=|:)(.+?(,|))")”。
每個(gè)日志行的內(nèi)容格式各不相同,包含的目標(biāo)數(shù)據(jù)字段也有差異。根據(jù)實(shí)際日志結(jié)構(gòu),可以將日志解析分為日志行解析和日志塊解析。日志行解析通過該行逐字段匹配,生成一個(gè)航班類對(duì)象、過濾不重要信息并將可以匹配到的字段值存儲(chǔ)到定義的對(duì)象屬性中。日志塊解析通過匹配塊首行的字符串格式,連續(xù)性地讀取后續(xù)多行日志,根據(jù)分類生成一個(gè)或多個(gè)航班類對(duì)象。這里提到的日志行和日志塊(連續(xù)的多行日志)同時(shí)分布在同一個(gè)日志文件中且一般多次穿插出現(xiàn)。區(qū)分日志行符合日志行解析還是日志塊解析只能通過匹配塊首行字符串的多種可能性正則表達(dá)式來實(shí)現(xiàn),滿足匹配的實(shí)施對(duì)應(yīng)類型日志塊的邏輯解析,不滿足的則實(shí)施日志行解析。
其中日志塊解析的識(shí)別格式有以下兩種,如圖1。
(1)“固定點(diǎn)日志塊”,通過解析塊首行的num字段值遍歷后續(xù)值數(shù)量的日志行,將塊首行的航班號(hào)字段值和計(jì)劃號(hào)字段值賦值給后續(xù)多行類對(duì)象的對(duì)應(yīng)屬性;即塊首行不生成類對(duì)象,首行后的num行日志都生成一個(gè)類對(duì)象,屬性既包括本行解析字段,也包括塊首行的航班號(hào)和計(jì)劃號(hào)屬性。
(2)“相關(guān)信息日志塊”,通過解析塊首行的格式,遍歷后續(xù)8行日志,合并所有字段從而生成一個(gè)類對(duì)象;即整個(gè)日志塊只生成一個(gè)類對(duì)象,屬性由塊內(nèi)所有行(含塊首行)日志能夠解析的字段組成。
軟件定義鏈表(LinkedList)作為存儲(chǔ)一系列航班類對(duì)象的數(shù)據(jù)結(jié)構(gòu)。軟件依次遍歷AllLog日志和couple日志所有行后,生成多個(gè)帶有時(shí)標(biāo)(日志記錄時(shí)刻屬性,格式為yyyyMMddHHmmss,精確到秒)的航班類對(duì)象。同時(shí),需要經(jīng)歷條件篩選、鏈表插入、對(duì)象去重、對(duì)象合并等多個(gè)中間步驟才能生成一個(gè)完整的、無冗余、合理的以時(shí)間為線索的滿足航班排查的鏈表。在條件篩選步驟中,軟件設(shè)置有前臺(tái)交互窗口,運(yùn)維人員可以選擇排查航班的屬性并輸入對(duì)應(yīng)的屬性值,可選屬性有航班號(hào)、二次代碼或地址碼。軟件后臺(tái)會(huì)根據(jù)輸入的航班屬性值匹配所有航班類對(duì)象,匹配成功的才能實(shí)施鏈表插入。而對(duì)象合并指的是因存在多行時(shí)標(biāo)一致的日志(即可能存在多個(gè)時(shí)標(biāo)但屬性或?qū)傩灾挡灰粯拥暮桨囝悓?duì)象),故針對(duì)同個(gè)時(shí)標(biāo)的多個(gè)航班類對(duì)象進(jìn)行合并。該步驟既要將包含有不同屬性的日志行對(duì)象合并,也需要將有值更新的對(duì)象屬性進(jìn)行合并,從而合并成單一時(shí)刻的鏈表對(duì)象,以滿足合理化的對(duì)象鏈表設(shè)計(jì),具體流程可以參考圖2。
圖1 日志解析
圖2 系統(tǒng)實(shí)現(xiàn)流程
排查故障時(shí),技術(shù)人員會(huì)著重關(guān)注日志中可能引發(fā)事件變化的屬性和發(fā)生變化的時(shí)間節(jié)點(diǎn)。因此,軟件運(yùn)用該種排查思路來實(shí)現(xiàn)下一步的日志分析和重現(xiàn),故將航班類對(duì)象的部分關(guān)鍵屬性(以下簡稱基礎(chǔ)屬性)進(jìn)行值比較,同時(shí)將結(jié)果存儲(chǔ)到對(duì)象定義的“屬性變化值標(biāo)識(shí)”屬性中(以下簡稱變化值屬性),以便將這些變化值屬性的特定值作為判斷航班事件變化的節(jié)點(diǎn),從而幫助實(shí)現(xiàn)系統(tǒng)對(duì)于數(shù)據(jù)處理過程的重現(xiàn)。同時(shí),考慮到航班類對(duì)象有newstatus新狀態(tài)值和oldstatus舊狀態(tài)值的字段解析,可以在一定程度還原系統(tǒng)對(duì)于status基礎(chǔ)屬性的變化處理,因此也加入到生成航班類status_change變化值屬性的生成邏輯中。
各變化值屬性定義的關(guān)聯(lián)基礎(chǔ)屬性包括有,二次代碼、24位地址碼、計(jì)劃狀態(tài)、扇區(qū)、雷達(dá)狀態(tài)、相關(guān)狀態(tài)、報(bào)文、相關(guān)因素/結(jié)果、航跡號(hào)。軟件會(huì)遍歷已生成的完整鏈表,首先通過比較每一個(gè)對(duì)象與前一個(gè)對(duì)象的基礎(chǔ)屬性是否一致來定義布爾類型的變化值屬性值。即若前后對(duì)象的基礎(chǔ)屬性值不同,則該對(duì)象的變化值屬性值為true。其中,因考慮到某對(duì)象需要比較的基礎(chǔ)屬性可能存在沒有屬性描述和屬性值為空的區(qū)別,故當(dāng)被比較的對(duì)象沒有基礎(chǔ)屬性的描述時(shí),算法會(huì)往鏈表頭方向繼續(xù)比較,直到找到有該基礎(chǔ)屬性描述的對(duì)象才終止該項(xiàng)比較。
根據(jù)民航汕頭空管站對(duì)于所屬NUMEN2000的運(yùn)行經(jīng)驗(yàn)及廠家的協(xié)助,現(xiàn)此梳理并形成現(xiàn)場空管自動(dòng)化系統(tǒng)對(duì)于數(shù)據(jù)處理過程的日志知識(shí)庫(產(chǎn)生規(guī)則)來實(shí)現(xiàn)日志分析與數(shù)據(jù)重現(xiàn)。飛行計(jì)劃生命周期,管理著一個(gè)航班飛行計(jì)劃由生成到取消全過程的狀態(tài)轉(zhuǎn)變?,F(xiàn)場的空管自動(dòng)化系統(tǒng)飛行計(jì)劃狀態(tài)主要有,未來狀態(tài)(FUR)、靜止?fàn)顟B(tài)(NACT)、預(yù)激活狀態(tài)(PREA)、激活狀態(tài)(ACT)、終止?fàn)顟B(tài)(FIN)和取消狀態(tài)(CNL)。不同的觸發(fā)事件和飛行事件,可能推動(dòng)生命周期的發(fā)展,導(dǎo)致計(jì)劃狀態(tài)的改變和航班的相關(guān)狀態(tài)改變。而報(bào)文和相關(guān)因素作為觸發(fā)事件的關(guān)鍵因素,主要借助航班類對(duì)象定義的變化值屬性來分析處理過程日志。因此,形成了以報(bào)文、計(jì)劃狀態(tài)、二次代碼、24位地址碼、時(shí)間檢查、航路檢查、相關(guān)狀態(tài)、相關(guān)結(jié)果、航跡號(hào)為首要因素的日志知識(shí)庫。在首要因素的判斷條件下,再開展多條匹配規(guī)則的層次化判斷,輔以進(jìn)行異常提示,以形成一份完整的、準(zhǔn)確的、合理的日志重現(xiàn)報(bào)告,從而幫助技術(shù)保障人員進(jìn)行故障事件排查。最終形成的軟件界面實(shí)現(xiàn)如圖3。
圖3 軟件平臺(tái)界面
本文以民航汕頭空管站運(yùn)行現(xiàn)場的NUMEN2000空管自動(dòng)化系統(tǒng)關(guān)于數(shù)據(jù)處理過程在日志中的記錄為基礎(chǔ),同時(shí)考慮飛行航班的基礎(chǔ)屬性和觸發(fā)事件的關(guān)鍵因素,提出一種空管自動(dòng)化日志分析方法,并通過軟件設(shè)計(jì)實(shí)現(xiàn)?,F(xiàn)場通過真實(shí)案例驗(yàn)證了軟件的實(shí)用性和準(zhǔn)確性,可以有效提高技術(shù)保障人員快速排查和定位故障,具有良好的實(shí)際應(yīng)用性能。