文/潘藝鵬
結(jié)合手機(jī)短信搭建實(shí)時(shí)告警平臺(tái)
文/潘藝鵬
Cacti是一套基于PHP、MySQL、SNMP及RRDTool開發(fā)的開源網(wǎng)絡(luò)流量圖形監(jiān)控系統(tǒng),經(jīng)過(guò)不斷更新升級(jí),具備設(shè)備監(jiān)視、網(wǎng)絡(luò)日志、故障告警、閾值告警等功能,逐漸成為一款功能完善的網(wǎng)絡(luò)監(jiān)管工具。
基于Cacti構(gòu)建實(shí)時(shí)監(jiān)控平臺(tái),是利用Cacti的實(shí)時(shí)郵件告警功能。但是在實(shí)際管理工作中,僅僅利用Cacti的郵件告警,不能使管理員即時(shí)接收到實(shí)時(shí)出現(xiàn)的故障情況,這主要是因?yàn)榻邮锗]件需要一段時(shí)間。因此,要真正實(shí)現(xiàn)網(wǎng)絡(luò)狀態(tài)實(shí)時(shí)監(jiān)控,讓管理員能即時(shí)接收網(wǎng)絡(luò)故障信息,需要結(jié)合手機(jī)短信搭建實(shí)時(shí)告警平臺(tái)。
由于Cacti自身不具備短信告警功能,因此利用Cacti構(gòu)建的網(wǎng)絡(luò)狀態(tài)即時(shí)短信告警平臺(tái)可以依靠Cacti的郵件實(shí)時(shí)告警功能,利用告警郵件作為短信的觸發(fā)條件。
目前,很多郵件運(yùn)營(yíng)商都提供郵件到達(dá)的短信通知功能,包括網(wǎng)易的163郵箱、騰訊的QQ郵箱,這類郵箱將自身與用戶的手機(jī)進(jìn)行綁定,一旦接收郵件,就發(fā)送告知短信,通常這類郵箱的告知功能是付費(fèi)使用。另外,還可以使用手機(jī)運(yùn)營(yíng)商提供的郵箱,例如移動(dòng)的139郵箱、電信189郵箱、聯(lián)通的手機(jī)郵箱,這類郵箱直接使用手機(jī)作為郵箱賬號(hào),當(dāng)郵件到達(dá)時(shí),能直接發(fā)送短信。
此種方法的優(yōu)點(diǎn)是實(shí)現(xiàn)容易,但需要每個(gè)網(wǎng)絡(luò)管理員使用自己的郵箱,這不僅可能影響到自身正常郵件的使用,而且在管理上需要依靠自覺性;其次,采用這種方式還需要交納一定的使用費(fèi),并且運(yùn)營(yíng)商使用政策的變更使其存在不穩(wěn)定因素。
飛信是一款中國(guó)移動(dòng)提供的承載商務(wù)應(yīng)用及娛樂(lè)功能的即時(shí)通信產(chǎn)品,用戶可通過(guò)PC 或手機(jī)終端隨時(shí)隨地實(shí)現(xiàn)文字、語(yǔ)音溝通。飛信的最大的優(yōu)勢(shì)就是可以免費(fèi)地把消息即時(shí)發(fā)送到好友的手機(jī)上。針對(duì)飛信的使用優(yōu)勢(shì),開發(fā)人員對(duì)飛信的通訊協(xié)議進(jìn)行研究分析,開發(fā)飛信機(jī)器人,通過(guò)它就可以自動(dòng)將信息即時(shí)發(fā)送到指定的手機(jī)上。
在Cacti服務(wù)器上安裝飛信機(jī)器人,并編寫自動(dòng)發(fā)送的腳本;然后對(duì)Cacti觸發(fā)郵件的腳本進(jìn)行修改,在觸發(fā)語(yǔ)句的后面添加執(zhí)行自動(dòng)發(fā)送腳本的語(yǔ)句,當(dāng)遇到故障發(fā)出告警郵件的同時(shí),飛信機(jī)器人也將告警內(nèi)容發(fā)送到指定的手機(jī)。
使用飛信機(jī)器人發(fā)送告警信息發(fā)送的流程如下所示:
觸發(fā)郵件告警→捕獲告警信息→發(fā)送告警郵件→觸發(fā)飛信機(jī)器人。
1.查找Cacti的Threshold插件的源碼,找到報(bào)警郵件發(fā)送的函數(shù):確定發(fā)送郵件的情況與郵件信息的thold_check_threshold與負(fù)責(zé)發(fā)送郵件的thold_mail。
2.在這些函數(shù)中,$subject變量是存放郵件的內(nèi)容,可將$subject變量?jī)?nèi)容保存下來(lái),作為飛信機(jī)器人的發(fā)送信息。因此,在Threshold源代碼中查找調(diào)用thold_mail發(fā)送郵件的語(yǔ)句,并在這段語(yǔ)句后添加命令exec("echo$subject>>/var/www/alter-sms.log"),將郵件內(nèi)容存放到alter-sms.log文件中作為短信內(nèi)容。
接下來(lái),添加命令exec("sh /var/www/sendsms.sh"),其中sendsms.sh是調(diào)用飛信機(jī)器人的自動(dòng)執(zhí)行腳本程序。
3.編寫sendsms.sh腳本程序,該程序主要實(shí)現(xiàn)如下代碼:
其中:語(yǔ)句(1)用于判斷發(fā)送的altersms.log中是否有告警的信息;
語(yǔ)句(2)用于執(zhí)行飛信機(jī)器人,其中#sendnumber是飛信發(fā)出的手機(jī)號(hào)碼、#adminnumber是接收短信的手機(jī)號(hào)碼;
語(yǔ)句(3)用于將刪除已發(fā)出的短信息。
至此,我們可以實(shí)現(xiàn)通過(guò)飛信機(jī)器人自動(dòng)發(fā)出告警信息,通過(guò)手機(jī)短信讓網(wǎng)絡(luò)管理員在第一時(shí)間就能收到告警情況。這種方法直接由服務(wù)器發(fā)送告知短信,其優(yōu)點(diǎn)是只需在執(zhí)行腳本中對(duì)管理員的手機(jī)號(hào)碼進(jìn)行管理,這給管理員減輕郵箱的管理任務(wù),也省去郵箱的短信費(fèi)用,但缺點(diǎn)是目前僅支持中國(guó)移動(dòng)用戶。
在實(shí)際應(yīng)用中,筆者采用飛信機(jī)器人構(gòu)建即時(shí)告警平臺(tái),管理員通過(guò)該平臺(tái)在第一時(shí)間知曉發(fā)生的網(wǎng)絡(luò)故障。當(dāng)發(fā)生設(shè)備宕機(jī)時(shí),能夠根據(jù)應(yīng)急方案進(jìn)入搶修程序,進(jìn)而縮短網(wǎng)絡(luò)故障時(shí)間,提高網(wǎng)絡(luò)的有效性。當(dāng)發(fā)生端口流量異常時(shí),能夠有針對(duì)性地查明原因,減緩網(wǎng)絡(luò)攻擊,降低垃圾流量,保障網(wǎng)絡(luò)流量帶寬。
(作者單位為廈門大學(xué)信息與網(wǎng)絡(luò)中心)