羅青
摘要:為了能夠有效的監(jiān)控和預(yù)警生產(chǎn)環(huán)境中數(shù)據(jù)庫(kù)的運(yùn)行狀態(tài),及時(shí)的解決因?yàn)閿?shù)據(jù)庫(kù)無(wú)法響應(yīng)或者數(shù)據(jù)庫(kù)硬件損壞導(dǎo)致的損失,基于數(shù)據(jù)庫(kù)的實(shí)時(shí)預(yù)警系統(tǒng)尤為重要。傳統(tǒng)的監(jiān)控和預(yù)警平臺(tái)通常采用的是自動(dòng)化腳本+郵件和短信提醒的方式,雖然解決了預(yù)警的及時(shí)性問題,但是并不能支持可配置性和實(shí)時(shí)查詢。因此有必要搭建一套實(shí)時(shí)的數(shù)據(jù)庫(kù)監(jiān)控和預(yù)警系統(tǒng)來(lái)保證線上數(shù)據(jù)庫(kù)的正常運(yùn)行。該文采用了最近逐漸開始流行的Slack作為消息推送平臺(tái),通過研究Slack實(shí)時(shí)消息API,并且與Jira,LDAP等企業(yè)管理工具的集成,實(shí)現(xiàn)了一套部署在生產(chǎn)環(huán)境數(shù)據(jù)庫(kù)之上的基于Slack Bot的實(shí)時(shí)監(jiān)控和預(yù)警系統(tǒng)。最后通過比較評(píng)估了實(shí)際效果。
關(guān)鍵詞:預(yù)警; Slack; 實(shí)時(shí)監(jiān)控; bot; 數(shù)據(jù)庫(kù)
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)01-0003-03
1 引言
數(shù)據(jù)庫(kù)是按照數(shù)據(jù)結(jié)構(gòu)來(lái)組織,存儲(chǔ)和管理數(shù)據(jù)的倉(cāng)庫(kù)。起源于上世紀(jì)60年代,隨著計(jì)算機(jī)科學(xué)技術(shù)的發(fā)展,越來(lái)越多的數(shù)據(jù)由紙質(zhì)的文檔存儲(chǔ)方式轉(zhuǎn)為數(shù)據(jù)庫(kù)存儲(chǔ)。在環(huán)保節(jié)能的同時(shí),也方便了數(shù)據(jù)的維護(hù)和檢索[1]。數(shù)據(jù)庫(kù)本身的發(fā)展也隨著應(yīng)用需求的增加而迅速的發(fā)展。從Oracle,DB2,Access再到服務(wù)于大數(shù)據(jù)平臺(tái)的Aster,MongoDB,Hbase。數(shù)據(jù)庫(kù)也逐漸從單一節(jié)點(diǎn)發(fā)展成為多個(gè)節(jié)點(diǎn)集群的分布式環(huán)境。與此同時(shí),隨著數(shù)據(jù)庫(kù)的飛速發(fā)展,在存儲(chǔ)容量和存儲(chǔ)效率大大提高的同時(shí),數(shù)據(jù)庫(kù)的穩(wěn)定性和可用性是擺在企業(yè)面前的一大難題。雖然現(xiàn)在所有的數(shù)據(jù)庫(kù)都有相當(dāng)成熟的容災(zāi)機(jī)制,并且通過多備份,Master-Slave的機(jī)制來(lái)使得數(shù)據(jù)庫(kù)在部分節(jié)點(diǎn)發(fā)生故障的同時(shí)能夠正常的使用。即使如此,數(shù)據(jù)庫(kù)在發(fā)生意外之后,仍然會(huì)導(dǎo)致部分?jǐn)?shù)據(jù)丟失,或者應(yīng)用相應(yīng)緩慢的問題,造成使用數(shù)據(jù)庫(kù)的應(yīng)用服務(wù)器任務(wù)擠壓,最終導(dǎo)致業(yè)務(wù)數(shù)據(jù)的丟失或者應(yīng)用服務(wù)器的無(wú)法響應(yīng)。所以如果能夠在問題發(fā)生之前就能夠預(yù)測(cè)到問題發(fā)生的可能性,防患于未然,并且及時(shí)的通知到正確的責(zé)任人,給責(zé)任人提供一個(gè)方便的交流問題的環(huán)境就尤為重要。
2 基于Slack Bot的數(shù)據(jù)庫(kù)實(shí)時(shí)監(jiān)控和預(yù)警平臺(tái)
在介紹了數(shù)據(jù)庫(kù)預(yù)警和監(jiān)控系統(tǒng)的背景之后,本節(jié)將介紹數(shù)據(jù)庫(kù)預(yù)警系統(tǒng)的目標(biāo)和所要解決的問題,并基于研究目標(biāo),確定與研究可行的方案。
2.1 研究目標(biāo)
對(duì)一個(gè)實(shí)時(shí)數(shù)據(jù)庫(kù)系統(tǒng)而言,進(jìn)行系統(tǒng)運(yùn)行狀態(tài)的監(jiān)視是非常必要的,建立一套數(shù)據(jù)庫(kù)實(shí)時(shí)自動(dòng)的監(jiān)控系統(tǒng),不但能減輕值班員的工作壓力,提高管理水平,同時(shí)也增強(qiáng)了系統(tǒng)的穩(wěn)定性[2]。傳統(tǒng)的數(shù)據(jù)庫(kù)預(yù)警和監(jiān)控系統(tǒng),通常采用定時(shí)腳本來(lái)獲取數(shù)據(jù)庫(kù)系統(tǒng)當(dāng)前狀態(tài),或者通過大數(shù)據(jù)平臺(tái)的提供的預(yù)警接口來(lái)實(shí)現(xiàn),并且與企業(yè)內(nèi)的郵箱服務(wù)器和外部的短信服務(wù)器實(shí)施預(yù)警數(shù)據(jù)的推送[3]。采用郵件作為推送介質(zhì)可以發(fā)揮郵件本身的諸多優(yōu)點(diǎn),可以將所有的責(zé)任人抄送在一起,通過郵件的方式來(lái)討論問題的原因和解決方案。但是郵件的回復(fù)不同于傳統(tǒng)的社交軟件,通常會(huì)產(chǎn)生郵件回復(fù)順序錯(cuò)亂以及交流不方便的問題,并且企業(yè)中員工每天都會(huì)受到上百封郵件,往往不在工作時(shí)間員工可能會(huì)忽略郵件,導(dǎo)致無(wú)法及時(shí)的通知到位的缺點(diǎn)。采用短信服務(wù)器的優(yōu)點(diǎn)在于可以再?zèng)]有網(wǎng)絡(luò)的前提下接受到預(yù)警信息,彌補(bǔ)了郵件方式不能及時(shí)響應(yīng)的問題。但是卻喪失了交流平臺(tái)的能力。所以說(shuō)傳統(tǒng)的數(shù)據(jù)庫(kù)預(yù)警和監(jiān)控系統(tǒng)并不具備交互能力和實(shí)時(shí)查詢的能力,也不具備方便的交流平臺(tái)。需要一個(gè)新的解決方案來(lái)實(shí)現(xiàn)一個(gè)既方便好用,又及時(shí)可靠的數(shù)據(jù)庫(kù)預(yù)警和監(jiān)控平臺(tái)。所以新的預(yù)警平臺(tái)需要符合以下幾個(gè)目標(biāo)。
(1)實(shí)現(xiàn)能夠及時(shí)可靠的預(yù)警發(fā)送平臺(tái)
預(yù)警的準(zhǔn)確快速的發(fā)送是預(yù)警平臺(tái)的首要任務(wù),所以正確及時(shí)地將預(yù)警發(fā)送到需要接收的責(zé)任人當(dāng)仁不讓的成為新平臺(tái)搭建的首要目標(biāo)。
(2)提供責(zé)任人互相討論的平臺(tái)空間
提供手機(jī)/電腦端社交平臺(tái),對(duì)于每一個(gè)預(yù)警創(chuàng)建一個(gè)聊天房間,并且允許責(zé)任人添加更多的相關(guān)人員進(jìn)入房間,在聊天平臺(tái)中發(fā)表各自的意見和經(jīng)驗(yàn),并且將聊天記錄保存,方便日后的查找。
(3)能夠和企業(yè)內(nèi)部的故障管理平臺(tái)對(duì)接,實(shí)時(shí)記錄問題狀態(tài)
通常企業(yè)內(nèi)部有著自己的故障管理平臺(tái),將故障管理平臺(tái)和預(yù)警平臺(tái)對(duì)接,實(shí)現(xiàn)預(yù)警推送的時(shí)候生成新的故障單,并且與之關(guān)聯(lián)。并且可以再預(yù)警平臺(tái)的聊天窗口中實(shí)現(xiàn)故障單的更新和關(guān)閉。此外,在預(yù)警發(fā)生的同時(shí),將過去與之相似的故障單找出發(fā)送給相關(guān)責(zé)任人,使得責(zé)任人能夠更快的定位問題和解決問題。
(4)提供可配置的預(yù)警服務(wù)能力
在制作預(yù)警平臺(tái)的時(shí)候,如果解決過度預(yù)警的問題,也十分重要。就像狼來(lái)的故事一樣,當(dāng)一些簡(jiǎn)單預(yù)警過度頻繁的推送,會(huì)導(dǎo)致真正需要關(guān)心的預(yù)警不能被及時(shí)解決,并且話費(fèi)了大量的人力物力去修復(fù)那些并不是很重要的預(yù)警。所以如何將真正的預(yù)警發(fā)送到真正關(guān)心的人手中就十分的重要。新的預(yù)警系統(tǒng)需要提供簡(jiǎn)單的配置能力,供使用者過濾預(yù)警和設(shè)置自己專屬的預(yù)警。
2.2 Slack平臺(tái)
Slack平臺(tái)能夠提供群組聊天,大規(guī)模工具集成,文件整合和統(tǒng)一搜索的能力。并且已經(jīng)能夠整合電子郵件、短信、Google、Jira、Twitter等工具,可以把各種碎片化的企業(yè)工具溝通和協(xié)作集中在一起。Slack平臺(tái)成立于2013年,在成立之后迅速的發(fā)展,每天的在線用戶突破了60萬(wàn)。成為諸多企業(yè)首選的企業(yè)內(nèi)部社交軟件。Slack平臺(tái)提供了一系列的集成接口,比如Slack實(shí)時(shí)消息接口,可以使用戶自己搭建機(jī)器人程序,實(shí)現(xiàn)實(shí)時(shí)的消息的監(jiān)聽和消息的推送。并且Slack支持富文本的推送,可以在聊天中通過命令行的輸入創(chuàng)建按鈕,表單等結(jié)構(gòu),方便在聊天窗口中實(shí)現(xiàn)小應(yīng)用的使用。
以上這些Slack平臺(tái)的優(yōu)點(diǎn)是我們選擇其成為預(yù)警平臺(tái)的原因。方便地和企業(yè)內(nèi)部程序的集成,使得員工不需要在多個(gè)系統(tǒng)中完成冗余繁瑣的操作,實(shí)時(shí)的消息推送和接收接口,可以滿足預(yù)警信息的推送和預(yù)警可配置,Slack本身作為一個(gè)社交平臺(tái),提供了交流的平臺(tái),使得責(zé)任人可以在聊天窗口中發(fā)送相關(guān)圖片,文檔,談?wù)摻鉀Q方案。
2.3 基于Slack Bot的數(shù)據(jù)庫(kù)實(shí)時(shí)監(jiān)控和預(yù)警平臺(tái)實(shí)現(xiàn)
本節(jié)介紹了基于Slack Bot的數(shù)據(jù)庫(kù)實(shí)時(shí)監(jiān)控和預(yù)警平臺(tái)的架構(gòu)搭建方法和實(shí)際部署平臺(tái)搭建。
2.3.1 架構(gòu)搭建
從架構(gòu)圖1中可見,監(jiān)控和預(yù)警平臺(tái)總共由3個(gè)部分所組成,數(shù)據(jù)庫(kù)定時(shí)腳本模塊,JMS消息隊(duì)列和機(jī)器人集群。
預(yù)警數(shù)據(jù)的獲取主要由兩個(gè)方面的數(shù)據(jù)所構(gòu)成,首先是針對(duì)于大數(shù)據(jù)平臺(tái)Hbase等自己擁有管理平臺(tái)的集群,采用監(jiān)聽其預(yù)警消息接口,比如集群內(nèi)服務(wù)器的故障和網(wǎng)絡(luò)故障等,通過數(shù)據(jù)庫(kù)主動(dòng)推送的方式接收數(shù)據(jù)庫(kù)預(yù)警信息。針對(duì)于傳統(tǒng)的面向?qū)ο髷?shù)據(jù)庫(kù)以及大數(shù)據(jù)平臺(tái)不具備的數(shù)據(jù)預(yù)警,比如數(shù)據(jù)庫(kù)的容量預(yù)警,數(shù)據(jù)庫(kù)長(zhǎng)腳本執(zhí)行預(yù)警等。需要由數(shù)據(jù)庫(kù)運(yùn)維人員自己制作腳本來(lái)定時(shí)運(yùn)行。所以定時(shí)腳本模塊就實(shí)現(xiàn)了運(yùn)行運(yùn)維人員自定義定時(shí)腳本的功能。通過每隔一段時(shí)間像數(shù)據(jù)庫(kù)輪詢當(dāng)前狀態(tài)來(lái)發(fā)送預(yù)警信息,并且將信息保存到JMS中。
新系統(tǒng)采用了JMS作為消息總線,利用JMS數(shù)據(jù)的可靠性和高可用性來(lái)確保每一條預(yù)警消息能夠準(zhǔn)確地發(fā)送到Slack機(jī)器人。JMS為分布式系統(tǒng)中創(chuàng)建、發(fā)送、接收消息提供了一套可靠、通用的方法,它屏蔽了不同操作系統(tǒng)和網(wǎng)絡(luò)協(xié)議的具體細(xì)節(jié),減少了開發(fā)跨平臺(tái)和網(wǎng)絡(luò)協(xié)議軟件的復(fù)雜性[4]。同時(shí)JMS將作為Slack機(jī)器人集群的負(fù)載均衡平臺(tái)。對(duì)于一些需要用戶交互的請(qǐng)求,機(jī)器人程序并不直接處理請(qǐng)求,而是會(huì)將接收的數(shù)據(jù)直接推送到JMS上,并且由空閑的機(jī)器人從JMS上讀取消息,并且執(zhí)行。這樣當(dāng)某臺(tái)Slack機(jī)器人工作繁忙的時(shí)候,不會(huì)造成消息的積壓,并且支持當(dāng)某一臺(tái)機(jī)器人無(wú)法正常工作的前提下,由其他機(jī)器人來(lái)消費(fèi)消息完成用戶交互。新系統(tǒng)采用了發(fā)布訂閱者模型,通過對(duì)于topic的訂閱來(lái)實(shí)現(xiàn)消息負(fù)載均衡的傳遞[5]。
機(jī)器人程序作為Slack的客戶端,和傳統(tǒng)的Slack客戶端具有相同的消息發(fā)送,接收,圖片發(fā)送等功能??梢詫?shí)現(xiàn)將預(yù)警消息推送到責(zé)任人,并且監(jiān)聽和處理交互信息。與此同時(shí),機(jī)器人程序會(huì)與企業(yè)內(nèi)部的故障管理程序Jira集成,實(shí)現(xiàn)歷史相似故障的搜索以及當(dāng)前故障的生命周期管理。
2.3.2 Slack實(shí)時(shí)消息接口調(diào)用
Slack作為當(dāng)下流行的社交平臺(tái)提供了實(shí)時(shí)的消息接口,可以通過注冊(cè)機(jī)器人賬號(hào),通過驗(yàn)證token的方式進(jìn)行登錄驗(yàn)證。Slack提供了實(shí)時(shí)的數(shù)據(jù)推送接口,可以通過發(fā)送Json字符串和token的方式實(shí)現(xiàn)數(shù)據(jù)的推送。同時(shí)Slack提供了基于Event的數(shù)據(jù)監(jiān)聽接口,可以監(jiān)聽用戶發(fā)送的數(shù)據(jù)和命令。從而實(shí)現(xiàn)了用戶交互。此外,Slack提供了更具交互性的帶有按鈕的消息模塊,可以將如下消息發(fā)送給用戶使得用戶完成交互操作
2.3.3 自定義預(yù)警
在新的數(shù)據(jù)庫(kù)監(jiān)控和預(yù)警平臺(tái),用戶可以回復(fù)反斜杠+CA來(lái)實(shí)現(xiàn)自定義預(yù)警。在用戶輸入了自定義預(yù)警命令之后,機(jī)器人程序會(huì)自動(dòng)返回自動(dòng)預(yù)警的表單,用戶可以從下拉框中選擇預(yù)警的內(nèi)容和所對(duì)應(yīng)的閾值,保存并且實(shí)時(shí)生效。用戶也可以輸入反斜杠+CAL來(lái)查看自定義的預(yù)警列表,以及輸入反斜杠+DCA+預(yù)警編號(hào)來(lái)刪除自定義預(yù)警。如果用戶經(jīng)常介紹到不屬于自己的預(yù)警,可以通過輸入反斜杠+AL來(lái)查詢自己的預(yù)警列表,并且通過輸入反斜杠+MA+預(yù)警編號(hào)來(lái)實(shí)現(xiàn)預(yù)警的屏蔽。這樣就可以避免由于過度打擾帶來(lái)的預(yù)警失效。
2.3.4 實(shí)際部署
本文所搭建的環(huán)境都是以虛擬機(jī)組成:
2.3.5 消息審計(jì)
消息審計(jì)模塊是預(yù)警系統(tǒng)重要的模塊。雖然消息審計(jì)模塊對(duì)于預(yù)警系統(tǒng)沒有功能上的增強(qiáng),但是卻是不可或缺的一環(huán)。在企業(yè)內(nèi)部客戶的數(shù)據(jù)十分的重要,如何保護(hù)客戶數(shù)據(jù)的安全則至關(guān)重要。并且信息審計(jì)具有預(yù)防、控制和實(shí)現(xiàn)價(jià)值增值的三大功能[6]。Slack本身并不屬于企業(yè)內(nèi)部的平臺(tái),并且Slack平臺(tái)作為企業(yè)內(nèi)部和外部客戶端打通的工具,需要嚴(yán)格的對(duì)發(fā)送的預(yù)警和監(jiān)控信息進(jìn)行消息審計(jì)和消息記錄,避免用戶的數(shù)據(jù)外泄。本系統(tǒng)采用了三種方式來(lái)防止消息泄露。
首先基于Episode距離的快速多模式相似串匹配算法,該算法把模式串集合轉(zhuǎn)換為多個(gè)有限自動(dòng)機(jī),然后利用模式串集合建立一個(gè)狀態(tài)驅(qū)動(dòng)器.依次用待匹配串的字符驅(qū)動(dòng)狀態(tài)驅(qū)動(dòng)器,由狀態(tài)驅(qū)動(dòng)器驅(qū)動(dòng)各個(gè)有限自動(dòng)機(jī),實(shí)現(xiàn)了中英文混合的允許插入錯(cuò)誤的相似多模式匹配[7]。從而查看數(shù)據(jù)中是否包含需要加密的客戶數(shù)據(jù),如客戶地址,客戶名稱等。
其次通過對(duì)于Oracle腳本執(zhí)行記錄的分析,查看執(zhí)行腳本中是否涉及讀取涉密信息[8]。最后將發(fā)送的審計(jì)信息同步保存到Hdfs上,為了日后的詳細(xì)升級(jí)提供依據(jù)。
2.3.6 效果比較
前文通過一系列的基于Slack平臺(tái)設(shè)計(jì)和開發(fā),提出并且實(shí)現(xiàn)了一套完整的數(shù)據(jù)庫(kù)監(jiān)控和預(yù)警平臺(tái)解決方案。相比于傳統(tǒng)的數(shù)據(jù)庫(kù)監(jiān)控和預(yù)警方案,基于Slack Bot的數(shù)據(jù)庫(kù)監(jiān)控和預(yù)警平臺(tái)有以下優(yōu)勢(shì):
(1)提供交流的平臺(tái)來(lái)解決問題
Slack作為一款社交軟件,能夠很好支持線上語(yǔ)音,視頻,文字交流的需求。這有助于在問題發(fā)生時(shí)能夠更快的聯(lián)系到各方的代表,共同解決當(dāng)前的問題。并且有效地解決了郵件系統(tǒng)回復(fù)順序混亂的問題。并且聊天的記錄也會(huì)保存下來(lái),供以后所使用。
(2)能夠和企業(yè)內(nèi)部的平臺(tái)集成
Slack最大的亮點(diǎn)就是能夠和諸多企業(yè)內(nèi)部的工具相集成。比如說(shuō)JIRA,GitHub,郵箱服務(wù),LDAP等等。這樣只需要通過簡(jiǎn)單的配置既可以實(shí)現(xiàn)將企業(yè)內(nèi)部碎片化的管理工具整合。在問題發(fā)生時(shí)可以減少很多人工的冗余步驟,并且可以從歷史相似的案例中找到解決方案。
(3)能夠在手機(jī)端配置新的預(yù)警
Slack支持的富文本編輯可以提供自定義的表單消息,用戶可以在表單中配置自己需要的預(yù)警。這樣就可以在外網(wǎng)完成配置操作。而不需要通過VPN的方式連接公司內(nèi)網(wǎng),然后在網(wǎng)頁(yè)上實(shí)現(xiàn)預(yù)警配置,提高了用戶的使用體驗(yàn)
(4)能夠搜索歷史消息記錄來(lái)幫助分析問題
Slack作為一款社交平臺(tái),支持對(duì)于歷史消息記錄的搜索,能夠通過關(guān)鍵字很快的檢索到以前的問題修復(fù)方案和討論內(nèi)容。從而不需要像以前一樣從每天上百封的郵件中去搜索內(nèi)容。并且由于slack的信息是保存于服務(wù)器端,不存在個(gè)人賬戶的數(shù)據(jù)大小的限制。
3 結(jié)論
文章提出了數(shù)據(jù)庫(kù)監(jiān)控和預(yù)警的重要性,并且通過對(duì)于傳統(tǒng)數(shù)據(jù)庫(kù)監(jiān)控和預(yù)警的調(diào)研,指出其不足。并且研究和選擇了Slack平臺(tái)作為預(yù)警監(jiān)控平臺(tái)的基礎(chǔ)平臺(tái),設(shè)計(jì)和實(shí)現(xiàn)了一個(gè)能夠?qū)崿F(xiàn)準(zhǔn)確實(shí)時(shí)預(yù)警,又能夠和企業(yè)內(nèi)部工具集成,并且基于社交平臺(tái)的數(shù)據(jù)庫(kù)監(jiān)控預(yù)警的解決方案。
參考文獻(xiàn):
[1] 向海華.數(shù)據(jù)庫(kù)技術(shù)發(fā)展綜述[J].現(xiàn)代情報(bào).2003(12):31-33.
[2] 高峰.數(shù)據(jù)庫(kù)實(shí)時(shí)監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].氣象,2005,31(3):81-84.
[3] 王娜,宿紅毅,白琳,等.數(shù)據(jù)庫(kù)性能監(jiān)控分析系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2005(24):105-107.
[4] 姚剛.基于JMS的消息中間件的研究與設(shè)計(jì)[D].長(zhǎng)沙理工大學(xué),2008.
[5] 蘇洋.分布式應(yīng)用對(duì)象間JMS消息服務(wù)原理與消息處理過程[J].微型機(jī)與應(yīng)用,2002(8):9-12.
[6] 王知津,卞丹,王文爽.電子商務(wù)環(huán)境下企業(yè)信息審計(jì)研究[J].情報(bào)探索.2010(9):3-6.
[7] 高鵬,張德運(yùn),孫欽東,等.網(wǎng)絡(luò)信息審計(jì)系統(tǒng)中的多模式相似匹配算法[J].軟件學(xué)報(bào),2014,15(7):1074-1080.
[8] 陳晨,陳懷楚,高國(guó)柱,等.基于Oracle數(shù)據(jù)庫(kù)的數(shù)據(jù)審計(jì)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].實(shí)驗(yàn)技術(shù)與管理,2005(12):76-79.