線上問(wèn)題解決的思路

工作中我們常常會(huì)接收到例如來(lái)自預(yù)警系統(tǒng)的告警郵件或者你的領(lǐng)導(dǎo)轉(zhuǎn)發(fā)來(lái)的線上問(wèn)題,那么當(dāng)我們遇到這類(lèi)問(wèn)題的時(shí)候該如何去完成處理這個(gè)任務(wù)呢?以下的處理方法步驟可以提供參考建議。

一、一般我們目前線上問(wèn)題的來(lái)源:

1.主動(dòng)發(fā)現(xiàn)
相關(guān)owner每天查看系統(tǒng)監(jiān)控情況,主動(dòng)發(fā)現(xiàn)了一些異常的現(xiàn)象。
2.監(jiān)控系統(tǒng)告警
比如應(yīng)用響應(yīng)時(shí)間在某個(gè)時(shí)間段上升了,資源層面cpu、內(nèi)存、io、tcp連接數(shù)、disk、線程數(shù)、GC、連接池等各個(gè)服務(wù)器指標(biāo)異常,可能是某臺(tái)的服務(wù)器出現(xiàn)了異常,但是業(yè)務(wù)還未受到大面積影響
3.你的領(lǐng)導(dǎo)轉(zhuǎn)發(fā)來(lái)自來(lái)組郵件或者產(chǎn)品
通常這類(lèi)郵件會(huì)有明確的uid,日期時(shí)間,服務(wù)名稱,問(wèn)題現(xiàn)象。
4.來(lái)自微信
通常有截圖,這個(gè)時(shí)候可以問(wèn)清楚具體觸發(fā)時(shí)間點(diǎn),重復(fù)3的操作,遇到非必現(xiàn)問(wèn)題,可以嘗試多種操作來(lái)還原場(chǎng)景
5.生產(chǎn)故障郵件
OPS的發(fā)來(lái)的郵件

二、查問(wèn)題的基本步驟

—了解問(wèn)題概況,評(píng)估影響的范圍
根據(jù)問(wèn)題的來(lái)源,我們首先要確認(rèn)的是這到底不是線上的故障? 還是個(gè)別的極端case問(wèn)題?極端的case引起的一般我們會(huì)降低優(yōu)先級(jí)。 比如不能下單這樣的就是大大大大大大大大大大大大問(wèn)題。
【tips:針對(duì)不同的問(wèn)題范圍直接會(huì)影響處理問(wèn)題的優(yōu)先級(jí)哦~~~】
如果已經(jīng)確定了是線上故障,我們需要快速響應(yīng)去定位故障點(diǎn),找其原因。
稍大一點(diǎn)的公司,一般都有自己的監(jiān)控系統(tǒng)(服務(wù)器監(jiān)控,服務(wù)監(jiān)控,業(yè)務(wù)監(jiān)控)和日志系統(tǒng)。具體分析問(wèn)題現(xiàn)象,定位問(wèn)題,看log還是數(shù)據(jù)。一般能快速判是功能還是性能的問(wèn)題。

如果是確定功能問(wèn)題,我們一般可以從日志系統(tǒng)的trace入手:
若有拋錯(cuò)誤,通過(guò)跟蹤日志信息或者特定用戶問(wèn)題追溯來(lái)確定,一般這樣的日志系統(tǒng)都有唯一的標(biāo)識(shí)id串聯(lián)上下游,日志是實(shí)時(shí)的,且支持過(guò)濾,統(tǒng)計(jì)等查詢,可以查看一段時(shí)間的趨勢(shì)情況

如果是確定性能問(wèn)題,我們一般除了日志系統(tǒng)還會(huì)更多的結(jié)合監(jiān)控系統(tǒng)并行靈活組合來(lái)看:
日志系統(tǒng)一般都會(huì)有各類(lèi)型的埋點(diǎn)(自定義埋點(diǎn),實(shí)時(shí)統(tǒng)計(jì)類(lèi)埋點(diǎn),PV),所有數(shù)據(jù)都是實(shí)時(shí)埋點(diǎn),很短的delay。
監(jiān)控系統(tǒng)里面一般會(huì)有應(yīng)用監(jiān)控,也包括上下游的服務(wù),調(diào)用SOA,被調(diào)SOA,調(diào)redis監(jiān)控,調(diào)用DAL監(jiān)控,系統(tǒng)本身的監(jiān)控,C#的應(yīng)用還有IIS的監(jiān)控,java的有VM的監(jiān)控等

—協(xié)調(diào)資源
判斷故障的影響面,這點(diǎn)很重要,你需要給一個(gè)明確的范圍,配合關(guān)聯(lián)的產(chǎn)品經(jīng)理,告知有多少用戶(百分比,訂單量)會(huì)受到影響;
再結(jié)合影響面,找你的頭,要么申請(qǐng)hotfix,要么放在就近版本修復(fù),如果要修復(fù),一定要讓相關(guān)人員(主管,產(chǎn)品,測(cè)試,關(guān)聯(lián)開(kāi)發(fā))清楚這個(gè)事情的來(lái)龍去脈。

—深入分析
針對(duì)上面的系統(tǒng)查看,我們一般能找到切入關(guān)鍵點(diǎn),之后是一個(gè)復(fù)雜的收集信息-假設(shè)-驗(yàn)證—收集信息-假設(shè)-驗(yàn)證的循環(huán)過(guò)程,直到我們找到重現(xiàn),找到根源。
這里簡(jiǎn)單列舉下常見(jiàn)的一些疑點(diǎn)方向:

  1. 剛發(fā)布新版本不久后,線上在很短的時(shí)間內(nèi)就出了問(wèn)題。---那很大程度上是由于這次上的版本帶來(lái)的問(wèn)題,重點(diǎn)可以檢查這次代碼的改動(dòng)點(diǎn)是什么。
  2. 版本是之前的,突然出現(xiàn)內(nèi)存方面的錯(cuò)誤,嚴(yán)重導(dǎo)致服務(wù)不可用。---可能是之前潛在的重大的bug。
  3. 線上之前一直穩(wěn)定運(yùn)行,業(yè)務(wù)量突增,各服務(wù)的響應(yīng)時(shí)間增長(zhǎng),QPS先陡增然后下降,最后大量報(bào)錯(cuò),最嚴(yán)重的時(shí)候出現(xiàn)服務(wù)不可用。---這種情況很大情況下是上游調(diào)用方的突然增加流量,或者是遭遇異常的攻擊。
  4. 版本是之前上線的,QPS正常,服務(wù)響應(yīng)時(shí)間增長(zhǎng),日志中出現(xiàn)警告。---可能是數(shù)據(jù)庫(kù),Redis的連接問(wèn)題,或者定時(shí)任務(wù)出了問(wèn)題,導(dǎo)致等等。。。
  5. 版本是之前上線的,QPS正常,但服務(wù)響應(yīng)時(shí)間下降,錯(cuò)誤率上升。---可能是下游依賴的服務(wù)有異常。
  6. 很多服務(wù)大面積出現(xiàn)短暫的業(yè)務(wù)失敗。---很大可能是網(wǎng)絡(luò)問(wèn)題導(dǎo)致。

—問(wèn)題重現(xiàn),故障排除
確定好問(wèn)題的范圍后,接下來(lái)就是問(wèn)題重現(xiàn):

功能類(lèi)問(wèn)題,一般比較好重現(xiàn),如果遇到不是每次都能重現(xiàn)的問(wèn)題。如果是APP問(wèn)題,還可以嘗試借來(lái)手機(jī)還原場(chǎng)景,或者通過(guò)DEBUG模式嘗試定位Dump文件。
根據(jù)前面掌握的基本信息,幫助我們快速去理清楚業(yè)務(wù)發(fā)生的時(shí)序,比如進(jìn)入App頁(yè),會(huì)發(fā)生什么事情,Native邏輯做了什么,發(fā)起了什么請(qǐng)求(上傳參數(shù),內(nèi)容),服務(wù)下發(fā)是否為空(檢查服務(wù)下發(fā)),是否正常觸發(fā)了業(yè)務(wù)回調(diào),業(yè)務(wù)回調(diào)處理完畢頁(yè)面內(nèi)容渲染是否完成。

如果確定是性能問(wèn)題,需要進(jìn)行重現(xiàn),這個(gè)過(guò)程有時(shí)候是比較困難的。。

  1. 要先拉取當(dāng)前線上的發(fā)布版本,發(fā)布到測(cè)試環(huán)境,分析場(chǎng)景,準(zhǔn)備相關(guān)的數(shù)據(jù)
  2. 我們要看上的機(jī)器配置 CPU ,內(nèi)核,磁盤(pán),物理機(jī)還是虛擬機(jī) ,內(nèi)存, 網(wǎng)絡(luò)io 等
  3. JDK版本 ,JVM的參數(shù)
  4. 應(yīng)用開(kāi)關(guān)配置,數(shù)據(jù)庫(kù), 緩存, redis
  5. 接口平均的響應(yīng)時(shí)間RT 是的多少, 接口的QPS是多少 平常的性能如何
    6.。。

—-驗(yàn)證問(wèn)題是否解決
通常情況下,對(duì)于性能問(wèn)題的驗(yàn)證:

  1. 如果線上直接保存了dump文件,直接拉下來(lái)分析,若無(wú),轉(zhuǎn)2
  2. 一般會(huì)拉取當(dāng)前線上有問(wèn)題的版本看是否能重現(xiàn)問(wèn)題
  3. 然后先拉取生產(chǎn)一個(gè)穩(wěn)定的版本,進(jìn)行兩者比對(duì)。
  4. 如果是上線前壓測(cè)過(guò)的版本,我們要詳細(xì)分析壓測(cè)的場(chǎng)景。
  5. 再切換壓測(cè)一個(gè)開(kāi)發(fā)修復(fù)后的版本進(jìn)行對(duì)比,還要和基線版本對(duì)比。
  6. 其中比對(duì)包括各項(xiàng)性能指標(biāo),有的還必須針對(duì)dump文件進(jìn)行對(duì)比分析 。 最終的結(jié)果是一定要所有修復(fù)后的版本性能不能比原來(lái)生產(chǎn)穩(wěn)定的版本差。
  7. 針對(duì)內(nèi)存的問(wèn)題,我們一般壓測(cè)的時(shí)間會(huì)相對(duì)而言比較長(zhǎng)一點(diǎn),觀察其趨勢(shì)。

—上線驗(yàn)證
驗(yàn)證修復(fù)后的版本,確認(rèn)OK后,進(jìn)行上線,一般都是灰度發(fā)布完成后進(jìn)行觀察,看是否正常。

三、如何快速恢復(fù)(這個(gè)步驟應(yīng)該和二并行做)

因?yàn)橄到y(tǒng)的可用性決定著公司的客戶利益,影響公司的收益和信譽(yù),所以一般我們遇到生產(chǎn)故障的第一要?jiǎng)?wù)是,恢復(fù)服務(wù),盡可能的把對(duì)線上服務(wù)影響降到最低。
怎么來(lái)快速保障把影響減少到最小呢。一般會(huì)參考以下的方法:

  1. 版本回退:大量報(bào)錯(cuò)的情況下,又沒(méi)有辦法快速定位問(wèn)題根源。一般我們都是功能測(cè)試人員負(fù)責(zé)版本上線,如果在是新版本上線后觀察出現(xiàn)了問(wèn)題,一般都是快速回退,切到近期穩(wěn)定的一個(gè)版本。一般大一點(diǎn)的公司發(fā)布系統(tǒng)都做的比較好,可以快速切換版本,且大部分都采用的是灰度發(fā)布,可以將范圍盡可能減少。
  2. 備份以及失效轉(zhuǎn)移: 對(duì)于服務(wù)而言,一但某個(gè)服務(wù)器宕機(jī),就將服務(wù)切換到其他可用的集群服務(wù)器上去。對(duì)于數(shù)據(jù)而言,如果某個(gè)磁盤(pán)出現(xiàn)損壞,就從備份的磁盤(pán)讀取數(shù)據(jù)(一般都是事先就做好了數(shù)據(jù)的同步復(fù)制),這個(gè)一般都是DBA或者運(yùn)維人員去操作。
  3. 切流量: 一般都會(huì)有開(kāi)關(guān)控制,如果出現(xiàn)問(wèn)題,進(jìn)行關(guān)閉一部分流量。 這個(gè)發(fā)布人員都有權(quán)限。但需要事先和相關(guān)人員溝通好。
  4. 擴(kuò)容機(jī)器:線上訪問(wèn)壓力大,不能重啟機(jī)器,或者重啟也無(wú)法解決時(shí),增加集群機(jī)器。
  5. 重啟:當(dāng)某臺(tái)服務(wù)器的CPU高,或者連接數(shù)飆升時(shí),會(huì)采取這種方法。這個(gè)一般也是運(yùn)維的人員去完成該操作。

四、如果避免下次再入坑

等找到了根本原因,解決了問(wèn)題之后,我們需要總結(jié),舉一反三,想想在這個(gè)故障排查和處理過(guò)程中,有哪些環(huán)節(jié)存在弱點(diǎn)?哪些流程/規(guī)范/制度需要優(yōu)化?
這類(lèi)似的問(wèn)題是否在其他系統(tǒng),模塊或者團(tuán)隊(duì)中也存在?不斷完善,以避免再次踩坑,也在團(tuán)隊(duì)中交流經(jīng)驗(yàn),共同提高。
再來(lái)聊聊我們的架構(gòu)的一些保護(hù)機(jī)制
現(xiàn)在一般隨著用戶的訪問(wèn)增多,大的系統(tǒng)一般做到一定的規(guī)模后,架構(gòu)都會(huì)經(jīng)歷過(guò)好幾次的變遷,巨無(wú)霸的系統(tǒng)架構(gòu)一般都是縱向和橫向進(jìn)行了拆分的,都是將各個(gè)模塊獨(dú)立部署,降低了系統(tǒng)的耦合性。這樣的架構(gòu)也更好的方便了我們能夠快速排查問(wèn)題。

總之,線上問(wèn)題來(lái)臨肯定有壓力的,但不要怕!!!!!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,748評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,165評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 175,595評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,633評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,435評(píng)論 6 405
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 54,943評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,035評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,175評(píng)論 0 287
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,713評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,599評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,788評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,303評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,034評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,412評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,664評(píng)論 1 280
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,408評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,747評(píng)論 2 370

推薦閱讀更多精彩內(nèi)容