付 琦,張 帆,張仁鵬
(吉林省地震局,吉林 長(zhǎng)春 130117)
國(guó)家地震烈度速報(bào)與預(yù)警工程吉林子項(xiàng)目將測(cè)震臺(tái)網(wǎng)和強(qiáng)震臺(tái)網(wǎng)有機(jī)融合,結(jié)合測(cè)震學(xué)和工程學(xué)的特點(diǎn)及優(yōu)勢(shì),將多重算法計(jì)算的參數(shù)結(jié)果融合之后實(shí)現(xiàn)秒級(jí)地震預(yù)警、分鐘級(jí)地震烈度速報(bào)。項(xiàng)目建成后可彌補(bǔ)現(xiàn)有臺(tái)網(wǎng)能力的不足,有效提高減災(zāi)能力和社會(huì)服務(wù)能力。
該項(xiàng)目建設(shè)主體由一個(gè)省級(jí)預(yù)警中心和30個(gè)基本站(強(qiáng)震臺(tái))、30 個(gè)基準(zhǔn)站(強(qiáng)震和測(cè)震)、30 個(gè)一般站(簡(jiǎn)易烈度計(jì))構(gòu)成,而整個(gè)工程項(xiàng)目的核心就是核心業(yè)務(wù)處理系統(tǒng)。該系統(tǒng)主要以深研院開(kāi)發(fā)的JOPENS 平臺(tái)為基礎(chǔ)進(jìn)行搭建,采用Java 語(yǔ)言進(jìn)行編寫(xiě),分成數(shù)據(jù)采集,數(shù)據(jù)流分布式匯集,數(shù)據(jù)處理分析和顯示、發(fā)布、報(bào)警等四個(gè)模塊;觀(guān)測(cè)系統(tǒng)采用加速度計(jì)、測(cè)震計(jì)以及簡(jiǎn)易烈度儀三種觀(guān)測(cè)手段相結(jié)合的方式部署,通信系統(tǒng)采用中國(guó)電信的2M MSTP數(shù)據(jù)專(zhuān)線(xiàn)。
目前吉林子項(xiàng)目雖已實(shí)現(xiàn)臺(tái)站數(shù)據(jù)的匯聚與上傳,軟硬件平臺(tái)也都能穩(wěn)定運(yùn)行,但在實(shí)際運(yùn)維中,也暴露出一些問(wèn)題,如缺少對(duì)硬件系統(tǒng)的監(jiān)控、豐富的告警媒介以及可視化監(jiān)控等。針對(duì)上述問(wèn)題,基于Zabbix 開(kāi)源平臺(tái)開(kāi)發(fā)了一套功能強(qiáng)大、穩(wěn)定高效的可視化監(jiān)控平臺(tái)。
Zabbix 是一款用于監(jiān)控IT 設(shè)備及服務(wù)可用性和性能情況的開(kāi)源分布式監(jiān)控系統(tǒng),具有各種功能完備的系統(tǒng)模塊,可部署在Linux、Unix、BSD 及Windows 等多種操作系統(tǒng)平臺(tái),擁有高性能的實(shí)時(shí)監(jiān)控能力,并具有可視化,提供圖形、聚合圖形及拓?fù)涞榷喾N動(dòng)態(tài)展示功能。
Zabbix 與Nagios、Cacti 及Prometheus 等同類(lèi)型軟件相比有如下優(yōu)勢(shì):
(1)提供更加強(qiáng)大、友好的UI 界面。Zabbix對(duì)監(jiān)控主機(jī)的所有操作幾乎都可以通過(guò)瀏覽器在用戶(hù)的Web 界面來(lái)完成,極少數(shù)的自定義監(jiān)控需要通過(guò)后臺(tái)的配置文件來(lái)實(shí)現(xiàn)。
(2)可實(shí)現(xiàn)全棧的監(jiān)控。Zabbix 可以監(jiān)控物理層面的主機(jī)、CPU、內(nèi)存即硬盤(pán)I/O 等,可以監(jiān)控服務(wù)層諸如Nginx、RediMySQL 即Tomcat等服務(wù),還可以監(jiān)控應(yīng)用層面的例如SNMP、IPMI、JMX等應(yīng)用協(xié)議。
(3)具有多重的可視化監(jiān)控展示。Zabbix自帶強(qiáng)大的可視化模塊,用戶(hù)可根據(jù)監(jiān)控項(xiàng)自行創(chuàng)建定制化的圖形監(jiān)控、聚合圖形和拓?fù)鋱D,極大地方便了運(yùn)維工作。
(4)具有豐富的自定義監(jiān)控設(shè)置。Zabbix可通過(guò)自定義監(jiān)控項(xiàng)定制模板中不存在的或者滿(mǎn)足不了我們要求的監(jiān)控項(xiàng),并進(jìn)行監(jiān)控。
Zabbix 屬于低并發(fā)服務(wù)平臺(tái),穩(wěn)定性高、配置簡(jiǎn)單。
1.2.1 Zabbix-Agent方式
安裝在主機(jī)上的Zabbix-Agent 將收集的數(shù)據(jù)發(fā)送至Zabbix-Server 端存儲(chǔ)到MySQL 數(shù)據(jù)庫(kù)中,Zabbix-Web 端將其取出并在前端頁(yè)面展現(xiàn)、繪圖和告警。
1.2.2 SNMP方式
Zabbix-Server端通過(guò)被監(jiān)控設(shè)備上的SNMP信息來(lái)識(shí)別并監(jiān)控網(wǎng)絡(luò)設(shè)備的狀態(tài)信息。
吉林省預(yù)警中心采用基于JOPENS 6.1.10的地震烈度速報(bào)與預(yù)警系統(tǒng),臺(tái)網(wǎng)設(shè)備分為基本站、基準(zhǔn)站和一般站?;菊竞突鶞?zhǔn)站通過(guò)2M 數(shù)據(jù)專(zhuān)線(xiàn)連接省局,一般站則由鐵塔集團(tuán)的FSU 以4G 方式將數(shù)據(jù)回傳至上海鐵塔云中心,該中心再通過(guò)專(zhuān)線(xiàn)將數(shù)據(jù)傳給吉林局。
核心業(yè)務(wù)處理系統(tǒng)采用深研院以Java 語(yǔ)言開(kāi)發(fā)、基于JOPENS6.1.10 的系統(tǒng)框架,包括數(shù)據(jù)流分布式匯集模塊和數(shù)據(jù)處理分析模塊。前一模塊負(fù)責(zé)站點(diǎn)匯集存儲(chǔ)和分發(fā),后一模塊負(fù)責(zé)地震波形數(shù)據(jù)的計(jì)算、處理及結(jié)果的融合。核心業(yè)務(wù)處理系統(tǒng)應(yīng)用JEE7新技術(shù)和規(guī)范,最新版的系統(tǒng)以Wildfly 取代原有的JBOSS 作為中間件,使整個(gè)系統(tǒng)容易部署和維護(hù)。系統(tǒng)數(shù)據(jù)庫(kù)為關(guān)系型數(shù)據(jù)庫(kù)MySQL57。按照軟件模塊部署位置分為如下幾個(gè)部分。
2.2.1 流服務(wù)器
包括儀器適配器JOPENS-Box 服務(wù)、數(shù)據(jù)庫(kù)服務(wù)Mysqld、應(yīng)用程序中間件服務(wù)Wildfly 以及流服務(wù)SSS。
2.2.2 核心數(shù)據(jù)處理服務(wù)器
包括應(yīng)用程序服務(wù)Wildfly、波形存儲(chǔ)服務(wù)AWS、地震參數(shù)速報(bào)RTS、地震預(yù)警JEEW、預(yù)警信息融合Merge、地震烈度速報(bào)服務(wù)JOPENS-gm、地震烈度速報(bào)計(jì)算ShakeMap、MQTT 消息中間件Mosquitto 以及數(shù)據(jù)庫(kù)服務(wù)Mysqld。
2.2.3 核心數(shù)據(jù)處理客戶(hù)端
包括綜合地震波形分析軟件MSDP 和地震預(yù)警JEEW-GUI。
圖1 軟件模塊部署示意圖Fig.1 Software module deployment diagram
以基本站觀(guān)測(cè)系統(tǒng)為例,基本站配備深研院開(kāi)發(fā)的JS-A2 強(qiáng)震計(jì),數(shù)采采用港震公司開(kāi)發(fā)的EDAS-24GN,傳輸設(shè)備為華三公司的H3C IE4300-12P-PWR,數(shù)據(jù)鏈路為中國(guó)電信的2M MSTP數(shù)據(jù)專(zhuān)線(xiàn)。
吉林省地震烈度速報(bào)與預(yù)警系統(tǒng)智能監(jiān)控平臺(tái)的結(jié)構(gòu)分為預(yù)警核心業(yè)務(wù)處理系統(tǒng)監(jiān)控、預(yù)警中心網(wǎng)絡(luò)系統(tǒng)監(jiān)控與觀(guān)測(cè)系統(tǒng)監(jiān)控三大部分。
3.1.1 核心業(yè)務(wù)處理系統(tǒng)監(jiān)控
核心業(yè)務(wù)處理系統(tǒng)監(jiān)控分為系統(tǒng)狀態(tài)部分與應(yīng)用服務(wù)監(jiān)控部分。系統(tǒng)狀態(tài)部分含服務(wù)器CPU、內(nèi)存、系統(tǒng)負(fù)載及網(wǎng)卡流量監(jiān)控等;應(yīng)用服務(wù)監(jiān)控部分含中間件Wildfly 服務(wù)(Standalone)、數(shù)據(jù)庫(kù)服務(wù)(Mysqld)、數(shù)據(jù)流服務(wù)進(jìn)(SSS)、消息服務(wù)(Mosquitto)、烈度速報(bào)計(jì)算(ShakeMap)、烈度速報(bào)服務(wù)(JOPENS-gm)、波形存儲(chǔ)(AWS)及時(shí)間服務(wù)(NTPD)等。
3.1.2 預(yù)警中心網(wǎng)絡(luò)系統(tǒng)監(jiān)控
預(yù)警中心網(wǎng)絡(luò)系統(tǒng)監(jiān)控主要指網(wǎng)絡(luò)通信設(shè)備監(jiān)控和網(wǎng)絡(luò)安全設(shè)備監(jiān)控。被監(jiān)控網(wǎng)絡(luò)設(shè)備需要配置統(tǒng)一的SNMP 信息,監(jiān)控平臺(tái)服務(wù)器端通過(guò)SNMP信息抓取被監(jiān)控設(shè)備的各種信息。
3.1.3 觀(guān)測(cè)系統(tǒng)的監(jiān)控
觀(guān)測(cè)系統(tǒng)監(jiān)控包括數(shù)采監(jiān)控、接入網(wǎng)絡(luò)設(shè)備監(jiān)控以及動(dòng)環(huán)設(shè)備監(jiān)控。
Zabbix 系統(tǒng)自帶多種設(shè)備及監(jiān)控項(xiàng)的模板,能夠滿(mǎn)足大多數(shù)用戶(hù)的需求,例如CPU 負(fù)載、網(wǎng)卡流量、磁盤(pán)使用率等。用戶(hù)可以根據(jù)實(shí)際需求去選擇相應(yīng)模板,并對(duì)模板中的監(jiān)控項(xiàng)根據(jù)運(yùn)維中對(duì)各系統(tǒng)監(jiān)控記錄的分析、總結(jié)經(jīng)驗(yàn)、設(shè)定合理的告警閾值,以便在系統(tǒng)出現(xiàn)故障時(shí)能第一時(shí)間觸發(fā)告警通知運(yùn)維人員或者自動(dòng)化處理。
表1 為地震烈度速報(bào)與預(yù)警系統(tǒng)的主要監(jiān)控項(xiàng)以及監(jiān)控項(xiàng)閾值,例如CPU 負(fù)載這一項(xiàng),告警閾值>5,即當(dāng)CPU 負(fù)載達(dá)到50%以上將觸發(fā)監(jiān)控告警。又例如核心存儲(chǔ)進(jìn)程AWS 這一項(xiàng),告警閾值為0,即當(dāng)系統(tǒng)對(duì)AWS 進(jìn)程進(jìn)行PS 命令操作返回值為0 時(shí),將視該進(jìn)程已經(jīng)死亡,進(jìn)而觸發(fā)進(jìn)程監(jiān)控告警。
表1 地震烈度速報(bào)與預(yù)警系統(tǒng)監(jiān)控項(xiàng)閾值設(shè)計(jì)
當(dāng)模板中的監(jiān)控項(xiàng)無(wú)法滿(mǎn)足用戶(hù)需求時(shí),就需要自定義監(jiān)控項(xiàng)。對(duì)于烈度速報(bào)與預(yù)警系統(tǒng)這種高度定制的系統(tǒng)來(lái)說(shuō),大部分的應(yīng)用服務(wù)在模板中是不存在的,需要開(kāi)發(fā)人員自行編譯。
通常自定義監(jiān)控項(xiàng)有兩種方式,一個(gè)是編寫(xiě)Shell 腳本放在被監(jiān)控主機(jī)的Zabbix_Agent 根目錄下,然后由其調(diào)用對(duì)主機(jī)監(jiān)控;另一方法是直接將監(jiān)控命令寫(xiě)在被監(jiān)控主機(jī)配置文件中直接對(duì)主機(jī)進(jìn)行監(jiān)控。
以核心業(yè)務(wù)處理系統(tǒng)中流服務(wù)模塊為例,對(duì)其Wildfly 中間件生存狀態(tài)、Mysqld 服務(wù)生存狀態(tài)、流服務(wù)CPU 利用率及生存狀態(tài)進(jìn)行監(jiān)控。其監(jiān)控命令及配置步驟如下。
3.3.1 自定義監(jiān)控項(xiàng)的設(shè)計(jì)
找到被監(jiān)控主機(jī)的Zabbix_Agentd 配置文件,編輯自定義監(jiān)控項(xiàng)UserParameter,語(yǔ)法是UserParameter=<key>,<command>,Key 是監(jiān)控項(xiàng)鍵值,command 是可執(zhí)行監(jiān)控命令或執(zhí)行腳本信息(表2)。
表2 核心數(shù)據(jù)處理系統(tǒng)自定義監(jiān)控項(xiàng)釋義
3.3.2 在監(jiān)控系統(tǒng)服務(wù)端添加監(jiān)控項(xiàng)
在Zabbix-Web 端配置自定義監(jiān)控項(xiàng)的相關(guān)信息,把Zabbix_Agentd.conf文件中UserParameter的鍵值添加進(jìn)去。
3.3.3 添加監(jiān)控圖形
根據(jù)自定義監(jiān)控項(xiàng)的鍵值繪制圖形,通過(guò)圖形化監(jiān)控直觀(guān)了解被監(jiān)控項(xiàng)的狀態(tài)。
3.3.4 自定義觸發(fā)器
根據(jù)設(shè)計(jì)好的監(jiān)控項(xiàng)閾值配置相應(yīng)的觸發(fā)器,當(dāng)監(jiān)控項(xiàng)的Key 值達(dá)到監(jiān)控閾值時(shí),觸發(fā)自動(dòng)化處理動(dòng)作或企業(yè)微信告警。
企業(yè)微信告警是監(jiān)控系統(tǒng)的重要組成部分,它負(fù)責(zé)將所有的告警信息以微信的方式推送給運(yùn)維人員,為運(yùn)維人員處置故障提供決策依據(jù)。筆者在Zabbix-Server 端編寫(xiě)企業(yè)微信告警推送的Python 腳本,當(dāng)被監(jiān)控主機(jī)出現(xiàn)故障時(shí),觸發(fā)器觸發(fā)企業(yè)微信告警并調(diào)用告警Python 腳本發(fā)送信息給運(yùn)維人員。
觸發(fā)告警就是參數(shù)傳遞的過(guò)程,在定義微信告警內(nèi)容時(shí),主要有三個(gè)基本信息需要傳遞給微信告警腳本:即{ALERT.SENDTO}發(fā)給誰(shuí)、{ALERT.SUBJECT}發(fā)送的主題、{ALERT.MESSAGE}發(fā)送的內(nèi)容(表3)。
表3 企業(yè)微信告警腳本代碼釋義
其次,就是獲得企業(yè)微信的Corpid、Ap-pSecret 和AgentID,這些在注冊(cè)企業(yè)微信時(shí)可以獲取到。核心語(yǔ)句及釋義如表2所示。
企業(yè)微信告警的內(nèi)容包括被監(jiān)控主機(jī)故障發(fā)現(xiàn)、故障恢復(fù)以及故障更新。
監(jiān)控系統(tǒng)還提供了聚合圖形監(jiān)控,就是將若干個(gè)相關(guān)監(jiān)控項(xiàng)的圖形組合在一起,方便運(yùn)維人員掌握多組數(shù)據(jù)及應(yīng)用服務(wù)狀態(tài)。圖3 為JOPENS系統(tǒng)的聚合圖形監(jiān)控。
圖2 JOPENS系統(tǒng)聚合圖形Fig.2 System aggregation graph
吉林省地震烈度速報(bào)與預(yù)警系統(tǒng)可視化監(jiān)控平臺(tái)經(jīng)過(guò)一段時(shí)間的試運(yùn)行測(cè)試,可實(shí)現(xiàn)對(duì)預(yù)警臺(tái)站及預(yù)警中心的網(wǎng)絡(luò)設(shè)備、所有物理和虛擬服務(wù)器及預(yù)警核心業(yè)務(wù)應(yīng)用服務(wù)的可視化監(jiān)控,并實(shí)現(xiàn)告警信息的自動(dòng)發(fā)送。該系統(tǒng)可實(shí)現(xiàn)對(duì)吉林省地震烈度速報(bào)與預(yù)警系統(tǒng)軟硬件平臺(tái)運(yùn)行狀態(tài)的實(shí)時(shí)監(jiān)控,及時(shí)發(fā)現(xiàn)系統(tǒng)出現(xiàn)的問(wèn)題并進(jìn)行智能化處理,從而有效節(jié)省臺(tái)網(wǎng)運(yùn)維成本、提高運(yùn)維效率,保障預(yù)警系統(tǒng)連續(xù)可靠運(yùn)行。