国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

控制系統(tǒng)軟件的日志功能設(shè)計(jì)

2011-06-05 10:19:44徐萌飛王軍玲
船電技術(shù) 2011年7期
關(guān)鍵詞:日志內(nèi)存子系統(tǒng)

徐萌飛 王軍玲

( 中國(guó)船舶重工集團(tuán)公司第七一二研究所,武漢 430064 )

1 引言

日志功能作為軟件系統(tǒng)的重要組成部分,在記錄軟件運(yùn)行狀態(tài)、調(diào)測(cè)和故障定位方面發(fā)揮著重要的作用。在船舶系統(tǒng)中,控制系統(tǒng)要長(zhǎng)期頻繁地和其他子系統(tǒng)進(jìn)行信息交互??刂葡到y(tǒng)除了發(fā)出控制指令,還要從事被控制對(duì)象的狀態(tài)信息采集,檢測(cè)控制指令的執(zhí)行情況等多個(gè)動(dòng)作,觸發(fā)事件多,實(shí)時(shí)性要求高,所以準(zhǔn)確高效的日志是控制系統(tǒng)必需功能。

在控制系統(tǒng)軟件的設(shè)計(jì)過(guò)程中,為滿足實(shí)際運(yùn)行需求,日志功能要經(jīng)過(guò)全面設(shè)計(jì),使用高效、可靠的實(shí)現(xiàn)方式,才能夠在實(shí)際運(yùn)行中充分發(fā)揮其功用。本文將對(duì)日志記錄功能的軟件設(shè)計(jì)的若干要點(diǎn)及其實(shí)現(xiàn)方法進(jìn)行探討,為后續(xù)軟件日志功能的設(shè)計(jì)和開發(fā)工作提供參考。

2 日志功能模塊應(yīng)保持統(tǒng)一性

在軟件中,一般采用統(tǒng)一的日志記錄函數(shù)來(lái)完成日志功能,或者使用統(tǒng)一的對(duì)象來(lái)處理日志。要盡量避免在每一處需要記錄日志的地方單獨(dú)使用代碼實(shí)現(xiàn)日志功能。

使用統(tǒng)一的日志模塊具有如下優(yōu)勢(shì):

(1)減少無(wú)價(jià)值的重復(fù)開發(fā)量

在日志中,每記錄一條日志都單獨(dú)編寫日志代碼,造成代碼冗余。而反復(fù)調(diào)用基本的輸入輸出語(yǔ)句(如文件的打開和關(guān)閉),導(dǎo)致效率低下。

(2)因需求變化導(dǎo)致的修改量小

采用共用日志模塊函數(shù)或?qū)ο蠓椒?,?duì)日志記錄格式或者內(nèi)容提出了新的需求,只需要一處修改,即可全面生效。而單獨(dú)使用代碼記錄的,可能需要處處修改。

3 日志記錄內(nèi)容要保證完整性

日志作為記錄程序運(yùn)行過(guò)程的載體,必須能夠完整記錄下運(yùn)行時(shí)間,運(yùn)行對(duì)象,執(zhí)行動(dòng)作,執(zhí)行結(jié)果,執(zhí)行前狀態(tài)量,執(zhí)行后狀態(tài)量等信息,這樣在發(fā)生故障后才能追根溯源。國(guó)外已經(jīng)有很多成熟軟件和相應(yīng)的技術(shù)規(guī)范。

以UNIX下的syslog為例,它已經(jīng)形成了一種事實(shí)上的工業(yè)標(biāo)準(zhǔn),其日志記錄格式按RFC3164 (The BSD log protocol)定義,并對(duì)消息頭部進(jìn)行擴(kuò)展,其格式為:

<優(yōu)先級(jí)>時(shí)間戳 主機(jī)名 模塊名/級(jí)別/信息摘要:內(nèi)容

<priority>time stamp sysname module/level/digest:content

控制系統(tǒng)軟件的日志格式,可以參考這類方式實(shí)現(xiàn)。

在以往的日志功能設(shè)計(jì)過(guò)程中,往往容易遺漏對(duì)代碼執(zhí)行前狀態(tài)量的記錄,導(dǎo)致在回溯日志時(shí)會(huì)凸現(xiàn)其缺陷。例如:系統(tǒng)發(fā)生了無(wú)法重現(xiàn)的問(wèn)題,如果從代碼邏輯上檢視不出問(wèn)題,而又缺乏對(duì)執(zhí)行前系統(tǒng)狀態(tài)量的記錄,就不能確定代碼執(zhí)行前系統(tǒng)是否處于正常工作狀態(tài),也無(wú)法定位是哪部分子系統(tǒng)故障或者硬件功能失效。

在主控系統(tǒng)和各個(gè)子系統(tǒng)共同運(yùn)行的情況下,尤其是聯(lián)調(diào)過(guò)程中,各個(gè)子系統(tǒng)不能因?yàn)橹飨到y(tǒng)在記錄日志信息就放棄自身的日志功能。因?yàn)樵谥骺叵到y(tǒng)和子系統(tǒng)接口信息傳遞過(guò)程中,子系統(tǒng)日志和主控系統(tǒng)日志之間可以相互印證。缺少了子系統(tǒng)的日志作為判斷依據(jù),會(huì)增加對(duì)消息傳遞通道以及子系統(tǒng)接口功能模塊的檢查成本。

4 日志記錄時(shí)間要保證精度

控制系統(tǒng)的動(dòng)作往往是具有時(shí)序性的,而且集散控制系統(tǒng)中,更是采用集中管理、分散控制,所以保證日志記錄精度對(duì)后期分析尤為重要。

當(dāng)控制系統(tǒng)啟動(dòng)后,一個(gè)重要的原則是必須有一個(gè)可靠的時(shí)間基準(zhǔn),即統(tǒng)一的時(shí)間源。在多個(gè)子系統(tǒng)的動(dòng)作具有時(shí)序關(guān)系或者相互影響的情況下,如果沒(méi)有統(tǒng)一的時(shí)間基準(zhǔn),將無(wú)法根據(jù)日志確定故障發(fā)生的時(shí)間,以及確定當(dāng)時(shí)各個(gè)系統(tǒng)所處的狀態(tài),更無(wú)法找到問(wèn)題發(fā)生的根源。

建立統(tǒng)一時(shí)間基準(zhǔn)的方法有多種,在系統(tǒng)要求不高的情況下,一般可以利用系統(tǒng)內(nèi)部的晶振時(shí)鐘。精度要求高的情況下,可以引入外部高精度時(shí)鐘。外部時(shí)鐘的引入,可以通過(guò)外部時(shí)鐘硬件,也可以通過(guò)網(wǎng)絡(luò)獲取標(biāo)準(zhǔn)時(shí)間。

在與外界通訊隔絕的封閉式系統(tǒng)中,由于沒(méi)有獲取標(biāo)準(zhǔn)時(shí)間的條件,則需要盡可能將系統(tǒng)(一般是主控系統(tǒng))的初始上電時(shí)間作為其內(nèi)部時(shí)鐘的日志記錄起點(diǎn)時(shí)間。各子系統(tǒng)上電后也要通過(guò)通訊接口與主控系統(tǒng)進(jìn)行時(shí)鐘同步,來(lái)保證后續(xù)日志記錄在時(shí)間維度上的一致性。

在控制系統(tǒng)對(duì)處理精度要求較高的情況下,有的子系統(tǒng)本身會(huì)帶有時(shí)鐘,雖然子系統(tǒng)可以靠自身的時(shí)鐘來(lái)記錄時(shí)間,但是在進(jìn)行業(yè)務(wù)循環(huán)時(shí),子系統(tǒng)仍需要在每次業(yè)務(wù)處理開始時(shí),和主控系統(tǒng)進(jìn)行一次時(shí)間再同步。如果不做這個(gè)同步的動(dòng)作,那么在子系統(tǒng)時(shí)鐘和主控系統(tǒng)時(shí)鐘精度不同的情況下,隨著業(yè)務(wù)循環(huán)次數(shù)增加,時(shí)間偏差將積累擴(kuò)大,一旦經(jīng)過(guò)多次業(yè)務(wù)循環(huán)后發(fā)生故障,則兩個(gè)系統(tǒng)之間日志記錄的時(shí)序匹配關(guān)系會(huì)發(fā)生偏差,會(huì)很大程度上干擾問(wèn)題定位。

5 日志記錄要保證準(zhǔn)確性

在故障日志記錄的功能設(shè)計(jì)中,都需要對(duì)錯(cuò)誤進(jìn)行編號(hào)和分類工作,分類的依據(jù)有多種,例如有的系統(tǒng)按不同軟件模塊產(chǎn)生的錯(cuò)誤進(jìn)行編號(hào),有的按不同錯(cuò)誤類型進(jìn)行分類編號(hào)。開發(fā)人員定義了錯(cuò)誤號(hào)后,在內(nèi)部要保留一份錯(cuò)誤號(hào)列表,便于故障出現(xiàn)后的快速檢索。例如可以使用如表1格式:

表1 故障日志中錯(cuò)誤的編號(hào)和分類

尤其需要注意的是,只要是能夠詳細(xì)區(qū)分的錯(cuò)誤,應(yīng)當(dāng)使用不同的錯(cuò)誤號(hào)進(jìn)行標(biāo)識(shí)。否則故障發(fā)生后,沒(méi)有唯一的故障原因與之對(duì)應(yīng),會(huì)給定位帶來(lái)冗余的工作量。

最后,在多個(gè)進(jìn)程同時(shí)運(yùn)行的情況下,建議每個(gè)進(jìn)程分別記錄自己的日志。如果多個(gè)進(jìn)程使用同一個(gè)日志文件,往往導(dǎo)致資源沖突,并且各個(gè)進(jìn)程記錄的日志相互交錯(cuò),不便于日后查看。

6 日志記錄應(yīng)考慮保密性

由于日志記錄了整個(gè)業(yè)務(wù)運(yùn)行流程,所以未經(jīng)加密保護(hù)的日志可能被逆向分析或者被篡改,從而導(dǎo)致系統(tǒng)架構(gòu)和設(shè)計(jì)方面的泄密,甚至導(dǎo)致軟件系統(tǒng)被攻擊,給廠商帶來(lái)安全隱患和知識(shí)產(chǎn)權(quán)隱患。例如在電信行業(yè)曾經(jīng)出現(xiàn)過(guò)由于充值日志被逆向分析,導(dǎo)致充值卡被偽造盜用的情況。其次,由于日志透露了詳細(xì)運(yùn)行信息,尤其是故障發(fā)生后,日志記錄功能為了便于后續(xù)定位,往往全面記錄故障發(fā)生時(shí)系統(tǒng)狀態(tài)和故障產(chǎn)生原因,一旦被他人獲取,可能給相關(guān)廠商帶來(lái)商業(yè)上的糾紛和損失。例如某些市場(chǎng)關(guān)系不好的客戶會(huì)根據(jù)日志提供的信息夸大造成的損失向供應(yīng)商提出索賠。在軍用方面,日志的泄露,不僅會(huì)導(dǎo)致系統(tǒng)設(shè)計(jì)缺陷暴露,還可能導(dǎo)致軍用設(shè)備運(yùn)行狀態(tài)失密。例如,如果未被加密的日志中記錄了設(shè)備運(yùn)行周期時(shí)間或GPS定位的位置信息,則一旦信息流失,可能導(dǎo)致設(shè)備性能參數(shù)被泄露或船舶運(yùn)行航線被暴露。

故此,很多軟件中也開始增強(qiáng)了對(duì)日志的保護(hù)。不少?gòu)S商采用加密方式記錄日志,用普通軟件無(wú)法查看其內(nèi)容,必須通過(guò)廠商提供的專有軟件進(jìn)行解密處理。

7 日志記錄應(yīng)該采用分級(jí)和開關(guān)控制

控制系統(tǒng)運(yùn)行時(shí),產(chǎn)生的日志和告警信息很多,如果都向上位機(jī)控制臺(tái)轉(zhuǎn)發(fā),存在如下弊端,

(1)重要信息往往被海量的普通信息所掩蓋,無(wú)法引起運(yùn)維人員關(guān)注,增大了系統(tǒng)失控的概率;

(2)日志中大量出現(xiàn)的告警會(huì)引起用戶的反感,甚至給客戶帶來(lái)軟件質(zhì)量不穩(wěn)定的感覺(jué)。

所以,日志記錄使用分級(jí)和開關(guān)控制顯示已成為軟件設(shè)計(jì)的必要因素。國(guó)外成熟的系統(tǒng)軟件,都對(duì)日志和告警進(jìn)行了分級(jí)定義,仍以syslog為例,將日志分為八種安全級(jí)別,分別代表不同的含義,如表2。

對(duì)于日志級(jí)別為0-3的消息,系統(tǒng)應(yīng)該以非常明顯的顯示方式和提醒方式將信息傳遞給運(yùn)維人員,例如用紅色或大字體傳遞到上位機(jī),同時(shí)發(fā)出聲音告警,甚至可以發(fā)送警告短信到運(yùn)維人員手機(jī),啟動(dòng)呼叫中心來(lái)呼叫運(yùn)維人員。

表2 八種安全級(jí)別日志的含義

對(duì)于3級(jí)以下的信息,可根據(jù)實(shí)際需求,使用開關(guān)進(jìn)行控制日志顯示。例如處于5級(jí)的通知信息,就可以考慮在平時(shí)關(guān)閉顯示開關(guān)而不上傳到上位機(jī),僅錄入日志文件。處于6-7級(jí)的信息,只在軟件調(diào)測(cè)或聯(lián)調(diào)故障定位時(shí)才打開記錄開關(guān),平時(shí)運(yùn)行時(shí)關(guān)閉,軟件不會(huì)把調(diào)試信息記錄到文件中,從而節(jié)省了存儲(chǔ)空間和處理時(shí)間。

另外,隨著積累的日志不斷增加,未來(lái)對(duì)數(shù)據(jù)進(jìn)行整理和分析的需要也會(huì)產(chǎn)生。對(duì)于長(zhǎng)期運(yùn)行的控制系統(tǒng),建議在記錄日志信息時(shí)使用標(biāo)準(zhǔn)化的格式,便于后續(xù)使用分析軟件做數(shù)據(jù)挖掘和智能分析。

8 日志記錄功能設(shè)計(jì)要考慮到實(shí)際硬件平臺(tái)特點(diǎn)

由于控制系統(tǒng)軟件不是孤立對(duì)象,其運(yùn)行與操作系統(tǒng)和系統(tǒng)所在的硬件平臺(tái)有密切的關(guān)系,尤其是嵌入式系統(tǒng),更需要仔細(xì)分析。

8.1 存儲(chǔ)容量的影響

雖然目前計(jì)算機(jī)的存儲(chǔ)能力在不斷增強(qiáng),但在很多情況下,從設(shè)備占用空間和成本考慮,還是有不少系統(tǒng)提供的存儲(chǔ)空間容量有限。如一些ARM板上使用的存儲(chǔ)芯片,只有幾 k的存儲(chǔ)空間,一旦記錄內(nèi)容過(guò)多,就可能造成空間不足而記錄失敗。在這種情況下,要考慮精簡(jiǎn)日志內(nèi)容或者使用壓縮編碼格式減少空間占用。

此外,基于某些操作系統(tǒng)運(yùn)行的軟件,如果長(zhǎng)時(shí)間記錄日志,會(huì)導(dǎo)致日志文件過(guò)大,延長(zhǎng)了后續(xù)寫日志時(shí)每次打開文件的速度。甚至當(dāng)文件大小超過(guò)了操作系統(tǒng)可以支持上限時(shí),(例如某些版本的UNIX文件,如果不打開大文件開關(guān),會(huì)有2G大小的限制),可能會(huì)發(fā)生日志文件被破壞或者日志記錄丟失的情況。

故此,對(duì)長(zhǎng)期運(yùn)行且產(chǎn)生日志數(shù)據(jù)量大的系統(tǒng),要設(shè)計(jì)定期備份和壓縮打包機(jī)制,將歷史日志記錄轉(zhuǎn)存到系統(tǒng)外大容量介質(zhì)(如磁帶機(jī))上。

8.2 日志記錄機(jī)制的影響

一些存儲(chǔ)芯片或者操作系統(tǒng),在每次重新記錄數(shù)據(jù)時(shí),使用的寫入機(jī)制不是清空機(jī)制而是復(fù)寫機(jī)制。即存儲(chǔ)介質(zhì)上的舊數(shù)據(jù)不被清除,而使用從首地址記錄,用新記錄來(lái)覆蓋掉原記錄。例如在某嵌入式軟件設(shè)計(jì)中,使用了flash芯片做日志存儲(chǔ),整個(gè)業(yè)務(wù)處于不斷循環(huán)中。在每次循環(huán)開始時(shí),都重新記錄日志。由于使用了覆寫機(jī)制,剛開始多次業(yè)務(wù)流程都是成功的,但在某次業(yè)務(wù)循環(huán)過(guò)程中發(fā)生了故障,系統(tǒng)日志記錄也被中斷,結(jié)果發(fā)現(xiàn)舊的運(yùn)行成功的日志記錄的后半部分和新的業(yè)務(wù)運(yùn)行的前半部分混淆在一起。加上只在每次業(yè)務(wù)循環(huán)開始時(shí)加上了時(shí)間戳,在后續(xù)日志記錄過(guò)程中沒(méi)有繼續(xù)加時(shí)間戳。故此,當(dāng)故障發(fā)生后,定位缺陷時(shí),查看日志仍以為是一份成功的日志,無(wú)法確認(rèn)程序運(yùn)行時(shí)發(fā)生故障的時(shí)間以及存在缺陷的代碼。如圖1所示。

圖1 存在缺陷的日志

為避免這種情況發(fā)生,一般建議在記錄每條日志信息時(shí),帶上時(shí)間戳標(biāo)記。如圖2所示。

如果實(shí)在無(wú)法建立時(shí)間戳標(biāo)記,可以通過(guò)日志流水號(hào)來(lái)區(qū)分。具體做法是,在存儲(chǔ)區(qū)使用一個(gè)專用地址區(qū)來(lái)記錄當(dāng)前最大的日志流水號(hào)。在每次需要記錄日志時(shí),將最大流水號(hào)累加,更新到專用地址區(qū),此最大流水號(hào)也包含在日志記錄中。這樣即使采用覆蓋式寫入的日志內(nèi)容,也能夠通過(guò)不同的流水號(hào)段來(lái)區(qū)分,如圖3所示。

圖2 帶時(shí)間戳標(biāo)記日志

圖3 流水號(hào)日志

日志模塊對(duì)此部分過(guò)程處理的流程圖如圖4。

8.3 存儲(chǔ)速度的影響

在很多實(shí)時(shí)控制系統(tǒng)中,由于系統(tǒng)硬件性能的限制,隨著日志內(nèi)容的增加,記錄的讀寫速度會(huì)越來(lái)越低,而且頻繁打開和關(guān)閉文件也會(huì)占用系統(tǒng)資源。在這種情況下,也要考慮精簡(jiǎn)日志,或者通過(guò)日志開關(guān)減少不重要的日志記錄動(dòng)作。

可以考慮的一種設(shè)計(jì)是,在系統(tǒng)具有富余內(nèi)存時(shí),可借助更高性能的內(nèi)存來(lái)提高日志記錄效率。例如程序在進(jìn)行業(yè)務(wù)流程循環(huán)時(shí),如果內(nèi)存足夠大,可以申請(qǐng)一塊內(nèi)存作為內(nèi)存日志記錄區(qū)。每次業(yè)務(wù)流程開始后,通過(guò)日志開關(guān)控制將當(dāng)前日志信息寫入內(nèi)存日志區(qū),等業(yè)務(wù)流程處理結(jié)束時(shí),切換日志開關(guān),一次性將內(nèi)存日志記錄到硬盤中,形成硬盤上的日志文件。當(dāng)業(yè)務(wù)流程處理過(guò)程中發(fā)生中斷或者錯(cuò)誤時(shí),也通過(guò)控制參數(shù)調(diào)用日志記錄函數(shù)或方法,一次性將內(nèi)存日志記錄到硬盤中。日志函數(shù)的流程圖如圖5。

這樣處理的方式有幾個(gè)優(yōu)點(diǎn):

1) 寫入內(nèi)存速度比硬盤速度高近百倍,因此整個(gè)日志記錄過(guò)程速度會(huì)更快。

2) 一次性寫入日志到日志文件,減少了頻繁打開關(guān)閉日志文件的次數(shù),提高了處理效率;

3)節(jié)約了硬盤空間,因?yàn)樵跇I(yè)務(wù)運(yùn)行正常的情況下只記錄關(guān)鍵信息,不必記錄過(guò)多細(xì)節(jié)。

4)在業(yè)務(wù)流程處理失敗的情況下保留了足夠多的用于故障定位的日志信息。

圖4 流水號(hào)日志的流程圖

這種處理方式的唯一風(fēng)險(xiǎn)是系統(tǒng)突然掉電導(dǎo)致內(nèi)存日志區(qū)的數(shù)據(jù)丟失。折中的處理辦法是每次在業(yè)務(wù)循環(huán)處理中的關(guān)鍵節(jié)點(diǎn)處將內(nèi)存日志區(qū)的內(nèi)容寫入硬盤中,適當(dāng)犧牲小部分性能來(lái)?yè)Q取可靠性。

9 結(jié)束語(yǔ)

日志的主要功能是記錄系統(tǒng)運(yùn)行狀態(tài)以及為調(diào)測(cè)和故障定位提供必要信息,是軟件設(shè)計(jì)中需要考慮的重要部分。在進(jìn)行日志功能設(shè)計(jì)時(shí),除了常規(guī)的運(yùn)行記錄需求外,還必須結(jié)合軟硬件環(huán)境和特定客戶需求,從內(nèi)容、格式、實(shí)現(xiàn)方法等多方面考慮,才能在后續(xù)的調(diào)測(cè)、聯(lián)調(diào)、正式運(yùn)行中發(fā)揮功用。本文中提到的日志功能的設(shè)計(jì)要點(diǎn)及實(shí)現(xiàn)方式,在控制系統(tǒng)的軟件設(shè)計(jì)上是需要經(jīng)常加以關(guān)注的。

圖5 日志函數(shù)的流程圖

[1]www.w3.org. RFC3164. 2001年8月.

[2]謝美意 朱虹 馮玉才. 自修復(fù)數(shù)據(jù)庫(kù)系統(tǒng)日志機(jī)制研究. 計(jì)算機(jī)科學(xué) 2010年4月.

[3]王偉 楊永川. Windows Vista系統(tǒng)日志文件格式分析及數(shù)據(jù)恢復(fù). 計(jì)算機(jī)安全, 2009年4月.

[4]JIM TURNER. 確保成功地備份事件日志的一種方法. Windows IT Pro magazine, 2008年8月.

[5]李甜. 基于 Syslog的日志審計(jì)系統(tǒng)的研究和實(shí)現(xiàn).中國(guó)新通訊, 2008年9月.

猜你喜歡
日志內(nèi)存子系統(tǒng)
不對(duì)中轉(zhuǎn)子系統(tǒng)耦合動(dòng)力學(xué)特性研究
一名老黨員的工作日志
GSM-R基站子系統(tǒng)同步方案研究
扶貧日志
心聲歌刊(2020年4期)2020-09-07 06:37:14
“春夏秋冬”的內(nèi)存
駝峰測(cè)長(zhǎng)設(shè)備在線監(jiān)測(cè)子系統(tǒng)的設(shè)計(jì)與應(yīng)用
游學(xué)日志
車載ATP子系統(tǒng)緊急制動(dòng)限制速度計(jì)算
一種基于粗集和SVM的Web日志挖掘模型
基于內(nèi)存的地理信息訪問(wèn)技術(shù)
桐柏县| 宁明县| 桃园县| 河北区| 阿勒泰市| 兴义市| 新丰县| 错那县| 库伦旗| 响水县| 乌恰县| 云和县| 阳江市| 乐都县| 望都县| 保德县| 浠水县| 滨州市| 茌平县| 孝昌县| 吉安县| 宜春市| 吉水县| 彰化县| 遂宁市| 贵溪市| 东乌珠穆沁旗| 宜城市| 图片| 汝州市| 二手房| 焦作市| 洪洞县| 阳信县| 库尔勒市| 兰考县| 萨迦县| 恭城| 固安县| 女性| 福贡县|