萬書鵬 高原 國電南瑞科技股份有限公司,南京 210061
調(diào)度自動化系統(tǒng)資源監(jiān)視模塊的設計與實現(xiàn)
萬書鵬 高原 國電南瑞科技股份有限公司,南京 210061
智能電網(wǎng)中的調(diào)度自動化系統(tǒng)具有計算節(jié)點多、系統(tǒng)異構、運行狀況與使用負載各不相同等特點。為保障系統(tǒng)自身的穩(wěn)定運行,需要對各個計算節(jié)點的CPU、內(nèi)存、硬盤等資源的使用情況進行監(jiān)視,對不穩(wěn)定因素發(fā)出告警。本文設計了一個完成監(jiān)視和告警功能的資源監(jiān)視模塊,并詳細介紹了資源監(jiān)視信息的采集、分析、存儲和展現(xiàn)等關鍵技術。這些技術已在調(diào)度自動化備調(diào)系統(tǒng)中應用,為自動化人員提供了實時可靠的監(jiān)視工具,保障了系統(tǒng)的正常運行。
調(diào)度自動化;資源監(jiān)視;信息采集;信息存儲;圖形化展示
Dispatching automation; Resource monitoring; Information acquisition; Information storage; Graphical representation
隨著調(diào)度自動化系統(tǒng)朝著“數(shù)字化、集成化、網(wǎng)格化、標準化、市場化、智能化”的方向發(fā)展[1],其規(guī)模不斷擴大,計算節(jié)點的數(shù)量不斷增加,各個節(jié)點使用的服務器和操作系統(tǒng)類型也不盡相同,整個系統(tǒng)變得越來越復雜,這對運行維護工作提出了非常高的要求。資源監(jiān)視模塊不僅能夠監(jiān)視每個節(jié)點的CPU、內(nèi)存、硬盤、網(wǎng)絡等硬件資源的使用情況,而且能夠監(jiān)視各個節(jié)點中所有系統(tǒng)進程的狀態(tài),為系統(tǒng)的持續(xù)穩(wěn)定運行提供了必要的保障。在智能電網(wǎng)建設的大環(huán)境下,調(diào)度自動化系統(tǒng)的監(jiān)視模塊也更加具有智能,對于所有資源的識別都能夠自動實現(xiàn),不需要另外手動配置,對于新增加的節(jié)點也無需另外的配置只要啟動系統(tǒng)就能自動加入到整個監(jiān)視體系中來。本文將從資源信息的采集開始,介紹資源監(jiān)視模塊如何實現(xiàn)從不同的操作系統(tǒng)中采集需要監(jiān)視的資源信息,以及對信息做進一步分析,對不穩(wěn)定因素發(fā)出告警。之后介紹資源信息的存儲,對于采集到的信息將以不同的方式進行存儲,并在整個系統(tǒng)中共享這些信息。最后本文將歸納總結資源監(jiān)視模塊的特點,并提出未來的改進方向。
資源監(jiān)視模塊如圖1所示,由資源信息采集、資源數(shù)據(jù)分析和資源數(shù)據(jù)存儲三部分構成。資源信息采集是資源監(jiān)視模塊數(shù)據(jù)的入口部分,它需要從底層的操作系統(tǒng)中讀取相應的信息,然后做一些簡單計算以得到實際需要的數(shù)據(jù),再送往上一層。資源數(shù)據(jù)分析部分會處理資源信息采集中得到的數(shù)據(jù),將其分成關鍵數(shù)據(jù)和一般數(shù)據(jù),關鍵數(shù)據(jù)如果出現(xiàn)異常會發(fā)送告警信息。在資源數(shù)據(jù)存儲部分將數(shù)據(jù)再劃分為靜態(tài)數(shù)據(jù)和動態(tài)數(shù)據(jù),靜態(tài)數(shù)據(jù)屬于基本不會變化的數(shù)據(jù),可以直接存入商用庫中,動態(tài)數(shù)據(jù)會時刻發(fā)生變化,只存放到實時庫中。下面將對各個部分分別加以介紹。
圖1 資源監(jiān)視模塊結構圖
2.1 硬件資源信息采集
各級調(diào)度中心運行調(diào)度自動化系統(tǒng)的節(jié)點使用的操作系統(tǒng)不盡相同,有時由于升級、擴容的原因在同一個調(diào)度自動化系統(tǒng)中也存在不同的操作系統(tǒng)。常用的操作系統(tǒng)為Linux和Unix,而Unix中根據(jù)服務器硬件提供廠商的不同又分為:AIX、Solaris、ALPHA和HPUX。資源監(jiān)視模塊需要根據(jù)操作系統(tǒng)的不同,采用相應的方法采集需要的資源信息。這些信息包括:CPU信息、內(nèi)存信息、硬盤信息和網(wǎng)卡信息。
2.1.1 CPU信息采集。CPU需要采集的信息包括:CPU內(nèi)核使用率、CPU用戶態(tài)使用率、CPU空閑率。這些信息反映了單個節(jié)點的性能以及穩(wěn)定性,一般情況下,如果CPU空閑率一直保持在百分之十以下說明該節(jié)點存在問題。在Linux系統(tǒng)中,系統(tǒng)文件stat分別記錄了CPU從系統(tǒng)啟動開始累計到當前時刻,用戶態(tài)的CPU使用時間、內(nèi)核的CPU使用時間以及空閑的CPU時間[2],通過兩次讀取該文件中的時間信息,就能計算出在這兩次讀取間隔中的CPU內(nèi)核使用率、CPU用戶態(tài)使用率和CPU空閑率,計算公式如下:
其中kernal1、kernal2分別表示第一次和第二次讀取stat文件得到的從系統(tǒng)啟動開始累計到當前時刻內(nèi)核使用的CPU時間;user1、user2表示用戶態(tài)的CPU使用時間;idle1、idle2表示空閑的CPU時間;sum=(kernal2! kernal1)+(user2user1)+(idle2! idle1)為總時間。在AIX、Solaris、ALPHA和HPUX系統(tǒng)中也可以通過上式計算出CPU使用率,但是在獲取CPU使用時間時各個操作系統(tǒng)又提供了不同的系統(tǒng)調(diào)用函數(shù)。AIX通過調(diào)用getkval系統(tǒng)函數(shù)取得CPU從系統(tǒng)啟動開始累計到當前時刻的用戶態(tài)、內(nèi)核以及空閑的CPU時間;而Solaris必需通過系統(tǒng)調(diào)用kstat_read獲取多核CPU各個核的使用時間再相加,才能得到總CPU的使用時間;ALPHA和HPUX分別通過系統(tǒng)函數(shù)table和pstat_getdynamic取得各自的CPU時間。
2.1.2 內(nèi)存信息采集。內(nèi)存需要采集的信息包括已被占用的內(nèi)存數(shù)和空閑的內(nèi)存數(shù)。如果空閑的內(nèi)存數(shù)很低而交換分區(qū)又被占滿時會導致一些程序執(zhí)行異常,甚至服務器死機,因此占用和空閑內(nèi)存數(shù)是一個影響系統(tǒng)穩(wěn)定的關鍵屬性,需要進行實時監(jiān)控。在Linux系統(tǒng)中,內(nèi)存信息存儲在proc文件夾的meminfo文件中,通過分析該文件就可以得到總內(nèi)存大小和空閑內(nèi)存大小,兩者相減就可以得出已被占用的內(nèi)存大小。在AIX、Solaris、ALPHA和HPUX
系統(tǒng)中可以通過調(diào)用系統(tǒng)命令,先獲取總內(nèi)存大小,再獲取空閑內(nèi)存大小,然后相減得到已被占用的內(nèi)存大小。但是各系統(tǒng)中獲取內(nèi)存大小的命令各不相同,AIX中使用命令perfstat_memory_ total,Solaris、ALPHA和HPUX中分別使用命令kstat_data_lookup、vm_ statistics和pstat_getdynamic。
2.1.3 硬盤信息采集。每個節(jié)點的硬盤會被分成多個分區(qū)來使用,因此硬盤的監(jiān)視信息就是對所有分區(qū)信息的匯總。每個分區(qū)信息包括:分區(qū)名、掛接目錄名、分區(qū)總?cè)萘?、已用容量、未用容量和使用率。當分區(qū)的使用率達到百分之百時就不能再往該分區(qū)中寫入新內(nèi)容,如果是日志文件所在的分區(qū)使用率達到百分之百,則不能再寫入新的日志,如果是保存斷面文件的分區(qū)使用率達到百分之百,則新斷面的保存將會出錯,因此對分區(qū)使用率的監(jiān)視非常重用。在所有分區(qū)中還有一個最重要的Swap分區(qū),即交換區(qū),Swap分區(qū)的作用可簡單描述為:當系統(tǒng)的物理內(nèi)存不夠用的時候,就需要將物理內(nèi)存中的一部分空間釋放出來,以供當前運行的程序使用,那些被釋放的空間被臨時保存到Swap分區(qū)中,等到那些程序要運行時,再從Swap中恢復保存的數(shù)據(jù)到內(nèi)存中[3]。因此如果Swap分區(qū)使用率達到百分之百可能會導致一些程序執(zhí)行異常,甚至服務器死機。對于除Swap分區(qū)以外的普通分區(qū)可以使用命令“df-k”來獲取包括分區(qū)名、掛接目錄名在內(nèi)的所有硬盤信息。在HPUX系統(tǒng)中可以使用bdf命令來代替“df-k”命令。對于Swap分區(qū),在Solaris系統(tǒng)中與普通分區(qū)一樣通過命令“df-k”就可以獲取相關信息,在其他系統(tǒng)中使用與采集內(nèi)存信息相同的方法獲取Swap分區(qū)的總?cè)萘亢臀从萌萘亢笥嬎愠鲆延萌萘亢褪褂寐?,而獲取Swap分區(qū)的總?cè)萘亢臀从萌萘康南到y(tǒng)調(diào)用與獲取內(nèi)存信息的系統(tǒng)調(diào)用基本相同。
2.1.4 網(wǎng)卡信息采集
網(wǎng)卡信息包括網(wǎng)卡名和網(wǎng)卡狀態(tài)。一般每個節(jié)點至少會有兩塊物理網(wǎng)卡,如果一塊網(wǎng)卡出現(xiàn)問題系統(tǒng)會自動使用另外一塊網(wǎng)卡。資源監(jiān)視模塊需要對機器上所有的網(wǎng)卡進行監(jiān)視,一旦有一塊網(wǎng)卡出現(xiàn)問題可以及時發(fā)現(xiàn)及時處理,避免所有網(wǎng)卡都出現(xiàn)問題,導致網(wǎng)絡不通時才發(fā)現(xiàn)的情況。在Linux系統(tǒng)中,一些廠商已經(jīng)為調(diào)度自動化系統(tǒng)專門封裝了網(wǎng)卡監(jiān)控模塊,因此只需要調(diào)用函數(shù)get_nic_info就可以得到各個網(wǎng)卡的狀態(tài)。在其他系統(tǒng)中,需要為每塊網(wǎng)卡配置一個網(wǎng)段,通過ping該網(wǎng)段的交換機地址來確定該網(wǎng)卡狀態(tài)是正常還是斷開。
2.2 進程信息采集
進程信息包括進程名、進程號、進程狀態(tài)、進程啟動時間和進程啟動命令,資源監(jiān)視模塊通過常駐的進程監(jiān)視程序來取得進程信息。當系統(tǒng)中一個進程啟動時會向進程監(jiān)視程序注冊進程的進程名、進程號、進程啟動時間和進程啟動命令。進程監(jiān)視程序得到了一個進程的注冊信息就會定時通過kill命令來檢測該進程是否還在運行,從而設置該進程的進程狀態(tài)。
資源監(jiān)視模塊會對一些關鍵的資源信息進行實時分析,一旦出現(xiàn)可能會導致系統(tǒng)不穩(wěn)定的情況發(fā)生,資源監(jiān)視模塊將會發(fā)出告警,告警信息不僅被顯示在自動化人員的告警窗中,還會存儲在數(shù)據(jù)庫中以備問題出現(xiàn)后查找原因??赡軙е沦Y源監(jiān)視模塊發(fā)送告警的關鍵信息包括:CPU空閑率、硬盤分區(qū)使用率、網(wǎng)卡狀態(tài)和進程狀態(tài)。
CPU空閑率會影響系統(tǒng)運行的速度,在CPU空閑率很低的節(jié)點上打開圖形程序可能需要等待幾分鐘甚至更長時間,因此當CPU的空閑率低于百分之十時,資源監(jiān)視模塊會發(fā)出告警。
當普通分區(qū)的使用率高于百分之九十時,資源監(jiān)視模塊會發(fā)出告警信息提醒自動化人員清理或擴充分區(qū)空間。由于清理或擴充分區(qū)空間需要一定的時間,所以這條告警信息不會時刻發(fā)生,它會每隔兩分鐘出現(xiàn)一次,直到分區(qū)的使用率低于等于百分之九十。Swap分區(qū)相對而言更加重要,而且有時它能從百分之九十的使用率瞬間增加到百分之百導致系統(tǒng)崩潰,因此在Swap分區(qū)使用率達到百分之八十時就會發(fā)送告警信息。
網(wǎng)卡狀態(tài)是在狀態(tài)發(fā)生改變時發(fā)送告警信息的,如網(wǎng)卡狀態(tài)從正常到斷網(wǎng),或從斷網(wǎng)到正常。如果只有一個網(wǎng)卡發(fā)生故障,那么告警會從網(wǎng)卡故障的節(jié)點發(fā)出,如果該節(jié)點的所有網(wǎng)卡都發(fā)生故障,既該節(jié)點與整個系統(tǒng)已經(jīng)完全斷開,此時該節(jié)點發(fā)出的告警無法被系統(tǒng)收到,因此這時候系統(tǒng)中會有一臺主監(jiān)視節(jié)點來發(fā)送該節(jié)點離線的告警。
對于進程狀態(tài)的處理,資源監(jiān)視模塊不僅會發(fā)送告警,而且會試圖恢復異常退出的程序。當某個進程狀態(tài)由運行到退出或由退出到運行時,進程監(jiān)視程序會發(fā)送相應的告警信息。如果進程異常退出,還會通過進程啟動命令試圖重新啟動進程,直到第六次重新啟動仍然失敗才會放棄啟動。
各個節(jié)點獲得的資源數(shù)據(jù)需要進行統(tǒng)一存儲,以提供給其他程序使用。存儲時資源數(shù)據(jù)可以分成兩類分別存儲。一類為靜態(tài)數(shù)據(jù),即一般情況下不會發(fā)生改變的數(shù)據(jù),如硬盤信息中的分區(qū)名、掛接目錄名,網(wǎng)卡信息中的網(wǎng)卡名,進程信息中的進程名。此外當將各個節(jié)點的數(shù)據(jù)集中存儲時,還需要存儲一些輔助信息用以區(qū)分這些數(shù)據(jù)是從哪個節(jié)點采集到的,如節(jié)點名,這也是不會改變的可以歸為靜態(tài)數(shù)據(jù)。另一類是動態(tài)數(shù)據(jù),它們會經(jīng)常變化,如CPU空閑率、已被占用的內(nèi)存數(shù)等。
靜態(tài)數(shù)據(jù)被存儲在商用庫中,即使系統(tǒng)重啟數(shù)據(jù)依然存在,這就保證了靜態(tài)數(shù)據(jù)只需要在節(jié)點第一次加入系統(tǒng)時保存即可。為了實現(xiàn)資源監(jiān)視模塊對新加節(jié)點的自適應能力,即新加節(jié)點不需要進行手動配置就能進行監(jiān)視,資源監(jiān)視模塊會每次讀取實時庫中的靜態(tài)數(shù)據(jù),如果不存在則將其保存到商用庫中,由于保存到商用庫中的數(shù)據(jù)會自動保存到實時庫中,因此下一次資源監(jiān)視模塊就能夠從實時庫中讀取到靜態(tài)數(shù)據(jù),那么就避免了重復向商用庫插入記錄。這樣不僅可以解決新加節(jié)點的配置問題,而且對于一個新系統(tǒng)也不需要進行多余的配置就能實現(xiàn)資源監(jiān)控。如果因為人為原因誤刪了一些靜態(tài)數(shù)據(jù),資源監(jiān)視模塊能夠自動將其重新加入,不影響正常的監(jiān)視工作。
動態(tài)數(shù)據(jù)會被統(tǒng)一的保存在資源監(jiān)視主節(jié)點的實時庫中。相比商用庫,實時庫的存儲效率要更高[4],因此更適合平凡的寫操作。但在資源監(jiān)視模塊中依然會對動態(tài)數(shù)據(jù)做進一步劃分。一些數(shù)據(jù)如CPU內(nèi)核使用率、CPU用戶態(tài)使用率、CPU空閑率以及已被占用的內(nèi)存數(shù)和空閑的內(nèi)存數(shù),會時刻發(fā)生變化,這些數(shù)據(jù)在每個采集周期都會寫入到實時庫中。另一些數(shù)據(jù),如網(wǎng)卡狀態(tài)、進程號、進程狀態(tài)、進程啟動時間,變化頻率較低,這些數(shù)據(jù)只有在其發(fā)生改變之后才會寫入實時庫。還有一些數(shù)據(jù),如分區(qū)的已用容量、未用容量和使用率,雖然會經(jīng)常發(fā)生變化,但小范圍的變化對系統(tǒng)沒有任何影響,因此這些值只有在變化超過一定量的時候才會去寫入實時庫中。
資源監(jiān)視模塊實現(xiàn)了從數(shù)據(jù)采集到展示的一整套流程。它能夠從不同的操作系統(tǒng)中采集硬件信息,能夠?qū)﹃P鍵監(jiān)視信息進行分析,對不穩(wěn)定因素及時預警,達到了實時反映系統(tǒng)運行狀態(tài)的效果。資源監(jiān)視模塊還實現(xiàn)了自動監(jiān)視功能,減少了維護人員的工作量。對于新系統(tǒng)不需要做額外的配置就能進行監(jiān)視,對于新加節(jié)點也能夠自動融入老系統(tǒng)中進行監(jiān)視。由于調(diào)度自動化技術的不斷進步,調(diào)度自動化系統(tǒng)支持平臺的不斷更新,操作系統(tǒng)及服務器的不斷升級,在實際應用過程中,資源監(jiān)視模塊仍需要不斷進行修改和完善,使其不斷適應需求的變化,更好地為電力調(diào)度自動化系統(tǒng)的安全、穩(wěn)定運行提供保障。
[1] 姚建國,楊勝春,高宗和,楊志宏. 電網(wǎng)調(diào)度自動化系統(tǒng)發(fā)展趨勢展望. 電力系統(tǒng)自動化. 2007;31(13):7~11.
[2] 王曉琰. 單機Linux下監(jiān)測系統(tǒng)性能的設計與實現(xiàn). 現(xiàn)代科技. 2009;8(8):110-112.
[3] 蒲陽,袁宏春. Linux中的交換進程ksWapd代碼分析. 微型機與應用. 2001;20(10):17~21.
[4] 劉吉臻,房方,牛玉廣. 電力企業(yè)中的實時數(shù)據(jù)庫技術. 中國電力. 2004;37(2):73~77
Research and Implementation of Resource Monitoring Module in Dispatching Automation System
WAN Shupeng GAO Yuan NARI Technology Development Co.,Ltd,NanJing,210061
Smart grid dispatching automation system is composed of much computing nodes, heterogeneous system, and the operating load of server varies from one to another. It is imperative to monitor the status of cpu,memory,hard disk and so on in each computing node, and to send alarms by unstable factor. This paper designs a resource monitor module for monitoring and sending alarms, and describes in detail some key technologies about collecting, analyzing, storing and exhibiting the resource monitoring information. This technologies have applied in some dispatching automation systems, and have ensured system normal running by suppling a real-time reliable monitoring tool for automation personnel.
10.3969/j.issn.1001-8972.2012.07.076
萬書鵬(1982-),男,碩士研究生,工程師,主要研究方向:調(diào)度自動化系統(tǒng)支撐平臺,工作單位:國電南瑞科技股份有限公司電網(wǎng)所。
高原(1981-),男,碩士研究生,工程師,主要研究方向:調(diào)度自動化系統(tǒng)支撐平臺,工作單位:國電南瑞科技股份有限公司電網(wǎng)所 。