李新慶,孫 超,陳文琴,王艷萍,王添男
(1.中國氣象局旱區特色農業氣象災害監測預警與風險管理重點實驗室,寧夏銀川 750002;2.寧夏氣象防災減災重點實驗室,寧夏銀川 750002;3.國家氣象信息中心,北京 100081)
隨著氣象業務逐步向信息化、智能化、數智化時代邁進,以氣象大數據云平臺(天擎)、氣象綜合業務實時監控系統(天鏡)等為代表的氣象信息系統雖然可完成云原生底層系統重構和功能統籌集約[1-2],但是也造成日益凸顯的運維服務問題。傳統氣象信息系統運維主要依賴業務人員對系統的主觀經驗,造成運維故障處置工作的效率低下。為此,開展自動化運維技術應用研究,對氣象信息業務系統穩定、有序運行具有十分重要的意義。
DevOps將開發和運維兩個領域進行統籌合并,促進開發、運維和保障部門之間溝通、協作和整合[3]。同時,以SaltStack、Ansible 等自動化工具[4]促使開發運維一體化成為可能。目前,部分學者已將DevOps和自動化工具在不同行業進行應用[5-7],提升運維管理水平。因此,文中采用DevOps和自動化工具構建氣象信息業務系統自動化運維應用,解決國省氣象信息運維難點、痛點問題,并將全部功能融入“天鏡”系統中進行全國推廣,在實際業務應用中獲得一定效益。
自動化運維開發目標采用基于DevOps 架構設計思想,覆蓋DevOps 對軟件生命周期中需求設計、開發、測試、發布、部署和交付等環節,規范國省氣象信息業務運維場景的自動化開發流程,具體開發目標設計如圖1 所示。

圖1 基于DevOps的自動化運維開發目標設計
以開源性、便捷性和擴展性為原則,同時兼顧氣象業務用戶的實際操作性[8],對自動化運維開發進行目標設計,包含:①環境準備,針對自動化運維開發所依賴的環境進行配置、授權,提供基礎平臺支撐;②需求設計,采用QXKB 進行需求設計和知識共享,并提供Git、SVN 等方式的代碼管理功能;③開發,提供在線腳本開發編輯器,支持Python、Shell 等開發語言;④測試驗證,系統提供Jmeter 等壓力測試工具,對開發代碼執行過程進行測試驗證,并將關鍵結果回寫到CMDB(Configuration Management Database)中存儲;⑤發布,對測試通過的代碼進行編排、場景發布,打包成tar文件格式;⑥自動化部署,通過SaltStack等開源DevOps 自動化工具,對自動化腳本進行自動化部署;⑦監控,采用Nagios、Zabbix 等工具,對自動化運維目標主機進行監控和日志記錄,滿足氣象信息系統的持續運維需求。
平臺架構主要包括自動化運維平臺、監控平臺、CMDB 和自動化輔助工具四大部分。其中,自動化輔助工具是自動化運維開發的一系列工具集合,包括告警臺(Alert)、服務流程管理(ITSM)、報表分析(Report)、云監控(Monitor)等功能模塊。自動化運維平臺主要以CMDB 為中心,通過CMDB 與ITSM、Alert、Monitor、Report 等模塊進行對接和集成,達到各個模塊功能無縫銜接,最終實現氣象業務的自動化運維目的。平臺架構如圖2 所示。

圖2 自動化運維平臺架構圖
CMDB 在自動化運維平臺設計中承擔最基礎的角色,定義自動化運維平臺需要管理的元數據,用于存儲、管理、映射氣象行業部門中的基礎資源、業務應用、運維管理等配置信息。CMDB 除了作為資產管理和ITSM 流程數據存儲以外,還承擔自動化運維流程和工具集成的角色,實現自動化運維場景中統一數據的消費、執行、回寫和閉環流程等功能[9]。
CMDB 模型構建定義統一的元素描述模板,使其具備云計算環境下的云服務新特征。CMDB 模型通過配置項(Configure Item,CI)對全部關聯細節進行抽象,形成CI、屬性和關系(Configure Relationship,CR)三個核心要素[10],組成有效的CMDB 模型對象,實現自動化運維中各類配置數據的統一管理。
按照CMDB 信息模型所描述的結構,對CI 模型中CI 層級(深度)和范圍(廣度)作出定義[11],將CMDB 配置域定義為業務應用域、平臺資源域、虛擬資源域、基礎設施域和管理資源域五類。每個配置項域內可根據關聯緊密關系,將配置項再細劃為二級配置項組和三級配置項類。其中,業務應用域根據“天擎”系統的技術特征,將經過云原生改造的氣象核心業務系統進行二級分類定義,主要包含智能網格預報系統、公共氣象服務發布系統、氣象業務內網、氣候監測報警系統等氣象部門重要信息系統;管理資源域包含項目合同、單位機構、單位人員、設備廠商等管理信息。
配置項關系(CR)的設計是自動化運維故障診斷定位、告警關聯分析和性能監控等問題處置的關鍵[12],通過明確CR 關系,就能勾畫出較為清晰的氣象信息業務自動化運維場景。由于自動化運維技術依賴于云原生技術和各類應用軟件的云化改造,因此,基于云平臺構建CMDB 配置項關系更加復雜多樣,文中簡要概括為依賴/支持關系、應用/被應用關系、安裝/安裝于關系、運行/運行在關系、連接/被連接關系、包含/屬于關系等[13]。以操作系統為例,其配置項關系如圖3 所示。

圖3 配置項關系圖
對自動化運維在氣象信息系統所需的資源進行梳理,確定自動化運維開發流程所需的配置項關系,精簡冗余的配置項(CI)信息,實現對應存儲表的結構設計。由于MongoDB 具備高性能、易擴展、使用簡單等特點,故文中采用MongoDB 對CMDB 數據存儲結構進行設計實現,將運維業務抽象為模板、資源、類型和關系。MongoDB 作為一款文檔型非結構化數據庫[14],支持松散的數據結構,其數據組織采用面向集合的方式(類似關系型數據庫中的表),通過BSON(Binary JSON)進行數據存儲。
資源模型和資源數據構成自動化運維CMDB設計中最為核心的數據存儲表結構。資源模型是對被納管對象進行建模的結果,該對象的存儲字段和對象之間的關系分別由資源模板、資源類型和資源屬性等表組成。資源數據是資源模型和關系定義實例化的結果,由資源對象、資源關系等表組成。自動化運維CMDB 核心表之間關系如圖4 所示。其中,_id 為默認創建的唯一索引,為ObjectId對象。

圖4 CMDB主要表結構關系圖
自動化運維開發需要針對不同運維業務做出更為細粒度的功能抽象,文中提出通過操作的形式將各功能分解為最小執行單元。操作承擔具體的執行處理動作,編排針對操作流程進行集中組織,以達到自動化運維開發各環節之間的有效銜接。因此,編排作為自動化運維功能中最為核心的組成部分,用于協調操作、資源和用戶三者之間的關系,以滿足氣象信息運維業務的多元化需求。
自動化運維功能主要概括為四個步驟:①首先將業務運維功能進行分解、抽象,形成操作,在操作中完成自動化運維腳本的測試開發,開發支持Python、Shell、VBScript 等多種語言;②通過Web 平臺提供的可視化編排設計器將多個操作進行組織,傳遞入參、出參等信息,組成自動化運維業務場景下的編排流程;③通過人工或者自動的方式完成編排的作業調度,自動方式采用Quartz 任務調度觸發器進行任務執行,支持Crontab 表達式的執行策略編輯,滿足任務的周期執行和定時執行;④最后將執行結果進行數據組織、合并,采用RESTful API 服務接口,通過報表分析(Report)、綜合展示(Show)或告警臺(Alert)等方式為用戶反饋自動化運維結果。
自動化運維需為用戶提供一個具備可視化、便捷化的流程編排管理模塊,以滿足國省兩級通用性的開發需求。針對上述問題,采用基于Activiti 開源工作流引擎的編排流程設計,用戶通過表格、圖形和代碼三種方式進行業務流程編排可視化設計。
Activiti 是一款流行的業務流程管理開源框架,支持業務流程建模標注(Business Process Modeling Notation 2.0,BPMN 2.0)規范[15],其核心理念是將業務過程模型分解為活動節點和控制節點,活動節點用于描述任務,控制節點用于描述活動之前的控制流[16]。結合BPMN 2.0 規范,對文中所設計的編排流程進行標準定義,包含開始、任務、網關、流、人工處理和結束六個環節。用戶可根據上述環節進行自動化運維操作流程的任意組合設計,以滿足氣象信息系統多種運維場景的流程編排業務需求。編輯模塊自動將所設計的流程模型轉換為XML(Extensible Markup Language)文件,提供給Activiti 引擎進行調用解析。Activiti 引擎通過RESTful API 與客戶端進行最終交互。基于Activiti引擎的編排流程設計如圖5所示。

圖5 基于Activiti的編排流程設計
自動化運維Web 平臺是面向用戶進行自動化開發、配置管理、服務編排、任務作業等功能為一體的前端界面,也是自動化運維功能設計面向用戶的最終呈現。其主要功能包括編排、操作、資源等自動化流程的配置管理功能,以及運維場景、定時作業、作業總覽等自動化運維Web 可視化功能。
構建面向氣象業務的國省通用自動化運維Web平臺,采用SaltStack 后端DevOps 自動化運維工具和Django 前端Web 框架技術相結合的方法。SaltStack主要承擔Web 后端自動化運維采集和控制功能,采用SaltSack Master 節點集群方式部署,實現后端采集代理(Agent)的配置管理和遠程控制。前端Django框架提供Web 用戶操作和可視化封裝功能,且兩者之間通過RESTful API 接口進行通信,實現自動化運維功能的前后端輕量級交互和快速響應。
“天擎”系統作為國省兩級氣象部門“云+端”業務模式新格局的核心軟件技術平臺,全面統籌管理觀測、預報、服務等地球系統大數據,提供“數據、算力、算法”統一的平臺化服務。該系統以云原生技術重構氣象核心業務功能,主要由交換質控系統,產品加工系統、挖掘分析系統和存儲服務系統共四個子系統組成。目前,已經實現全國部署和業務試運行,成為全面支撐氣象預測預報和公共服務的氣象信息數據支撐平臺,其業務重要性不言而喻。因此,對于該系統的自動化運維功能需求迫切。
在傳統系統運維方面,針對“天擎”系統日常運維工作主要包含:①檢查各服務器基礎資源性能是否正常以及關鍵進程是否正常;②檢查系統數據產品加工數量是否正常以及數據入庫完整性是否正常;③檢查中間件性能指標是否正常,消息中間件隊列是否積壓,計算引擎對應數據目錄是否積壓;④檢查服務接口運行是否正常,接口并發用戶數、請求響應時間等性能指標是否正常,是否能夠對外提供接口數據下載服務。為此,需借助自動化運維工具改善傳統運維管理水平,提升業務人員針對異常問題的處置效率,保障“天擎”系統高效、穩定運行。
以“天擎”交換質控系統的一次自動化運維巡檢為例,該子系統作為“天擎”系統的前置環節,承擔氣象觀測數據、氣象產品數據的快速匯聚、質量控制和解碼入庫工作,對應的自動化運維流程和各環節任務耗時如圖6 所示。其中,①-⑥環節為任務并行執行,任務執行時間按照耗時最長統計,任務結束后再順序執行⑦-⑩環節,故自動化巡檢任務總耗時為67 s,有效提升了傳統運維工作效率。

圖6 自動化運維應用示例
針對“天擎”系統進行日常自動化運維巡檢性能指標設計,主要包括:①基礎資源,對服務器、存儲設備、端口等指標巡檢;②系統應用,對操作系統、非結構化數據庫(MongoDB、Elasticsearch)、結構化數據庫(MySQL、Oracle)、緩存、消息中間件、Web 中間件等指標巡檢;③核心業務,對支撐“天擎”系統各個功能的關鍵進程和服務接口等指標進行巡檢。基于“天擎”系統的自動化運維巡檢關鍵性能指標如表1 所示。

表1 “天擎”系統自動化運維巡檢關鍵性能指標
為滿足氣象信息系統集約化建設要求,自動化運維平臺各項功能已融入到“天鏡”系統中,該系統的一個核心功能模塊(Automation)提供自動化運維服務。隨著“天鏡”系統的業務化運行,自動化運維功能已在國省兩級氣象部門進行推廣使用。經過為期一年的業務應用,在國家級層面,涵蓋氣象業務運維場景八類,子場景42類,開發編排38個,開發操作腳本176個,自動生成作業108 476個,生成各類報表11 983份,發送告警通知83次,故障處置效率較運行前提升28%。在省級層面,已完成向全國各省的開發和應用推廣工作,涵蓋業務場景六類,開發和共享省級通用編排操作49 個,滿足氣象核心業務的日常運維功能。
自動化運維是提升氣象信息化服務水平和增強氣象信息核心業務智能運維的重要途徑之一,也是構建國省氣象一體化運維體系、提升協同運維、增強綜合氣象業務監控的有效方式。因此,結合氣象業務發展趨勢和云時代技術特征,開展基于DevOps 自動化工具的氣象信息自動化運維設計應用研究,構建國省統一、標準的自動化運維Web 平臺,有效提升氣象信息系統運維服務能力。文中對自動化運維目前的研究現狀進行分析,并對自動化運維開發關鍵技術進行詳細闡述,將研究成果在國省兩級氣象部門進行業務應用。該項工作不僅為后續開展故障自愈、知識圖譜、根因分析等智能運維(AIOps)技術研究奠定基礎,還能為其他行業部門信息系統自動化運維設計與實現提供借鑒價值。