文/劉威
(深圳供電局有限公司 廣東省深圳市 518000)
改革開放四十多年來,我國經(jīng)濟(jì)飛速發(fā)展,各行各業(yè)的信息化水平不斷提升。各類服務(wù)器集群業(yè)已成為工業(yè)企業(yè)主流發(fā)展趨勢。傳統(tǒng)的服務(wù)器,依靠運維工程師手工或者腳本的方式進(jìn)行運維,難以適應(yīng)當(dāng)前階段我國大規(guī)模服務(wù)器集群的各項需求。因此,我國企業(yè)已開始研發(fā)非手動服務(wù)器運維工具,使得服務(wù)器可以自動運維與自主運維,以推進(jìn)各企業(yè)信息化進(jìn)程,助推各企業(yè)數(shù)字化轉(zhuǎn)型。以電網(wǎng)企業(yè)為例,我國電網(wǎng)企業(yè)大多仍然使用傳統(tǒng)的Windows 與Linux 服務(wù)系統(tǒng)。電網(wǎng)企業(yè)的服務(wù)器越來越大,種類越來越多,結(jié)構(gòu)越來越復(fù)雜,涉及面越來越廣。這個時候,僅僅依靠運維工程師的傳統(tǒng)手動運維模式是難以維護(hù)運營電網(wǎng)企業(yè)日益增長的服務(wù)需求。服務(wù)器運維的需求往往是批量化的需求,比如批量命令的運行、批量系統(tǒng)配置、批量部署程序等。這些批量化的需求,如果使用運維工程師進(jìn)行操作,將耗費大量的人力與時間。Ansible 是新出現(xiàn)的基于Python 開發(fā)的自動化運維工具,尤其擅長批量系統(tǒng)配置、批量程序部署、批量運行命令,速度快且準(zhǔn)確率高,可以有效滿足當(dāng)前階段以及未來幾年內(nèi)我國電網(wǎng)企業(yè)服務(wù)器運維的需求。本文以此為邏輯起點,研究Ansible 框架與Ansible 工作流程等專業(yè)技術(shù),構(gòu)建基于Ansible 的自動化運維系統(tǒng),詳解運維系統(tǒng)的設(shè)計與實現(xiàn)過程,并對基于Ansible 自動化運維的信息系統(tǒng)故障預(yù)測技術(shù)進(jìn)行研究,以期幫助我國電網(wǎng)企業(yè)提高運維效率,降低運維成本。
Ansible 是一種由各種模塊而組成的框架,其本身并沒有執(zhí)行能力與部署能力。Ansible 的各個模塊的執(zhí)行能力與部署能力成就了面向服務(wù)器集群的Ansible 的批量系統(tǒng)配置、批量程序部署、批量運行命令等操作功能。Ansible 是一種設(shè)計極其簡單的自動化運維工具,其開源性可不斷迭代,支持多節(jié)點發(fā)布任務(wù)并可以遠(yuǎn)程執(zhí)行。Ansible 工具可以跨平臺的自動化運維,包括軟件的自動化部署,自動化配置,自動化管理以及系統(tǒng)熱升級等。Ansible 的常見模塊主要包括command, shell, cron, yum, service。以上模塊僅僅為Ansible 的常見模塊,事實上,Ansible 的模塊不斷增加中。隨著Ansible 的迭代升級,部分新模塊將成為Ansible 的常用模塊,已有常用模塊可能被取代或者被整合。
Ansible 主要框架一般可以包括以下幾個方面:
(1)連接插件connection plugins:負(fù)責(zé)和被監(jiān)控端實現(xiàn)通信;
(2)主機目錄host inventory:指定操作的主機,是在配置文件里面定義需要監(jiān)控的主機;
(3)各種功能模塊,例如service 模塊、cron 模塊等功能模塊;
(4)借助于插件完成日志記錄等功能;
(5)劇本playbook:playbook 在執(zhí)行多個任務(wù)時,不是一定要讓節(jié)點一次性運行多個任務(wù)。
Ansible 或Ansible-playbooks 的工作流程如圖1 所示。當(dāng)用戶啟動Ansible 或Ansible-playbooks 時,用戶可以在服務(wù)器的顯示終端輸入Ansible 的Ad-Hoc 命令集。比如-v,--verbose 表示需要輸出更詳細(xì)的執(zhí)行過程信息。-m NAME,--module-name=NAME 的含義是指定執(zhí)行使用的模塊。而private-key=PRIVATE_KEY_FILE 則指代指定密鑰文件。常見的Ad-Hoc 命令集有十幾條,需要使用者靈活掌握。此時,Ansible 會遵循預(yù)先編排的規(guī)則將Playbooks 逐條拆解為Play,再根據(jù)命令集將paly 組織成Ansible 可識別的任務(wù),這種任務(wù)成為Task。Task 的完成有賴于Ansible 的模塊與插件。不同的模塊與插件在任務(wù)完成的過程中發(fā)揮不同的作用。我們根據(jù)Inventory 中定義的主機列表通過SSH 將任務(wù)集以臨時文件或命令的形式傳輸?shù)竭h(yuǎn)程客戶端執(zhí)行并返回執(zhí)行結(jié)果。當(dāng)結(jié)果可以被永久儲存時,則結(jié)果自動保存;如果是臨時性文件,系統(tǒng)將在任務(wù)完成后對臨時性文件進(jìn)行自動刪除。
Ansible 擁有大量的命令,對于初學(xué)者來說,要想無障礙的使用Ansible 是具有相當(dāng)?shù)碾y度的。部分新入職的運維工程師在使用Ansible 工作效率很低。為了提升工作效率,運維工程師對于Ansible 進(jìn)行二次開發(fā),根據(jù)需求開發(fā)新的基于Ansible 的web 形式自動化運維系統(tǒng),有效滿足初學(xué)者的需求,簡單易操作,界面友好,系統(tǒng)運行穩(wěn)定。
Hosts 是一個沒有擴(kuò)展名的系統(tǒng)文件。我們可以對Hosts 進(jìn)行管理,對Hosts 的內(nèi)容進(jìn)行分組,合適的情況下進(jìn)行配置。Hosts的狀態(tài)可以反映Ansible 服務(wù)器的種類、數(shù)量、系統(tǒng)、協(xié)議、端口等多種信息。
我們在使用Ansible 時,可以同時操作屬于一個分組的多Hosts機,組和主機之間的關(guān)系通過文件配置。為了實現(xiàn)對Hosts 機批量運行命令的操作,需要在Hosts 機安裝通訊軟件,Hosts 機的系統(tǒng)為LINUX 時,安裝SSH 即可。Hosts 機的系統(tǒng)為Windows 時,安裝Winrm 即可。在批量運行頁面中可以選擇腳本,選擇Hosts 機的分類,并選擇目標(biāo)Hosts 機。在確認(rèn)運行后,系統(tǒng)可以先將腳本發(fā)送至Hosts 機的指定目錄,再對腳本進(jìn)行運行。我們通過系統(tǒng)測試,可以觀測Host 是否運行腳本,腳本運行是否成功。當(dāng)腳本成功運行時,系統(tǒng)返回Success,系統(tǒng)通過測試。
在Hosts 分組管理時,我們可以對Hosts 的類別進(jìn)行添加或者刪除。當(dāng)Ansible 運行時,其腳本反映了Hosts 的數(shù)量與質(zhì)量情況。在必要的時候,我們可以手動添加或者自動添加Hosts 機。Hosts配置是Hosts 管理的重要內(nèi)容,它關(guān)聯(lián)了主機的配置文件。
圖1:Ansible 的工作流程
電力企業(yè)的設(shè)備,如變壓器、發(fā)動機、壓縮機等,其品牌、參數(shù)使用年限、使用時間、等數(shù)據(jù)稱為基礎(chǔ)數(shù)據(jù)。這些數(shù)據(jù)需要電力單位結(jié)合自身的數(shù)據(jù)規(guī)劃進(jìn)行相應(yīng)的管理,而且還需要利用數(shù)據(jù)服務(wù)器使所有的數(shù)據(jù)實現(xiàn)同步,將這些數(shù)據(jù)統(tǒng)一存儲到調(diào)度中心,然后再開展專門的整理和計算。以上電力設(shè)備在運行過程中產(chǎn)生了大量過程數(shù)據(jù)。這些數(shù)據(jù)十分龐雜,不斷更新,對存儲空間要求非常高?;贏nsible 自動化運維的信息系統(tǒng)產(chǎn)生的數(shù)據(jù)同樣是過程數(shù)據(jù)的一部分,可以展示批量操作的時間、頻率、類別與產(chǎn)生效果。這些數(shù)據(jù)的實用價值也相對較高,可以為電力系統(tǒng)的故障預(yù)測提供決策支撐。我國在電力系統(tǒng)的實時數(shù)據(jù)方面比較成熟,一般收集到的數(shù)據(jù)只需要建立比較穩(wěn)定的接口就可以提高其準(zhǔn)確性。電網(wǎng)企業(yè)各部門日常管理中產(chǎn)生的數(shù)據(jù)也應(yīng)當(dāng)在特定的范圍之內(nèi)進(jìn)行共享和同步。日常管理的數(shù)據(jù)的分布與共享需要建設(shè)同步的共享平臺,以便于不同部門員工獲取與分析。以上數(shù)據(jù),包括基于Ansible 自動化運維的信息系統(tǒng)產(chǎn)生的數(shù)據(jù),僅局限于某個電網(wǎng)企業(yè)產(chǎn)生的數(shù)據(jù)。事實上,電力系統(tǒng)在運行中所得到的相關(guān)數(shù)據(jù)對于電力單位的發(fā)展產(chǎn)生十分重要的影響。市場經(jīng)濟(jì)類數(shù)據(jù)也可以為城市建設(shè)中電力行業(yè)的整體規(guī)劃制定提供比較完整全面的參考依據(jù)。
想要更加全面地分析電力故障,讓于Ansible 自動化運維的信息系統(tǒng)能夠更為高效、有序地開展工作,需要設(shè)計專門的系統(tǒng)結(jié)構(gòu)。
系統(tǒng)結(jié)構(gòu)包括主站和子站,其功能有著明顯的不同。子站負(fù)責(zé)初次采集數(shù)據(jù),將采集的數(shù)據(jù)交給主站。主站獲得數(shù)據(jù)后,經(jīng)過清洗、篩選、分列、排序等操作后,分析挖掘,得出相應(yīng)的結(jié)論,輸送給Ansible 自動化運維的信息系統(tǒng)。
SCADA/EMS 系統(tǒng)就是電網(wǎng)調(diào)度自動化系統(tǒng),它可以調(diào)度海量的電網(wǎng)實時信息?;赟CADA/EMS 系統(tǒng),電網(wǎng)系統(tǒng)運行有序,電網(wǎng)調(diào)度安全合理,電網(wǎng)質(zhì)量和經(jīng)濟(jì)性均得到保障。
在SCADA/EMS 系統(tǒng)內(nèi),我們設(shè)計了防火墻系統(tǒng)保護(hù)系統(tǒng)的安全性。子系統(tǒng)已處于安全區(qū)域內(nèi),對系統(tǒng)數(shù)據(jù)可以做到實時傳輸。系統(tǒng)內(nèi)部,拒絕一切監(jiān)控與組網(wǎng)操作。我們采用Windows 作為操作系統(tǒng)與子系統(tǒng)的運行環(huán)境。相同的運行環(huán)境可以降低病毒入侵的風(fēng)險。
本文的電力系統(tǒng)包括一個主站與多個子站。子站現(xiàn)場對數(shù)據(jù)進(jìn)行采集并進(jìn)行初步分析,通過查詢與流通等機制將分析后的數(shù)據(jù)傳遞給主站。主站和子站之間的通信可以采用TCP/IP 協(xié)議,也可以采用電話撥號的方式進(jìn)行。主站接收了多個子站初步分析后的數(shù)據(jù),對數(shù)據(jù)進(jìn)行二次分析與處理,清洗無關(guān)的垃圾數(shù)據(jù)。這一目標(biāo)的實現(xiàn)需要對傳輸?shù)臄?shù)據(jù)開展預(yù)處理工作,將過時、重復(fù)的垃圾數(shù)據(jù)清除干凈。數(shù)據(jù)在預(yù)處理的過程中通過抽取、轉(zhuǎn)換、清洗和監(jiān)控,實現(xiàn)數(shù)據(jù)的處理。在數(shù)據(jù)抽取與清洗的工作完成后,我們開始進(jìn)行基于Ansible 自動化運維的信息系統(tǒng)故障預(yù)測。當(dāng)自動化運維系統(tǒng)的數(shù)據(jù)發(fā)送異常變化時,我們需要嚴(yán)查異常變化原因,并進(jìn)行及時處理。同時,我們應(yīng)發(fā)揮數(shù)據(jù)的監(jiān)視功能,需要開展新一輪的數(shù)據(jù)預(yù)處理工作。對于經(jīng)常發(fā)送故障的模塊,電網(wǎng)企業(yè)應(yīng)當(dāng)在發(fā)生故障情況的原因清楚記錄下來,形成特定穩(wěn)定,并轉(zhuǎn)化成作業(yè)腳本。當(dāng)電網(wǎng)企業(yè)將每個腳本增加進(jìn)入Ansible 自動化運維的信息系統(tǒng)時,信息系統(tǒng)不斷完善,故障出錯率將會不斷降低。我們所要做的工作不是事后處理,而是事前預(yù)判。通過故障分析與預(yù)測,降低故障處理時間,使得運維工作人員明細(xì)電網(wǎng)企業(yè)運維工作常見的困難,了解故障發(fā)生的原因,積累經(jīng)驗。我們通過腳本不斷優(yōu)化Ansible 自動化運維的信息系統(tǒng),為以后的應(yīng)急處置提供更為全面的工具手段。
為了滿足電網(wǎng)企業(yè)海量服務(wù)器與復(fù)雜服務(wù)器運維的多重需求,本文基于Ansible 設(shè)計開發(fā)了自動化運維的信息系統(tǒng)。該系統(tǒng)具備Hosts 管理與業(yè)務(wù)管理等多項功能。系統(tǒng)經(jīng)過測試,可滿足電網(wǎng)企業(yè)業(yè)務(wù)需求?;贏nsible 自動化運維的信息系統(tǒng)故障預(yù)測技術(shù)可以有效預(yù)測故障,避免故障發(fā)生。我們應(yīng)加強定性預(yù)測與定量預(yù)測相結(jié)合,提高預(yù)測精度,降低預(yù)測成本。