李新慶,孫 超,陳文琴,王艷萍,王添男
(1.中國氣象局旱區(qū)特色農(nóng)業(yè)氣象災(zāi)害監(jiān)測預(yù)警與風(fēng)險管理重點實驗室,寧夏銀川 750002;2.寧夏氣象防災(zāi)減災(zāi)重點實驗室,寧夏銀川 750002;3.國家氣象信息中心,北京 100081)
隨著氣象業(yè)務(wù)逐步向信息化、智能化、數(shù)智化時代邁進,以氣象大數(shù)據(jù)云平臺(天擎)、氣象綜合業(yè)務(wù)實時監(jiān)控系統(tǒng)(天鏡)等為代表的氣象信息系統(tǒng)雖然可完成云原生底層系統(tǒng)重構(gòu)和功能統(tǒng)籌集約[1-2],但是也造成日益凸顯的運維服務(wù)問題。傳統(tǒng)氣象信息系統(tǒng)運維主要依賴業(yè)務(wù)人員對系統(tǒng)的主觀經(jīng)驗,造成運維故障處置工作的效率低下。為此,開展自動化運維技術(shù)應(yīng)用研究,對氣象信息業(yè)務(wù)系統(tǒng)穩(wěn)定、有序運行具有十分重要的意義。
DevOps將開發(fā)和運維兩個領(lǐng)域進行統(tǒng)籌合并,促進開發(fā)、運維和保障部門之間溝通、協(xié)作和整合[3]。同時,以SaltStack、Ansible 等自動化工具[4]促使開發(fā)運維一體化成為可能。目前,部分學(xué)者已將DevOps和自動化工具在不同行業(yè)進行應(yīng)用[5-7],提升運維管理水平。因此,文中采用DevOps和自動化工具構(gòu)建氣象信息業(yè)務(wù)系統(tǒng)自動化運維應(yīng)用,解決國省氣象信息運維難點、痛點問題,并將全部功能融入“天鏡”系統(tǒng)中進行全國推廣,在實際業(yè)務(wù)應(yīng)用中獲得一定效益。
自動化運維開發(fā)目標(biāo)采用基于DevOps 架構(gòu)設(shè)計思想,覆蓋DevOps 對軟件生命周期中需求設(shè)計、開發(fā)、測試、發(fā)布、部署和交付等環(huán)節(jié),規(guī)范國省氣象信息業(yè)務(wù)運維場景的自動化開發(fā)流程,具體開發(fā)目標(biāo)設(shè)計如圖1 所示。
圖1 基于DevOps的自動化運維開發(fā)目標(biāo)設(shè)計
以開源性、便捷性和擴展性為原則,同時兼顧氣象業(yè)務(wù)用戶的實際操作性[8],對自動化運維開發(fā)進行目標(biāo)設(shè)計,包含:①環(huán)境準(zhǔn)備,針對自動化運維開發(fā)所依賴的環(huán)境進行配置、授權(quán),提供基礎(chǔ)平臺支撐;②需求設(shè)計,采用QXKB 進行需求設(shè)計和知識共享,并提供Git、SVN 等方式的代碼管理功能;③開發(fā),提供在線腳本開發(fā)編輯器,支持Python、Shell 等開發(fā)語言;④測試驗證,系統(tǒng)提供Jmeter 等壓力測試工具,對開發(fā)代碼執(zhí)行過程進行測試驗證,并將關(guān)鍵結(jié)果回寫到CMDB(Configuration Management Database)中存儲;⑤發(fā)布,對測試通過的代碼進行編排、場景發(fā)布,打包成tar文件格式;⑥自動化部署,通過SaltStack等開源DevOps 自動化工具,對自動化腳本進行自動化部署;⑦監(jiān)控,采用Nagios、Zabbix 等工具,對自動化運維目標(biāo)主機進行監(jiān)控和日志記錄,滿足氣象信息系統(tǒng)的持續(xù)運維需求。
平臺架構(gòu)主要包括自動化運維平臺、監(jiān)控平臺、CMDB 和自動化輔助工具四大部分。其中,自動化輔助工具是自動化運維開發(fā)的一系列工具集合,包括告警臺(Alert)、服務(wù)流程管理(ITSM)、報表分析(Report)、云監(jiān)控(Monitor)等功能模塊。自動化運維平臺主要以CMDB 為中心,通過CMDB 與ITSM、Alert、Monitor、Report 等模塊進行對接和集成,達到各個模塊功能無縫銜接,最終實現(xiàn)氣象業(yè)務(wù)的自動化運維目的。平臺架構(gòu)如圖2 所示。
圖2 自動化運維平臺架構(gòu)圖
CMDB 在自動化運維平臺設(shè)計中承擔(dān)最基礎(chǔ)的角色,定義自動化運維平臺需要管理的元數(shù)據(jù),用于存儲、管理、映射氣象行業(yè)部門中的基礎(chǔ)資源、業(yè)務(wù)應(yīng)用、運維管理等配置信息。CMDB 除了作為資產(chǎn)管理和ITSM 流程數(shù)據(jù)存儲以外,還承擔(dān)自動化運維流程和工具集成的角色,實現(xiàn)自動化運維場景中統(tǒng)一數(shù)據(jù)的消費、執(zhí)行、回寫和閉環(huán)流程等功能[9]。
CMDB 模型構(gòu)建定義統(tǒng)一的元素描述模板,使其具備云計算環(huán)境下的云服務(wù)新特征。CMDB 模型通過配置項(Configure Item,CI)對全部關(guān)聯(lián)細節(jié)進行抽象,形成CI、屬性和關(guān)系(Configure Relationship,CR)三個核心要素[10],組成有效的CMDB 模型對象,實現(xiàn)自動化運維中各類配置數(shù)據(jù)的統(tǒng)一管理。
按照CMDB 信息模型所描述的結(jié)構(gòu),對CI 模型中CI 層級(深度)和范圍(廣度)作出定義[11],將CMDB 配置域定義為業(yè)務(wù)應(yīng)用域、平臺資源域、虛擬資源域、基礎(chǔ)設(shè)施域和管理資源域五類。每個配置項域內(nèi)可根據(jù)關(guān)聯(lián)緊密關(guān)系,將配置項再細劃為二級配置項組和三級配置項類。其中,業(yè)務(wù)應(yīng)用域根據(jù)“天擎”系統(tǒng)的技術(shù)特征,將經(jīng)過云原生改造的氣象核心業(yè)務(wù)系統(tǒng)進行二級分類定義,主要包含智能網(wǎng)格預(yù)報系統(tǒng)、公共氣象服務(wù)發(fā)布系統(tǒng)、氣象業(yè)務(wù)內(nèi)網(wǎng)、氣候監(jiān)測報警系統(tǒng)等氣象部門重要信息系統(tǒng);管理資源域包含項目合同、單位機構(gòu)、單位人員、設(shè)備廠商等管理信息。
配置項關(guān)系(CR)的設(shè)計是自動化運維故障診斷定位、告警關(guān)聯(lián)分析和性能監(jiān)控等問題處置的關(guān)鍵[12],通過明確CR 關(guān)系,就能勾畫出較為清晰的氣象信息業(yè)務(wù)自動化運維場景。由于自動化運維技術(shù)依賴于云原生技術(shù)和各類應(yīng)用軟件的云化改造,因此,基于云平臺構(gòu)建CMDB 配置項關(guān)系更加復(fù)雜多樣,文中簡要概括為依賴/支持關(guān)系、應(yīng)用/被應(yīng)用關(guān)系、安裝/安裝于關(guān)系、運行/運行在關(guān)系、連接/被連接關(guān)系、包含/屬于關(guān)系等[13]。以操作系統(tǒng)為例,其配置項關(guān)系如圖3 所示。
圖3 配置項關(guān)系圖
對自動化運維在氣象信息系統(tǒng)所需的資源進行梳理,確定自動化運維開發(fā)流程所需的配置項關(guān)系,精簡冗余的配置項(CI)信息,實現(xiàn)對應(yīng)存儲表的結(jié)構(gòu)設(shè)計。由于MongoDB 具備高性能、易擴展、使用簡單等特點,故文中采用MongoDB 對CMDB 數(shù)據(jù)存儲結(jié)構(gòu)進行設(shè)計實現(xiàn),將運維業(yè)務(wù)抽象為模板、資源、類型和關(guān)系。MongoDB 作為一款文檔型非結(jié)構(gòu)化數(shù)據(jù)庫[14],支持松散的數(shù)據(jù)結(jié)構(gòu),其數(shù)據(jù)組織采用面向集合的方式(類似關(guān)系型數(shù)據(jù)庫中的表),通過BSON(Binary JSON)進行數(shù)據(jù)存儲。
資源模型和資源數(shù)據(jù)構(gòu)成自動化運維CMDB設(shè)計中最為核心的數(shù)據(jù)存儲表結(jié)構(gòu)。資源模型是對被納管對象進行建模的結(jié)果,該對象的存儲字段和對象之間的關(guān)系分別由資源模板、資源類型和資源屬性等表組成。資源數(shù)據(jù)是資源模型和關(guān)系定義實例化的結(jié)果,由資源對象、資源關(guān)系等表組成。自動化運維CMDB 核心表之間關(guān)系如圖4 所示。其中,_id 為默認創(chuàng)建的唯一索引,為ObjectId對象。
圖4 CMDB主要表結(jié)構(gòu)關(guān)系圖
自動化運維開發(fā)需要針對不同運維業(yè)務(wù)做出更為細粒度的功能抽象,文中提出通過操作的形式將各功能分解為最小執(zhí)行單元。操作承擔(dān)具體的執(zhí)行處理動作,編排針對操作流程進行集中組織,以達到自動化運維開發(fā)各環(huán)節(jié)之間的有效銜接。因此,編排作為自動化運維功能中最為核心的組成部分,用于協(xié)調(diào)操作、資源和用戶三者之間的關(guān)系,以滿足氣象信息運維業(yè)務(wù)的多元化需求。
自動化運維功能主要概括為四個步驟:①首先將業(yè)務(wù)運維功能進行分解、抽象,形成操作,在操作中完成自動化運維腳本的測試開發(fā),開發(fā)支持Python、Shell、VBScript 等多種語言;②通過Web 平臺提供的可視化編排設(shè)計器將多個操作進行組織,傳遞入?yún)?、出參等信息,組成自動化運維業(yè)務(wù)場景下的編排流程;③通過人工或者自動的方式完成編排的作業(yè)調(diào)度,自動方式采用Quartz 任務(wù)調(diào)度觸發(fā)器進行任務(wù)執(zhí)行,支持Crontab 表達式的執(zhí)行策略編輯,滿足任務(wù)的周期執(zhí)行和定時執(zhí)行;④最后將執(zhí)行結(jié)果進行數(shù)據(jù)組織、合并,采用RESTful API 服務(wù)接口,通過報表分析(Report)、綜合展示(Show)或告警臺(Alert)等方式為用戶反饋自動化運維結(jié)果。
自動化運維需為用戶提供一個具備可視化、便捷化的流程編排管理模塊,以滿足國省兩級通用性的開發(fā)需求。針對上述問題,采用基于Activiti 開源工作流引擎的編排流程設(shè)計,用戶通過表格、圖形和代碼三種方式進行業(yè)務(wù)流程編排可視化設(shè)計。
Activiti 是一款流行的業(yè)務(wù)流程管理開源框架,支持業(yè)務(wù)流程建模標(biāo)注(Business Process Modeling Notation 2.0,BPMN 2.0)規(guī)范[15],其核心理念是將業(yè)務(wù)過程模型分解為活動節(jié)點和控制節(jié)點,活動節(jié)點用于描述任務(wù),控制節(jié)點用于描述活動之前的控制流[16]。結(jié)合BPMN 2.0 規(guī)范,對文中所設(shè)計的編排流程進行標(biāo)準(zhǔn)定義,包含開始、任務(wù)、網(wǎng)關(guān)、流、人工處理和結(jié)束六個環(huán)節(jié)。用戶可根據(jù)上述環(huán)節(jié)進行自動化運維操作流程的任意組合設(shè)計,以滿足氣象信息系統(tǒng)多種運維場景的流程編排業(yè)務(wù)需求。編輯模塊自動將所設(shè)計的流程模型轉(zhuǎn)換為XML(Extensible Markup Language)文件,提供給Activiti 引擎進行調(diào)用解析。Activiti 引擎通過RESTful API 與客戶端進行最終交互?;贏ctiviti引擎的編排流程設(shè)計如圖5所示。
圖5 基于Activiti的編排流程設(shè)計
自動化運維Web 平臺是面向用戶進行自動化開發(fā)、配置管理、服務(wù)編排、任務(wù)作業(yè)等功能為一體的前端界面,也是自動化運維功能設(shè)計面向用戶的最終呈現(xiàn)。其主要功能包括編排、操作、資源等自動化流程的配置管理功能,以及運維場景、定時作業(yè)、作業(yè)總覽等自動化運維Web 可視化功能。
構(gòu)建面向氣象業(yè)務(wù)的國省通用自動化運維Web平臺,采用SaltStack 后端DevOps 自動化運維工具和Django 前端Web 框架技術(shù)相結(jié)合的方法。SaltStack主要承擔(dān)Web 后端自動化運維采集和控制功能,采用SaltSack Master 節(jié)點集群方式部署,實現(xiàn)后端采集代理(Agent)的配置管理和遠程控制。前端Django框架提供Web 用戶操作和可視化封裝功能,且兩者之間通過RESTful API 接口進行通信,實現(xiàn)自動化運維功能的前后端輕量級交互和快速響應(yīng)。
“天擎”系統(tǒng)作為國省兩級氣象部門“云+端”業(yè)務(wù)模式新格局的核心軟件技術(shù)平臺,全面統(tǒng)籌管理觀測、預(yù)報、服務(wù)等地球系統(tǒng)大數(shù)據(jù),提供“數(shù)據(jù)、算力、算法”統(tǒng)一的平臺化服務(wù)。該系統(tǒng)以云原生技術(shù)重構(gòu)氣象核心業(yè)務(wù)功能,主要由交換質(zhì)控系統(tǒng),產(chǎn)品加工系統(tǒng)、挖掘分析系統(tǒng)和存儲服務(wù)系統(tǒng)共四個子系統(tǒng)組成。目前,已經(jīng)實現(xiàn)全國部署和業(yè)務(wù)試運行,成為全面支撐氣象預(yù)測預(yù)報和公共服務(wù)的氣象信息數(shù)據(jù)支撐平臺,其業(yè)務(wù)重要性不言而喻。因此,對于該系統(tǒng)的自動化運維功能需求迫切。
在傳統(tǒng)系統(tǒng)運維方面,針對“天擎”系統(tǒng)日常運維工作主要包含:①檢查各服務(wù)器基礎(chǔ)資源性能是否正常以及關(guān)鍵進程是否正常;②檢查系統(tǒng)數(shù)據(jù)產(chǎn)品加工數(shù)量是否正常以及數(shù)據(jù)入庫完整性是否正常;③檢查中間件性能指標(biāo)是否正常,消息中間件隊列是否積壓,計算引擎對應(yīng)數(shù)據(jù)目錄是否積壓;④檢查服務(wù)接口運行是否正常,接口并發(fā)用戶數(shù)、請求響應(yīng)時間等性能指標(biāo)是否正常,是否能夠?qū)ν馓峁┙涌跀?shù)據(jù)下載服務(wù)。為此,需借助自動化運維工具改善傳統(tǒng)運維管理水平,提升業(yè)務(wù)人員針對異常問題的處置效率,保障“天擎”系統(tǒng)高效、穩(wěn)定運行。
以“天擎”交換質(zhì)控系統(tǒng)的一次自動化運維巡檢為例,該子系統(tǒng)作為“天擎”系統(tǒng)的前置環(huán)節(jié),承擔(dān)氣象觀測數(shù)據(jù)、氣象產(chǎn)品數(shù)據(jù)的快速匯聚、質(zhì)量控制和解碼入庫工作,對應(yīng)的自動化運維流程和各環(huán)節(jié)任務(wù)耗時如圖6 所示。其中,①-⑥環(huán)節(jié)為任務(wù)并行執(zhí)行,任務(wù)執(zhí)行時間按照耗時最長統(tǒng)計,任務(wù)結(jié)束后再順序執(zhí)行⑦-⑩環(huán)節(jié),故自動化巡檢任務(wù)總耗時為67 s,有效提升了傳統(tǒng)運維工作效率。
圖6 自動化運維應(yīng)用示例
針對“天擎”系統(tǒng)進行日常自動化運維巡檢性能指標(biāo)設(shè)計,主要包括:①基礎(chǔ)資源,對服務(wù)器、存儲設(shè)備、端口等指標(biāo)巡檢;②系統(tǒng)應(yīng)用,對操作系統(tǒng)、非結(jié)構(gòu)化數(shù)據(jù)庫(MongoDB、Elasticsearch)、結(jié)構(gòu)化數(shù)據(jù)庫(MySQL、Oracle)、緩存、消息中間件、Web 中間件等指標(biāo)巡檢;③核心業(yè)務(wù),對支撐“天擎”系統(tǒng)各個功能的關(guān)鍵進程和服務(wù)接口等指標(biāo)進行巡檢。基于“天擎”系統(tǒng)的自動化運維巡檢關(guān)鍵性能指標(biāo)如表1 所示。
表1 “天擎”系統(tǒng)自動化運維巡檢關(guān)鍵性能指標(biāo)
為滿足氣象信息系統(tǒng)集約化建設(shè)要求,自動化運維平臺各項功能已融入到“天鏡”系統(tǒng)中,該系統(tǒng)的一個核心功能模塊(Automation)提供自動化運維服務(wù)。隨著“天鏡”系統(tǒng)的業(yè)務(wù)化運行,自動化運維功能已在國省兩級氣象部門進行推廣使用。經(jīng)過為期一年的業(yè)務(wù)應(yīng)用,在國家級層面,涵蓋氣象業(yè)務(wù)運維場景八類,子場景42類,開發(fā)編排38個,開發(fā)操作腳本176個,自動生成作業(yè)108 476個,生成各類報表11 983份,發(fā)送告警通知83次,故障處置效率較運行前提升28%。在省級層面,已完成向全國各省的開發(fā)和應(yīng)用推廣工作,涵蓋業(yè)務(wù)場景六類,開發(fā)和共享省級通用編排操作49 個,滿足氣象核心業(yè)務(wù)的日常運維功能。
自動化運維是提升氣象信息化服務(wù)水平和增強氣象信息核心業(yè)務(wù)智能運維的重要途徑之一,也是構(gòu)建國省氣象一體化運維體系、提升協(xié)同運維、增強綜合氣象業(yè)務(wù)監(jiān)控的有效方式。因此,結(jié)合氣象業(yè)務(wù)發(fā)展趨勢和云時代技術(shù)特征,開展基于DevOps 自動化工具的氣象信息自動化運維設(shè)計應(yīng)用研究,構(gòu)建國省統(tǒng)一、標(biāo)準(zhǔn)的自動化運維Web 平臺,有效提升氣象信息系統(tǒng)運維服務(wù)能力。文中對自動化運維目前的研究現(xiàn)狀進行分析,并對自動化運維開發(fā)關(guān)鍵技術(shù)進行詳細闡述,將研究成果在國省兩級氣象部門進行業(yè)務(wù)應(yīng)用。該項工作不僅為后續(xù)開展故障自愈、知識圖譜、根因分析等智能運維(AIOps)技術(shù)研究奠定基礎(chǔ),還能為其他行業(yè)部門信息系統(tǒng)自動化運維設(shè)計與實現(xiàn)提供借鑒價值。