時(shí)間是我們最大的敵人 --奇異博士
云計(jì)算一個(gè)難點(diǎn)在于保障系統(tǒng)的高可用烙如,當(dāng)在發(fā)生故障的時(shí)候产上,能夠盡快的恢復(fù)(參考最近的gitlab和亞馬遜s3故障教訓(xùn))能颁。如同奇異博士所說次慢,工程師是在和時(shí)間作斗爭(zhēng)。監(jiān)控和報(bào)警是工作的重中之重粱檀。一般來(lái)說,我們肯定會(huì)做好宿主機(jī)層面和服務(wù)層面的監(jiān)控報(bào)警漫玄,否則系統(tǒng)形如裸奔茄蚯。
然而,某些場(chǎng)景中睦优,宿主機(jī)和服務(wù)運(yùn)行正常渗常,但是上面的虛擬機(jī)被異常關(guān)機(jī)或者重啟,抑或網(wǎng)絡(luò)連通性出現(xiàn)問題(包括私有網(wǎng)汗盘,外網(wǎng)皱碘,以及不帶外網(wǎng)的情況下通過L3訪問外網(wǎng)等),上述情況下現(xiàn)有的監(jiān)控覆蓋不到隐孽,不能及時(shí)發(fā)現(xiàn)問題癌椿;另外,每次線上更新主機(jī)和網(wǎng)絡(luò)的服務(wù)菱阵,需要觀察升級(jí)對(duì)已有云主機(jī)的影響踢俄。基于上述問題晴及,從用戶角度出發(fā)都办,有了這個(gè)線上打樁監(jiān)控的方案,切實(shí)提升系統(tǒng)可用性和服務(wù)SLA虑稼。
背景
由于目前的環(huán)境部署中琳钉,部分線上以及線下環(huán)境存在較大的配置和環(huán)境差異,導(dǎo)致部分問題線下測(cè)試中不存在蛛倦,無(wú)法提前發(fā)現(xiàn)歌懒,但是上線以后卻會(huì)對(duì)線上的業(yè)務(wù)運(yùn)行造成影響;
為了可以更好的進(jìn)行線上環(huán)境升級(jí)過程中虛擬機(jī)網(wǎng)絡(luò)連通性胰蝠,以及升級(jí)以后的業(yè)務(wù)正確性檢查歼培,考慮通過線上預(yù)埋部分打樁虛擬機(jī)震蒋,并在虛擬機(jī)內(nèi)部部署自動(dòng)化測(cè)試腳本的方式來(lái)實(shí)現(xiàn);在發(fā)現(xiàn)問題以后躲庄,可以通過郵件或IM報(bào)警的方式及時(shí)進(jìn)行日志推送查剖,及時(shí)發(fā)現(xiàn)問題和風(fēng)險(xiǎn),更好的保障線上的穩(wěn)定性和對(duì)外版本質(zhì)量噪窘。
實(shí)現(xiàn)思路概述
線上所有節(jié)點(diǎn)部署一臺(tái)虛擬機(jī)笋庄,虛擬機(jī)內(nèi)部部署測(cè)試工具進(jìn)行線上業(yè)務(wù)的網(wǎng)絡(luò)監(jiān)控,主要實(shí)現(xiàn)的功能包括:
1)同用戶私有網(wǎng)互聯(lián)倔监,所有節(jié)點(diǎn)之間直砂,虛擬機(jī)的私有網(wǎng)采用固定ip的形式
2)機(jī)房網(wǎng)互連,部分節(jié)點(diǎn)間進(jìn)行浩习,包括同用戶和跨用戶均包含(跨租戶主要進(jìn)行acl的功能檢查)
3)私有網(wǎng)訪問外網(wǎng)連通性/dns解析功能静暂,部分節(jié)點(diǎn)中的部分虛擬機(jī)(dns-server功能驗(yàn)證、L3功能檢查)
4)外網(wǎng)訪問外網(wǎng)連通性/dns解析功能谱秽,部分節(jié)點(diǎn)中的部分虛擬機(jī)(外網(wǎng)檢查洽蛀、dns-server功能驗(yàn)證)
5)公共服務(wù)訪問/優(yōu)先路由驗(yàn)證(虛擬機(jī)路由推送功能驗(yàn)證)
其中,網(wǎng)絡(luò)連通性方面通過ping進(jìn)行檢查疟赊,時(shí)間間隔為0.2s郊供,結(jié)果方式采用如下的形式進(jìn)行記錄:
[date] [src_ip] [dst_ip] [state] 例如:07/14/15---15:39:43 10.180.164.230 10.180.164.231 ok
網(wǎng)絡(luò)方面無(wú)異常出現(xiàn)的情況不做任何推送操作,僅打印日志記錄近哟;在網(wǎng)絡(luò)出現(xiàn)異常后驮审,打印日志,同時(shí)通過IM或郵件的形式進(jìn)行實(shí)施告警推送吉执。
此部分為了應(yīng)對(duì)一些維護(hù)場(chǎng)景導(dǎo)致的網(wǎng)絡(luò)異常出現(xiàn)疯淫,實(shí)現(xiàn)中可配置業(yè)務(wù)開關(guān)來(lái)設(shè)置是否推送告警,如確定為維護(hù)操作或其他已知人為操作導(dǎo)致的異常鼠证,可關(guān)閉開關(guān)停止告警峡竣;并且可以在業(yè)務(wù)恢復(fù)后打開開發(fā)繼續(xù)進(jìn)行監(jiān)控。
由于實(shí)現(xiàn)中量九,需要在每個(gè)節(jié)點(diǎn)進(jìn)行虛擬機(jī)的預(yù)埋适掰,所以會(huì)占用部分線上的資源,使用中會(huì)選取最小的規(guī)格(1v1e,512M內(nèi)存)來(lái)進(jìn)行驗(yàn)證荠列,盡量少的占用系統(tǒng)資源类浪。
實(shí)現(xiàn)
主要通過python fabric模塊,進(jìn)行打樁機(jī)腳本與配置文件的下發(fā)和服務(wù)的部署肌似。
另外需要考慮到日志回滾费就,進(jìn)程守護(hù)等問題。進(jìn)行好logrotate川队,和supervisor配置文件的準(zhǔn)備力细。
配置說明
- 本程序是通過讀取 private_network.list 進(jìn)入對(duì)應(yīng)的云主機(jī)(用root登錄)
- 另外需要準(zhǔn)備這些 云主機(jī) root 賬戶的ssh私鑰睬澡。并在 remote_test.py 中進(jìn)行配置
- 在 /config 目錄下的 global.conf 進(jìn)行全局配置。包括郵件報(bào)警是否開啟眠蚂,收件人煞聪,測(cè)試的環(huán)境等
ip_list 目錄下,各個(gè)需要 check 的 ip list 準(zhǔn)備好
- 私有網(wǎng)
- 機(jī)房網(wǎng)
- 外網(wǎng)ip
- dns 連通性測(cè)試ip
運(yùn)行
執(zhí)行一次逝慧,在命令行下看連通性結(jié)果昔脯。
fab -f network_check.py dry_run
拉起所有節(jié)點(diǎn)云主機(jī)測(cè)試連通性服務(wù)。
fab -f network_check.py start
停止所有節(jié)點(diǎn)測(cè)試連通性服務(wù)笛臣。
fab -f network_check.py stop
抓回所有節(jié)點(diǎn)的日志云稚。
fab -f network_check.py get_log
并行執(zhí)行,可以加上 -P
參數(shù)。
fab -f network_check.py start -P
實(shí)現(xiàn)效果展示
報(bào)警消息
登錄到哨兵監(jiān)控節(jié)點(diǎn)看一下日志沈堡,果然在10:40左右10.173.32.77網(wǎng)絡(luò)連通性異常静陈。
通過私有網(wǎng)ip反查對(duì)應(yīng)宿主機(jī)所在節(jié)點(diǎn)。
查看宿主機(jī)對(duì)應(yīng)的監(jiān)控诞丽,果然在該段時(shí)間內(nèi)有異常產(chǎn)生窿给。
結(jié)論
通過在物理機(jī)上部署打樁的云主機(jī),進(jìn)行網(wǎng)絡(luò)連通性檢測(cè)率拒,能夠更早的發(fā)現(xiàn)某些異常場(chǎng)景,為問題排查與服務(wù)恢復(fù)爭(zhēng)取更多時(shí)間禁荒。