何 林,任 杰,吉 慶
(1.陜西省氣象信息中心,陜西 西安 710014;2.秦嶺和黃土高原生態(tài)環(huán)境氣象重點(diǎn)實(shí)驗(yàn)室,陜西 西安 710014;3.陜西師范大學(xué) 計(jì)算機(jī)科學(xué)學(xué)院,陜西 西安 710119;4.陜西省氣象臺(tái),陜西 西安 710014)
天氣預(yù)報(bào)與人們的生產(chǎn)生活息息相關(guān),在交通出行、工農(nóng)業(yè)生產(chǎn)、自然災(zāi)害防御等方面都發(fā)揮著重要作用。傳統(tǒng)天氣預(yù)報(bào)以縣及以上行政區(qū)域?yàn)榭臻g范圍,針對(duì)未來幾小時(shí)到幾天可能發(fā)生的天氣狀況進(jìn)行定性描述,存在時(shí)空尺度較大、服務(wù)不夠精細(xì)和預(yù)報(bào)準(zhǔn)確率較低等諸多問題。近年來,隨著社會(huì)經(jīng)濟(jì)的發(fā)展及信息化水平的不斷提高,國(guó)-省氣象部門基本建成了以時(shí)空分辨率更高、要素定量化和多樣化、預(yù)報(bào)精準(zhǔn)、服務(wù)貼心為特征的智能網(wǎng)格預(yù)報(bào)業(yè)務(wù)體系,為政府部門和公眾提供了全方位、高分辨率、定量定點(diǎn)的精細(xì)化氣象要素預(yù)報(bào)服務(wù)。但由于智能網(wǎng)格預(yù)報(bào)業(yè)務(wù)流程及功能操作較為復(fù)雜,往往一個(gè)小環(huán)節(jié)的故障都會(huì)導(dǎo)致整個(gè)業(yè)務(wù)流發(fā)生中斷與癱瘓,加之預(yù)報(bào)員與運(yùn)維人員存在信息不對(duì)稱、故障定位困難等問題,進(jìn)一步加劇了運(yùn)維難度。因此實(shí)現(xiàn)一體化監(jiān)控、建立自動(dòng)化運(yùn)維體系、保障預(yù)報(bào)業(yè)務(wù)系統(tǒng)的穩(wěn)定運(yùn)行已成為制約智能網(wǎng)格預(yù)報(bào)業(yè)務(wù)發(fā)展亟待解決的關(guān)鍵問題。
建立滿足業(yè)務(wù)需求的監(jiān)控系統(tǒng)是氣象行業(yè)信息化支撐能力的最重要體現(xiàn)。近年來,國(guó)內(nèi)外氣象部門紛紛開展了氣象業(yè)務(wù)領(lǐng)域監(jiān)控系統(tǒng)的設(shè)計(jì)研發(fā)工作,并取得一定進(jìn)展。在國(guó)外,美國(guó)國(guó)家環(huán)境預(yù)報(bào)中心(NCEP)的實(shí)時(shí)數(shù)據(jù)監(jiān)測(cè)系統(tǒng)(RTDMS)針對(duì)觀測(cè)數(shù)據(jù)的數(shù)量和時(shí)效進(jìn)行實(shí)時(shí)監(jiān)控。歐洲中期天氣預(yù)報(bào)中心(ECMWF)通過研發(fā)觀測(cè)告警系統(tǒng),實(shí)現(xiàn)對(duì)數(shù)據(jù)可用性和質(zhì)量問題的監(jiān)控。在國(guó)內(nèi),國(guó)家級(jí)代表性氣象監(jiān)控系統(tǒng)如文獻(xiàn)[5]的全國(guó)綜合氣象信息共享平臺(tái)(CIMISS)的業(yè)務(wù)監(jiān)控系統(tǒng)(MCP),針對(duì)氣象觀測(cè)數(shù)據(jù),從數(shù)據(jù)的收集分發(fā)、加工處理、存儲(chǔ)管理和共享服務(wù)等全生命周期進(jìn)行了監(jiān)視,并具備監(jiān)視信息的統(tǒng)計(jì)分析和自動(dòng)告警等功能。文獻(xiàn)[6-7]的綜合氣象觀測(cè)系統(tǒng)運(yùn)行監(jiān)控平臺(tái)(ASOM)則針對(duì)國(guó)家級(jí)地面自動(dòng)觀測(cè)氣象站、探空觀測(cè)氣象站、新一代天氣雷達(dá)等重點(diǎn)觀測(cè)網(wǎng)的設(shè)備運(yùn)行狀態(tài)、探測(cè)數(shù)據(jù)質(zhì)量等進(jìn)行監(jiān)控,并改進(jìn)運(yùn)行監(jiān)控綜合評(píng)估、監(jiān)控信息發(fā)布等功能。省級(jí)監(jiān)控系統(tǒng)如文獻(xiàn)[8]設(shè)計(jì)了省級(jí)氣象信息發(fā)布監(jiān)控系統(tǒng),整合現(xiàn)有的預(yù)警信息發(fā)布手段,實(shí)現(xiàn)對(duì)一鍵式發(fā)布?xì)庀鬄?zāi)害預(yù)警信息、氣象服務(wù)信息、氣象為農(nóng)信息的全程監(jiān)控。文獻(xiàn)[9]提出適用于基層臺(tái)站、基于云平臺(tái)的氣象數(shù)據(jù)監(jiān)控服務(wù)系統(tǒng),側(cè)重于觀測(cè)站數(shù)據(jù)下載、監(jiān)控信息獲取、主動(dòng)告警服務(wù)的設(shè)計(jì)實(shí)現(xiàn)。國(guó)內(nèi)氣象業(yè)務(wù)監(jiān)控的集大成者是氣象綜合業(yè)務(wù)實(shí)時(shí)監(jiān)控系統(tǒng)(簡(jiǎn)稱“天鏡”),按照“橫向集中、下沉一級(jí)、綜合監(jiān)控”的原則,建立橫縱一體化的氣象綜合業(yè)務(wù)全流程監(jiān)控,覆蓋氣象觀測(cè)、信息、預(yù)報(bào)、服務(wù)、政務(wù)等氣象業(yè)務(wù)全流程,監(jiān)控范圍覆蓋業(yè)務(wù)系統(tǒng)的場(chǎng)地、網(wǎng)絡(luò)、服務(wù)器、存儲(chǔ)、數(shù)據(jù)流程、應(yīng)用狀態(tài)等,實(shí)現(xiàn)全棧業(yè)務(wù)的集中告警、綜合監(jiān)控、運(yùn)維管理、大屏綜合展示等功能。
該文按照“天鏡”的設(shè)計(jì)理念,全面梳理智能網(wǎng)格天氣預(yù)報(bào)業(yè)務(wù)中的關(guān)鍵環(huán)節(jié),設(shè)計(jì)了智能網(wǎng)格預(yù)報(bào)監(jiān)控平臺(tái)的總體框架及功能模塊。該平臺(tái)以數(shù)據(jù)流向?yàn)橹骶€,對(duì)銜接緊密的關(guān)鍵業(yè)務(wù)環(huán)節(jié)和監(jiān)視對(duì)象進(jìn)行解耦,分別建立監(jiān)控指標(biāo)模型,從監(jiān)視信息的采集、處理、存儲(chǔ)、展示實(shí)現(xiàn)分層逐級(jí)處理。通過可視化大屏設(shè)計(jì),實(shí)現(xiàn)分層綜合監(jiān)視與集中告警,并建立與之聯(lián)動(dòng)的后臺(tái)運(yùn)維信息管理。該平臺(tái)滿足運(yùn)維無紙化、便捷化、規(guī)范化、自動(dòng)化的要求,提高了省級(jí)業(yè)務(wù)運(yùn)維保障能力。
監(jiān)控平臺(tái)圍繞國(guó)家級(jí)-省級(jí)智能網(wǎng)格預(yù)報(bào)業(yè)務(wù)流程進(jìn)行構(gòu)建。表1分析了智能網(wǎng)格預(yù)報(bào)業(yè)務(wù)每個(gè)階段的輸入輸出數(shù)據(jù)對(duì)應(yīng)關(guān)系,將抽象的業(yè)務(wù)流程與可落地的數(shù)據(jù)產(chǎn)品分離,便于抽取關(guān)鍵數(shù)據(jù)產(chǎn)品,將關(guān)鍵業(yè)務(wù)環(huán)節(jié)的監(jiān)視轉(zhuǎn)換為對(duì)輸入輸出數(shù)據(jù)完整性和時(shí)效性的監(jiān)視。
表1 智能網(wǎng)格天氣預(yù)報(bào)業(yè)務(wù)流與數(shù)據(jù)流的對(duì)應(yīng)關(guān)系
監(jiān)控平臺(tái)的總體架構(gòu)如圖1所示,以數(shù)據(jù)流為中心屏蔽智能網(wǎng)格預(yù)報(bào)的業(yè)務(wù)流程。監(jiān)視對(duì)象包括與業(yè)務(wù)相關(guān)的各類硬件設(shè)備、網(wǎng)絡(luò)、系統(tǒng)軟件和應(yīng)用軟件等,適配相應(yīng)的采集技術(shù),獲取監(jiān)視源的狀態(tài)、指標(biāo)、事件等監(jiān)視信息。存儲(chǔ)層匯聚了監(jiān)控平臺(tái)所用到的各類數(shù)據(jù)資源,包括依托以CIMISS為核心的省級(jí)集約化氣象數(shù)據(jù)環(huán)境構(gòu)建智能網(wǎng)格預(yù)報(bào)專題庫,如基礎(chǔ)氣象數(shù)據(jù)、中間產(chǎn)品、預(yù)報(bào)產(chǎn)品和服務(wù)產(chǎn)品等;通過采集工具獲取各類監(jiān)視對(duì)象的指標(biāo)數(shù)據(jù)庫和日志事件庫;平臺(tái)前端及后端設(shè)置面向不同監(jiān)控對(duì)象的閾值、參數(shù)及相關(guān)元數(shù)據(jù)的配置信息庫;為提高訪問速度,設(shè)計(jì)數(shù)據(jù)緩存庫對(duì)熱點(diǎn)信息進(jìn)行存儲(chǔ)。存儲(chǔ)層與數(shù)據(jù)處理和應(yīng)用層進(jìn)行讀寫交互。業(yè)務(wù)邏輯層提供各類計(jì)算模型和管理組件,對(duì)數(shù)據(jù)進(jìn)行加工處理,部分加工產(chǎn)品回寫至存儲(chǔ)層,部分直接提供給應(yīng)用層進(jìn)行調(diào)用。應(yīng)用層即監(jiān)控平臺(tái)的前臺(tái)大屏展示和后臺(tái)運(yùn)維信息管理,通過調(diào)用存儲(chǔ)層的統(tǒng)一數(shù)據(jù)接口獲取相關(guān)數(shù)據(jù)。
圖1 智能網(wǎng)格天氣預(yù)報(bào)監(jiān)控平臺(tái)架構(gòu)
包括綜合信息概覽、基礎(chǔ)平臺(tái)監(jiān)視、數(shù)據(jù)全流程、算法與服務(wù)信息、告警配置管理五個(gè)功能模塊。
(1)綜合信息概覽。作為系統(tǒng)訪問的入口,綜合展示當(dāng)前智能網(wǎng)格預(yù)報(bào)業(yè)務(wù)中用到的各類氣象基礎(chǔ)數(shù)據(jù)、預(yù)報(bào)產(chǎn)品、服務(wù)產(chǎn)品的存儲(chǔ)總量及分布,業(yè)務(wù)整體運(yùn)行狀況,當(dāng)前所處業(yè)務(wù)流程環(huán)節(jié)、任務(wù)狀態(tài),當(dāng)日業(yè)務(wù)值班信息,以及各類導(dǎo)航、通知及個(gè)性化推薦信息。
(2)基礎(chǔ)平臺(tái)監(jiān)視。對(duì)智能網(wǎng)格預(yù)報(bào)業(yè)務(wù)中使用的所有服務(wù)器、存儲(chǔ)等硬件設(shè)備,網(wǎng)絡(luò)連通狀態(tài)及流量信息、數(shù)據(jù)庫和消息中間件等支撐軟件的監(jiān)控。包括查詢單個(gè)設(shè)備節(jié)點(diǎn)狀態(tài),統(tǒng)計(jì)某時(shí)段內(nèi)的流量,以及通過可視化組件對(duì)查詢和統(tǒng)計(jì)結(jié)果進(jìn)行展示。
(3)數(shù)據(jù)全流程。對(duì)智能網(wǎng)格預(yù)報(bào)業(yè)務(wù)中各環(huán)節(jié)輸入和輸出數(shù)據(jù)產(chǎn)品的應(yīng)接收總數(shù)、實(shí)接收數(shù)、接收率、應(yīng)入庫總數(shù)、實(shí)入庫數(shù)、入庫率等以表格方式展示。并可查看接收和入庫詳情,包括每類數(shù)據(jù)產(chǎn)品記錄列表、每條記錄的接收時(shí)間和入庫時(shí)間等。
(4)算法與服務(wù)信息。針對(duì)智能網(wǎng)格預(yù)報(bào)算法庫里各算法的運(yùn)行及調(diào)度狀況進(jìn)行監(jiān)視,包括運(yùn)行節(jié)點(diǎn)、觸發(fā)時(shí)間、執(zhí)行是否成功。對(duì)預(yù)報(bào)數(shù)據(jù)的訪問情況進(jìn)行統(tǒng)計(jì)分析和展示,包括默認(rèn)和任選時(shí)段內(nèi)的數(shù)據(jù)調(diào)用次數(shù)、用戶交互訪問量等。
(5)告警配置管理。面向監(jiān)控平臺(tái)的管理人員,針對(duì)不同的監(jiān)視對(duì)象,配置IP地址、監(jiān)視指標(biāo)、告警閾值、優(yōu)先級(jí)別。定制告警發(fā)布方式,如語音、微信、短信、釘釘,以及相應(yīng)的告警信息發(fā)送對(duì)象和范圍。對(duì)告警信息進(jìn)行統(tǒng)計(jì)生成報(bào)表,對(duì)影響業(yè)務(wù)運(yùn)行的故障進(jìn)行登記留痕等。
智能網(wǎng)格監(jiān)控平臺(tái)的設(shè)計(jì)關(guān)鍵是對(duì)監(jiān)視信息的采集、存儲(chǔ)、處理及展示。對(duì)于每個(gè)監(jiān)視對(duì)象的監(jiān)視指標(biāo),首先需要從時(shí)間維度記錄相應(yīng)的監(jiān)視數(shù)值,對(duì)其進(jìn)行建模:
m_data=getValue(m_class,m_object,index1,index2,…,indexN)& timestamp
其中,m_class表示對(duì)象類別,m_object表示監(jiān)視對(duì)象,index表示具體指標(biāo),對(duì)于不同的監(jiān)視對(duì)象,其監(jiān)視指標(biāo)可以有多個(gè),timestamp表示監(jiān)視時(shí)間戳。getValue函數(shù)表示采用不同采集方式獲取監(jiān)視數(shù)據(jù),將其結(jié)果記錄在m_data中。
表2 智能網(wǎng)格預(yù)報(bào)業(yè)務(wù)中的主要監(jiān)視對(duì)象及指標(biāo)
表2對(duì)業(yè)務(wù)監(jiān)視對(duì)象及其主要指標(biāo)進(jìn)行了匯總。根據(jù)監(jiān)視指標(biāo)類數(shù)據(jù)具有高吞吐量寫入、低延遲讀取、高頻頁面查詢刷新、按時(shí)間粒度匯聚等存取特征,選用Cassandra數(shù)據(jù)庫對(duì)指標(biāo)信息進(jìn)行存儲(chǔ),將每一條記錄轉(zhuǎn)換為鍵值對(duì),數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)如表3所示。
表3 監(jiān)視指標(biāo)類數(shù)據(jù)Cassandra表結(jié)構(gòu)設(shè)計(jì)與示例
對(duì)于每個(gè)Columns都有一個(gè)時(shí)間戳timestamp,即某時(shí)刻點(diǎn)記錄的監(jiān)視值。通過這種方式將指標(biāo)數(shù)據(jù)進(jìn)行持久化,具有很強(qiáng)的靈活性和擴(kuò)展性,對(duì)于不同的監(jiān)視對(duì)象RowKey都可以通過不同時(shí)刻timestamp的指標(biāo)columns記錄其監(jiān)視值value,并且指標(biāo)數(shù)量column是可以進(jìn)行靈活增刪,使得不同監(jiān)視對(duì)象的監(jiān)視指標(biāo)互不影響。
針對(duì)不同的監(jiān)視對(duì)象及特點(diǎn),采用C/S架構(gòu),監(jiān)視客戶端“推”或采集服務(wù)端“拉”兩種方式實(shí)現(xiàn)監(jiān)視信息的主動(dòng)推送或被動(dòng)采集。涉及采集技術(shù)包括以下四種。
(1)標(biāo)準(zhǔn)接口。對(duì)于數(shù)據(jù)庫和消息中間件等規(guī)范化的系統(tǒng)軟件,一般都提供了類似JDBC連接或消息隊(duì)列監(jiān)聽等標(biāo)準(zhǔn)化的服務(wù)接口,采集服務(wù)端直接調(diào)用客戶端提供的接口抽取信息,然后二次加工后即可采集到相應(yīng)指標(biāo)的監(jiān)視信息。
(2)采集代理。針對(duì)基礎(chǔ)硬件平臺(tái)監(jiān)視信息的采集,使用封裝psutil工具的客戶端代理實(shí)現(xiàn)。psutil是基于Python語言開發(fā)的跨平臺(tái)庫,主要應(yīng)用于系統(tǒng)監(jiān)控,分析、限制系統(tǒng)資源及進(jìn)程管理等。通過psutil內(nèi)置的豐富的函數(shù),能夠快速獲取系統(tǒng)運(yùn)行的進(jìn)程和系統(tǒng)利用率(包括CPU、內(nèi)存、磁盤、網(wǎng)絡(luò))等指標(biāo)的信息。
(3)日志解析。針對(duì)應(yīng)用軟件和服務(wù)信息的監(jiān)視信息采集,一般采用日志解析方式。其中,日志類型包括結(jié)構(gòu)化存儲(chǔ)的日志數(shù)據(jù)表、非結(jié)構(gòu)化存儲(chǔ)的標(biāo)準(zhǔn)格式或自定義格式日志文件兩大類。結(jié)構(gòu)化日志數(shù)據(jù)一般可直連源數(shù)據(jù)表,并使用SQL語句進(jìn)行簡(jiǎn)單處理后即可實(shí)現(xiàn)解析,而非結(jié)構(gòu)化日志則采用Logstash技術(shù)進(jìn)行采集與處理。Logstash是一款輕量級(jí)的日志搜集處理框架,可以方便地把分散的、多樣化的日志搜集起來,并進(jìn)行自定義的轉(zhuǎn)換處理,然后傳輸?shù)街付ǖ哪繕?biāo)位置。Logstash包括Inputs(日志收集)、Filters(日志過濾器)、Outputs(日志轉(zhuǎn)存)三個(gè)階段,形成了一個(gè)類似管道的數(shù)據(jù)流,其中Filter是Logstash管道中間處理的核心組件,包含對(duì)多種可插拔的日志解析插件的管理。智能網(wǎng)格預(yù)報(bào)監(jiān)控平臺(tái)主要采用了Filter中的Grok和Date插件對(duì)非結(jié)構(gòu)化日志文件進(jìn)行處理,將文本格式的字符串,配合正則表達(dá)式,轉(zhuǎn)換成為具體的結(jié)構(gòu)化數(shù)據(jù)。以下以EC細(xì)網(wǎng)格模式資料解碼算法為例,對(duì)解碼算法輸出日志進(jìn)行解析時(shí),日志過濾器的配置示例如下:
filter { #日志過濾器聲明的關(guān)鍵字
if [type] == "ec-decode" {
#根據(jù)tpye字段來過濾不同的解析規(guī)則
grok {
patterns_dir => "~/logstash/mypatterns/"
#自定義匹配規(guī)則的存儲(chǔ)路徑
match => {"message" => "%{DECODE_LOG}" }
#對(duì)日志按匹配規(guī)則的指定格式抽取信息
remove_field => ["message"]
#將無用的原始日志記錄移除
}
date {
match =>
["timestamp","dd/MMM/YYYY:HH:mm:ss Z" ]
#匹配日志中的時(shí)間戳
} }}
(4)目錄輪詢。對(duì)于日志信息缺失以及極不規(guī)范的應(yīng)用軟件,可轉(zhuǎn)換為對(duì)其輸出數(shù)據(jù)產(chǎn)品的目錄的間接監(jiān)視。目錄輪詢軟件采用Quartz開源組件實(shí)現(xiàn),Quartz是一個(gè)使用java語言開發(fā)的輕量級(jí)的任務(wù)調(diào)度框架。由于需要監(jiān)視的中間產(chǎn)品和預(yù)報(bào)產(chǎn)品的目錄較多,且不同目錄的監(jiān)視頻次存在差別,因此借助Quartz強(qiáng)大的任務(wù)調(diào)度機(jī)制和靈活便捷的配置規(guī)則,將眾多目錄的監(jiān)視轉(zhuǎn)換為定時(shí)觸發(fā)任務(wù),在特定時(shí)間點(diǎn)對(duì)目標(biāo)目錄下的符合文件名正則表達(dá)式的文件總數(shù)進(jìn)行統(tǒng)計(jì),并將結(jié)果寫入日志事件數(shù)據(jù)庫。
此外,為保證以上采集方式得到的多源監(jiān)視信息的格式和傳輸方式保持一致,采用http RestFul風(fēng)格的統(tǒng)一接口將json格式的監(jiān)視信息以post方式向存儲(chǔ)系統(tǒng)提交請(qǐng)求,從而實(shí)現(xiàn)監(jiān)視信息從采集到存儲(chǔ)的過程。
智能網(wǎng)格預(yù)報(bào)業(yè)務(wù)在時(shí)間和空間方面存在一定的特征規(guī)律,使得某些時(shí)段和空間范圍內(nèi)的監(jiān)視信息出現(xiàn)陡增。例如,原始數(shù)值模式資料一般在每日08及20時(shí)次下發(fā)比較密集,對(duì)應(yīng)的客觀背景場(chǎng)產(chǎn)品須在每日5:30和15:30預(yù)報(bào)訂正前生成;市級(jí)預(yù)報(bào)訂正時(shí)主要調(diào)用本地區(qū)責(zé)任范圍內(nèi)的格點(diǎn)數(shù)據(jù),邊界及交叉區(qū)域的格點(diǎn)數(shù)據(jù)在訂正是做要素協(xié)同,會(huì)發(fā)生更高頻的數(shù)據(jù)調(diào)用。這些關(guān)鍵時(shí)段的業(yè)務(wù)行為使相應(yīng)的監(jiān)視對(duì)象產(chǎn)生更多的監(jiān)視信息。為保證關(guān)鍵業(yè)務(wù)時(shí)段監(jiān)視信息的寫入、查詢和分析性能,采用Kafka高吞吐量數(shù)據(jù)隊(duì)列機(jī)制和Redis分布式緩存實(shí)現(xiàn)對(duì)數(shù)據(jù)的削峰處理和實(shí)時(shí)緩存。
Kafka是一種高吞吐的分布式發(fā)布訂閱消息中間件系統(tǒng),具有高性能、持久化、多副本備份、橫向擴(kuò)展能力等優(yōu)點(diǎn)。為Kafka消息主題topic命名時(shí),包含監(jiān)視對(duì)象、指標(biāo)等關(guān)鍵字。每個(gè)主題中的消息體為采集的監(jiān)視指標(biāo)或日志事件,生產(chǎn)者即監(jiān)視信息采集組件向topic里推送消息,消費(fèi)者從topic中拉取消息進(jìn)行監(jiān)視信息入庫、指標(biāo)計(jì)算、統(tǒng)計(jì)分析等業(yè)務(wù)邏輯處理。當(dāng)處于業(yè)務(wù)繁忙時(shí)段,通過增加topic中的partition數(shù)量來進(jìn)行橫向擴(kuò)容,而單個(gè)parition內(nèi)的消息始終有序,保證了業(yè)務(wù)流程不被擾亂。
消費(fèi)者對(duì)監(jiān)視信息處理的結(jié)果先同步到Redis分布式緩存系統(tǒng)中,再寫入對(duì)應(yīng)的目標(biāo)監(jiān)視數(shù)據(jù)庫中。Redis是基于內(nèi)存、可持久化的日志型、Key-Value數(shù)據(jù)庫系統(tǒng),支持豐富的數(shù)據(jù)類型,并提供多種語言的API。對(duì)單節(jié)點(diǎn)Redis的Key做一致性哈希,且每個(gè)數(shù)據(jù)分片都采用主從復(fù)制結(jié)構(gòu),實(shí)現(xiàn)分布式緩存機(jī)制,不但具有讀寫分離的優(yōu)點(diǎn),而且保證了高可用性。當(dāng)運(yùn)維人員檢索或統(tǒng)計(jì)監(jiān)視信息時(shí),服務(wù)端策略為首先從Redis中獲取已過濾的熱點(diǎn)數(shù)據(jù),如果命中,則直接在前端頁面進(jìn)行展示,如果未命中,則按照Key選擇連接對(duì)應(yīng)的目標(biāo)監(jiān)視數(shù)據(jù)庫進(jìn)行讀取。
在網(wǎng)格預(yù)報(bào)業(yè)務(wù)環(huán)節(jié)生成的日志信息包括運(yùn)行細(xì)節(jié)信息(detail information,DI)和異常事件信息(event information,EI)。海量日志信息源源不斷寫入,同時(shí)前端通過關(guān)鍵字進(jìn)行查詢和分類統(tǒng)計(jì)等操作,將對(duì)磁盤產(chǎn)生大量I/O讀寫壓力。為更好地滿足上述應(yīng)用需求,采用ElasticSearch數(shù)據(jù)庫集群存儲(chǔ)日志事件類的監(jiān)視數(shù)據(jù)。
ElasticSearch簡(jiǎn)稱ES,是一個(gè)分布式可擴(kuò)展的智能化全文搜索引擎和面向文檔型數(shù)據(jù)庫,特別適用于快速儲(chǔ)存、實(shí)時(shí)搜索和分析海量數(shù)據(jù)的應(yīng)用場(chǎng)景。ES允許多臺(tái)服務(wù)器協(xié)同工作,每臺(tái)服務(wù)器運(yùn)行多個(gè)ES實(shí)例。單個(gè)ES實(shí)例稱為一個(gè)節(jié)點(diǎn),一組節(jié)點(diǎn)構(gòu)成一個(gè)集群,ES去中心化的集群設(shè)計(jì)方式,將多個(gè)分片均衡地分布在集群的所有可用節(jié)點(diǎn)上,不會(huì)因某個(gè)節(jié)點(diǎn)的故障而導(dǎo)致集群崩潰。在存儲(chǔ)數(shù)據(jù)時(shí),ES通過索引所有字段提高查詢速度。索引相當(dāng)于數(shù)據(jù)庫,數(shù)據(jù)表即索引類型,單條記錄稱為文檔,常用JSON作為文檔序列化的格式。使用ES提供的PUT方法建立產(chǎn)品加工DI索引如下所示:
PUT Monitor_log/ #創(chuàng)建DI索引
{ #該索引的分片數(shù)為3,副本數(shù)為2
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2 },
“mappings”:{
“_DI”:{
#定義DI索引的內(nèi)部結(jié)構(gòu)
“properties”:{
#定義DI的基本屬性,包括編碼和名稱
“di_codes”:
{“tpye”:“string”}, “di_name”:
{“tpye”:“string” },
#定義DI的具體字段
“fields”:{
“receiver”:“string”,
“sender”:“string”,
“data_type”:“string”,
“source_counts”:“integer”,
“product_counts”: “integer”,
“process_state”:“boolean”,
“record_time”:“date”
}
} } } }
其中,DI的具體字段包括接收系統(tǒng)、發(fā)送系統(tǒng)、數(shù)據(jù)編碼、源數(shù)據(jù)記錄數(shù)、產(chǎn)品記錄數(shù)、加工狀態(tài)、運(yùn)行時(shí)間等。針對(duì)建好的DI索引,插入一條文檔的方法示例如下:
PUTMonitor_log/_DI/1
{
“di_codes”:“FORCAST.DCOEF.DI”,
“di_name”:“交叉取優(yōu)算法處理詳細(xì)信息”,
“fields”{
“receiver”:“降尺度系統(tǒng)”,
“sender”:“背景場(chǎng)系統(tǒng)”,
“data_type”:“F.8299.0001.S001”,
“source_counts”:“384”,
“product_counts”: “16”,
“process_state”:“true”,
“record_time”:“2020-10-28 02:35:12”}
}
EI文檔設(shè)計(jì)與DI類似,區(qū)別在fields中增加了告警級(jí)別和響應(yīng)狀態(tài),不再贅述。
數(shù)據(jù)可視化的主要目的是通過統(tǒng)計(jì)圖形、信息圖形和圖表等方式清晰有效地傳達(dá)信息。在智能網(wǎng)格預(yù)報(bào)監(jiān)控平臺(tái)中的數(shù)據(jù)可視化包括對(duì)氣象業(yè)務(wù)數(shù)據(jù)、監(jiān)視指標(biāo)、日志事件的可視化。其中,氣象業(yè)務(wù)數(shù)據(jù)具有多類型、高維度、弱模式等特點(diǎn),可在后臺(tái)定時(shí)繪圖,前端直接加載輪詢圖像產(chǎn)品即可。而監(jiān)視指標(biāo)、日志事件等需從時(shí)間、空間等維度進(jìn)行統(tǒng)計(jì)整合,并將分析結(jié)果以表格及繪圖呈現(xiàn)。該文采用Matplotlib和D3.js進(jìn)行數(shù)據(jù)可視化的實(shí)現(xiàn)。
Matplotlib是采用Python語言開發(fā)的2D繪圖庫,便于將數(shù)據(jù)進(jìn)行圖形化,且提供多樣化的格式輸出。Matplotlib提供一套與Matlab語法相近的API,既可用于跨平臺(tái)的交互式繪圖,也可作為服務(wù)端繪圖組件,設(shè)置固定參數(shù)后,定時(shí)從業(yè)務(wù)數(shù)據(jù)庫中讀出數(shù)據(jù)并生成相應(yīng)的圖形產(chǎn)品。D3.js全稱是Data-Driven Documents(數(shù)據(jù)驅(qū)動(dòng)文檔),是基于數(shù)據(jù)來操作文檔的JavaScript庫,用于在瀏覽器前端中創(chuàng)建交互式可視化。D3.js采用聲明性編程,支持大型數(shù)據(jù)集,為線性、分層、網(wǎng)絡(luò)和地理數(shù)據(jù)布置視覺元素,并將數(shù)據(jù)關(guān)聯(lián)到html頁面中的元素或元素組。采用Matplotlib結(jié)合D3.js的解決方案,滿足對(duì)二維氣象數(shù)據(jù)及監(jiān)視指標(biāo)數(shù)據(jù)常見的時(shí)序圖、折線圖、直方圖、餅圖、散點(diǎn)圖、儀表盤、流線圖、熱力圖等,在前端直接繪制和渲染。針對(duì)三維標(biāo)量場(chǎng)氣象數(shù)據(jù)繪制等值線/面、色斑圖、落區(qū)圖、切片圖等,采用Matplotlib庫提供的插值算法進(jìn)行網(wǎng)格化,并與Basemap相結(jié)合,實(shí)現(xiàn)氣象GIS圖像的繪制,也可疊加至Web GIS地圖上展示。針對(duì)氣象多維數(shù)據(jù),采用幾何投影、圖標(biāo)、像素等多種方法,對(duì)其進(jìn)行映射、投影和變換,實(shí)現(xiàn)對(duì)雷達(dá)、模式資料的降維展示。
智能網(wǎng)格天氣預(yù)報(bào)監(jiān)控平臺(tái)已在陜西省氣象部門進(jìn)行了技術(shù)實(shí)現(xiàn)及推廣應(yīng)用。該平臺(tái)不僅對(duì)智能網(wǎng)格預(yù)報(bào)數(shù)據(jù)環(huán)境中涉及到的地面、高空、雷達(dá)、模式等十余類基礎(chǔ)氣象數(shù)據(jù),以及網(wǎng)格預(yù)報(bào)業(yè)務(wù)中生成的3X3公里客觀背景場(chǎng)、網(wǎng)格實(shí)況產(chǎn)品、網(wǎng)格訂正預(yù)報(bào)、站點(diǎn)預(yù)報(bào)、線路預(yù)報(bào)、公共服務(wù)產(chǎn)品的接收、制作和存儲(chǔ)狀況進(jìn)行監(jiān)視,而且對(duì)業(yè)務(wù)中用到氣象私有云中的30余臺(tái)虛擬服務(wù)器資源的實(shí)時(shí)運(yùn)行狀態(tài)、網(wǎng)絡(luò)拓?fù)浼傲髁?、?yīng)用軟件運(yùn)行、數(shù)據(jù)調(diào)用和服務(wù)信息實(shí)現(xiàn)了一體化監(jiān)控。
平臺(tái)上線后,業(yè)務(wù)人員對(duì)智能網(wǎng)格預(yù)報(bào)業(yè)務(wù)的整體運(yùn)行狀況有了更為全面的把控。當(dāng)異常發(fā)生后,平臺(tái)能通過多種渠道快速地向值班人員發(fā)出告警,大大提高了下一步運(yùn)行控制和故障處理的提前量,緩解了值班壓力,有效保障了核心預(yù)報(bào)業(yè)務(wù)的質(zhì)量,有助于提供及時(shí)、高效的氣象服務(wù)。目前,該平臺(tái)在陜西省氣象部門運(yùn)行穩(wěn)定,已成為全省智能網(wǎng)格預(yù)報(bào)業(yè)務(wù)開展的關(guān)鍵支撐系統(tǒng)。