李朝陽,周 波,張小鋒,陳 震
(中國西昌衛(wèi)星發(fā)射中心,四川 西昌 615000)
隨著各種IT 新技術(shù)的不斷涌現(xiàn),依靠手工執(zhí)行命令管理軟硬件資源的方法已經(jīng)遠(yuǎn)不能滿足一個信息中心的日常運維需求,且傳統(tǒng)方法存在出錯率高和人力資源成本高等缺陷。試想一個1 000 臺網(wǎng)絡(luò)設(shè)備的架構(gòu)中,按照傳統(tǒng)人為操作更新設(shè)備配置,可能需要一個星期的多人合作。如果采用網(wǎng)絡(luò)自動化進行多線程并行操作,將大大縮減運維對人力資源的依賴,進一步節(jié)約成本??梢?,在今天的網(wǎng)絡(luò)技術(shù)領(lǐng)域,如何能夠滿足大規(guī)模網(wǎng)絡(luò)靈活高效且高質(zhì)穩(wěn)定運維的極致需求,是所有IT 管理部門應(yīng)該積極思考的問題。同時,網(wǎng)絡(luò)基礎(chǔ)設(shè)施建設(shè)和運維管理的標(biāo)準(zhǔn)化、自動化、數(shù)據(jù)可視化以及智能化必將成為大趨勢。本文針對一個由千余臺網(wǎng)絡(luò)設(shè)備組成的企業(yè)生產(chǎn)網(wǎng)需要進行大量重復(fù)性配置需求的特定應(yīng)用場景,提出了一種基于Python3 開源庫構(gòu)建網(wǎng)絡(luò)設(shè)備自動化運維系統(tǒng)的解決方法并加以編程實現(xiàn),進而為進一步提升信息中心網(wǎng)絡(luò)運維自動化水平提供技術(shù)基礎(chǔ)和服務(wù)。
主流遠(yuǎn)程管理控制協(xié)議主要有:①遠(yuǎn)程桌面協(xié)議(Remote Desktop Protocol,RDP),應(yīng)用于Windows 系統(tǒng)遠(yuǎn)程桌面;②遠(yuǎn)程幀緩沖協(xié)議(Remote Frame Buffer Protocol,RFB),應(yīng)用于圖形化遠(yuǎn)程管理,如VNC 工具基于RFB;③Telnet 協(xié)議;④SSH 協(xié)議。本文重點討論后兩者的特點及區(qū)別。Telnet 是命令行界面遠(yuǎn)程管理協(xié)議,簡單易于實現(xiàn),在進行數(shù)據(jù)傳輸時采用明文傳輸方式。安全外殼協(xié)議(Secure Shell,SSH)是另外一種命令行界面遠(yuǎn)程管理協(xié)議,在進行數(shù)據(jù)傳輸時會對數(shù)據(jù)進行加密及壓縮。相比較而言,SSH 更加安全,速度也更快,且代替Telnet 僅是SSH 的功能之一。
Telnetlib 是Python 的內(nèi)建模塊。鑒于Telnet 存在安全隱患,不建議在生產(chǎn)網(wǎng)絡(luò)中使用Telnetlib 庫。Python2 和Python3 中的Telnetlib 在使用方式上略有區(qū)別。在Python2 中,Telnetlib 模塊下所有函數(shù)返回值均為字符串,而在Python3 環(huán)境下,所有函數(shù)參數(shù)及返回值為字節(jié)型字符串(Byte Strings)。因此,在Python3 中使用Telnetlib 需要關(guān)注:①字符串常量前需加b 提示符;②變量后需借助encode 進行ASCII 編碼;③對于read_all 函數(shù)返回結(jié)果需借助decode 進行ASCII 解碼。
Python 中支持SSH 協(xié)議實現(xiàn)遠(yuǎn)程連接設(shè)備的模塊主要有Paramiko 和Netmiko,前者是后者開發(fā)的基礎(chǔ)。Paramiko 是Python 中的一個非常著名的開源SSHV2 項目,于2013 年發(fā)布,同時支持SSH服務(wù)端和客戶端。Netmiko[1]是另一個SSHV2 開源項目,于2014 年底發(fā)布。Netmiko 基于Paramiko 開發(fā),但其支持更多廠商設(shè)備,更加方便易用,簡化了回顯結(jié)果獲取,簡化了設(shè)備的配置命令[2]。目前,它支持包括Cisco、HP proCurve、Juniper Junos、Linux、Alcatel A0s6、Dell KS9 以及huawei 在內(nèi)的多個廠商設(shè)備。
Pandas(Python Data Analysis Library)是基于Numpy 的一個工具集,專為解決數(shù)據(jù)分析任務(wù)而創(chuàng)建。Pandas 納入了大量庫和一些標(biāo)準(zhǔn)數(shù)據(jù)模型,為大型數(shù)據(jù)集提供高效的操作工具。同時,Pandas 是Python 的一個數(shù)據(jù)分析包,最初被作為金融數(shù)據(jù)分析工具而研發(fā),在時間序列數(shù)據(jù)分析方面表現(xiàn)卓越。Pandas 的主要組件是Series 和Dataframe[3]。本文主要以Pandas 為工具對各個單位提交上來的Excel 數(shù)據(jù)進行清洗和處理,從中提煉出各類交換機加固命令參數(shù)。
Python 第三方日志庫loguru 相較于自帶loging庫更加簡潔、高效且靈活。Loguru 日志輸出格式信息豐富,包含時間、級別、模塊名、行號及日志信息;loguru 支持輸出日志到多個文件,按級別輸出;loguru 會定時清理超大日志文件,以提高系統(tǒng)運行效率[4]。本文借助loguru 模塊主要實現(xiàn)兩個功能:①記錄數(shù)據(jù)文件清洗處理過程中產(chǎn)生的各類日志;②記錄程序核心模塊運行時產(chǎn)生的各類日志信息。
本文針對較大規(guī)模企業(yè)網(wǎng)中的網(wǎng)絡(luò)設(shè)備需要定期大量重復(fù)性配置的需求場景,基于Python 開源庫Netmiko 設(shè)計如圖1 所示的體系結(jié)構(gòu)圖。該設(shè)計重點包括1 個自動化操作流程和5 個軟件功能模塊[5]兩個方面。
圖1 中的一個自動化操作通過編程方式實現(xiàn)對人工登錄網(wǎng)絡(luò)設(shè)備進行操作配置活動的計算機模擬,以求實現(xiàn)配置操作自動化目標(biāo)的過程。該設(shè)計將一個自動化操作流程分為如圖1 所示的6 個階段。第1 階段,數(shù)據(jù)核對階段,主要借助正則表達式對輸入的Excel 數(shù)據(jù)規(guī)范性和有效性進行核實檢查;第2 階段,數(shù)據(jù)處理節(jié)點,主要依照實際任務(wù)需求完成對清洗、解析、參數(shù)提取及模板生成等工作;第3 階段,設(shè)備過濾階段,主要完成對特殊設(shè)備的排查;第4 階段,登錄方式修改階段,基于安全因素及Netmiko 高效應(yīng)用的考量,通過Telnet 方式將設(shè)備修改為SSH 密碼模式,如果已經(jīng)為SSH 方式則不做處理;第5 階段,登錄方式驗證階段,為確保核心動作的有效執(zhí)行,對SSH 密碼登錄參數(shù)進行驗證;第6 階段,配置運行階段,主要完成對設(shè)備的自動化操作,從而實現(xiàn)運維效率的大幅提升。
圖1 程序結(jié)構(gòu)設(shè)計示意
根據(jù)實際應(yīng)用需求,該設(shè)計將最終編程實現(xiàn)的自動化運維程序功能分為數(shù)據(jù)解析處理模塊、設(shè)備地址過濾模塊、設(shè)備登錄配置模塊、日志信息記錄模塊和配置命令執(zhí)行模塊[7]。
對于數(shù)據(jù)解析處理模塊ExcelParserHandler 而言,主要基于Pandas 完成對不同部門提交的網(wǎng)絡(luò)設(shè)備配置參數(shù)的提取工作,為基于參數(shù)模板構(gòu)造網(wǎng)絡(luò)設(shè)備配置命令提供基礎(chǔ)服務(wù);對于設(shè)備地址過濾模塊SWIPFilterHandler 而言,主要基于Pythonping實現(xiàn),用于對不在線或者特殊設(shè)備的過濾;對于設(shè)備登錄配置模塊SSHLoginHandler 而言,主要基于Telnetlib 實現(xiàn),將所有設(shè)備登錄方式修改為SSH 密碼模式登錄,一方面為Netmiko 執(zhí)行遠(yuǎn)程操控打下基礎(chǔ),另一方面也是出于對生產(chǎn)網(wǎng)絡(luò)安全加固的考量;對于日志信息記錄模塊LogRecordHandler 而言,主要基于loguru 實現(xiàn),完成對軟件5 個功能模塊運行過程中產(chǎn)生的各類文本信息及異常情況進行記錄,以備后續(xù)故障排查及結(jié)果驗證所用;對于配置命令執(zhí)行模塊CommandsHandler 而言,基于Netmiko 實現(xiàn),該模塊是整個運維程序開發(fā)實現(xiàn)的重點和核心,完成對各類大量重復(fù)性配置命令和系統(tǒng)升級操作的自動化工作。
上述5 個模塊皆基于國產(chǎn)麒麟操作系統(tǒng)以Python3 類的形式實現(xiàn),在自動化操作流程的各個關(guān)鍵節(jié)點,通過對上述5 個功能模塊類的實例化而獲得相應(yīng)操作對象,從而執(zhí)行相應(yīng)操作完成相應(yīng)的自動化功能。
本文對如圖1 所示設(shè)計方法在國產(chǎn)麒麟操作系統(tǒng)上基于Python 進行編程實踐時,以網(wǎng)絡(luò)設(shè)備運維自動化操作流程為主線,以框架搭建設(shè)計為基石,以模塊動態(tài)加載來應(yīng)對運維任務(wù)的多樣性和不確定性,從而保持基于Netmiko 的自動化運維程序的穩(wěn)定性和良好可擴展性。限于篇幅,本文以ExcelParserHandler模塊和CommandHandler為重心,闡述該自動化運維程序的編程實現(xiàn)細(xì)節(jié)。
功能模塊ExcelParserHandler基于Pandas庫實現(xiàn),主要完成對不同部門提交的Excel 文件進行數(shù)據(jù)清洗和數(shù)據(jù)解析,從而獲得批量配置交換機所需的各類參數(shù),在配置模板作用下批量生成交換機配置命令。
示例偽碼如下:
核心模塊CommandHandler基于Netmiko以Python3類的方式實現(xiàn),具體細(xì)節(jié)如偽碼所示,主要完成以SSH 方式實現(xiàn)對大規(guī)模網(wǎng)絡(luò)設(shè)備配置操作和系統(tǒng)升級的自動化運行。在實際應(yīng)用實踐中,應(yīng)將該類的實例化置于線程中,從而實現(xiàn)對千余臺網(wǎng)絡(luò)設(shè)備配置管理的并行運行,在提高效率的同時,確保程序運行的穩(wěn)定性和健壯性。鑒于篇幅所限,本文僅給出關(guān)鍵步驟的偽碼表示。
筆者對本文所述自動化運維程序分別在華為eNSP 模擬器構(gòu)建的網(wǎng)絡(luò)拓?fù)浜鸵粋€由500 余臺網(wǎng)絡(luò)設(shè)備架構(gòu)組成的實際生產(chǎn)網(wǎng)絡(luò)中均進行測試和部署,運行效果良好。在實際應(yīng)用中,本文所述自動化運維方法可根據(jù)實際需求進行多樣化任務(wù)定制。以筆者所處實際生產(chǎn)網(wǎng)絡(luò)環(huán)境為例(見圖2),利用該自動化運維程序?qū)Σ块TA 中網(wǎng)絡(luò)設(shè)備進行相關(guān)網(wǎng)絡(luò)加固操作,對部門B 中網(wǎng)絡(luò)設(shè)備進行定期配置文件備份操作,對部門C 中的網(wǎng)絡(luò)設(shè)備進行系統(tǒng)升級操作,對部門D 中網(wǎng)絡(luò)設(shè)備進行QoS 參數(shù)修改操作,其中每種任務(wù)只需根據(jù)需求變換配置模板即可。
同時,詳盡的日志記錄功能確保應(yīng)用過程中的過程可追溯,為批量自動化運維提供支持。圖3 為該自動化運維程序在對部門A 中網(wǎng)絡(luò)交換機進行批量自動地址綁定操作時所生成的日志信息,詳細(xì)記錄了配置腳本在遠(yuǎn)程交換機上的執(zhí)行過程。
圖2 自動化運維程序應(yīng)用場景
圖3 運行日志記錄
文章在對當(dāng)前信息中心網(wǎng)絡(luò)運維工作中面臨的困難和挑戰(zhàn)進行深入分析的基礎(chǔ)上,提出了一種基于Netmiko 構(gòu)建企業(yè)信息中心網(wǎng)絡(luò)設(shè)備自動化運維系統(tǒng)的解決思路,設(shè)計自動化運維程序的體系結(jié)構(gòu)圖,并且在國產(chǎn)麒麟操作系統(tǒng)上基于Python3 進行了編程實現(xiàn),將其部署應(yīng)用于實際生產(chǎn)環(huán)境,完成了網(wǎng)絡(luò)加固、系統(tǒng)升級、配置備份及QoS 參數(shù)修改等大量重復(fù)性操作,取得了良好應(yīng)用效果。實踐表明,本文所述方法穩(wěn)妥可靠,可操作性強,具有良好的可擴展性和先進性。