導語:
看似無章可循問題進行排查時可以說是世界上最緊張且難度、強度最大的工作之一,尤其面對極高收入的業務、海量服務運營,帶來極大的恐慌感并引發腎上腺素飙升,壓力的存在可能誘發我們犯下的低級失誤。克服這種白癡般的本能,我們需要克制自己快要爆發的一腔怒火、強迫自己以有條不紊的方式逐一開展嘗試。其實做運維練就的是一種心态,足夠淡定遇事而不亂,從容應對才是真。
排查出問題并找到根本原因加以解決,個人認為是一件很成就感的事情。曾經有人問過我:“你是怎麼想到問題出現在xxx的?又是怎麼确認根本原因是xxx的?”,我隻能輕描淡寫的回答:“靠經驗”,然後感覺這個逼裝得還可以。其實這裡說的“靠經驗”是很模糊的,一直以來大家可能都覺得排查問題要靠經驗,但是又說不出具體通過什麼樣的經驗排查出了問題,最後讓排查問題逐漸變成了一門玄學。其實問題排查工作往往遵循一些通用且不成文的實踐規則,并不是一門所謂的玄說,結合自身經曆、總結,希望能為大家的實際工作帶來助益。
吃一塹長一智
出了問題并不可怕,怕的是我們從問題中學不到什麼,怕的是類似的問題重現,提高問題定位的效率,有哪些值得去做,比如:
建立長效錯誤碼機制,使用具統計、可視意義的數字來簡短描述錯誤含義和範疇,正所謂濃縮就是精華,這一點在錯誤碼屢試不爽。
編寫有效的錯誤日志,建立日志标準。正常程序中打錯誤日志主要是為了更好地排查問題和解決問題,提供重要線索和指導。但是在實際中打的錯誤日志内容和格式變化多樣,錯誤提示上可能殘缺不全、沒有相關背景、不明其義,使得排查解決問題成為非常不方便或者耗時的操作。而實際上隻要開發稍加用心,也需就會減少排查問題的很多無用功。如何編寫有效的錯誤日志,建立日志标準,也是非常有利于問題分析的。
定位問題避免二次損害,當某個看似難以捉摸的難題出現時,本能可能是重啟,盡快讓系統恢複正常。雖然這樣的方式經常能夠解決問題而且起效神速,但同時也很可能把情況推向令人難以置信的惡化深淵。問題排查手段包括重新啟動不穩定系統、嘗試自動記錄數據庫、文件系統修複等等,這些方式往往确實能搞定難題并讓系統重回生産軌道,但同時也沒準導緻數據恢複努力付之東流,毀掉确定問題根本原因的機會甚至大大延長關鍵性系統的停機時間。保留現場也非常重要,跟破案現場要要求現場勘察、樣本采集、排查、鎖定如出一轍,對于難以重現問題,盡量創造條件保留了可以用于故障重現的數據或現場。
線上環境複雜多變,雖然這一點并不能馬上解決問題起到直接作用,但堅持這種處理思路,為開發和測試創造條件,降低因難以重現的疑難故障的挂起率,最終有助于業務的長期穩定。
建立集中的數據可視平台,不至于遇到問題才開始着手分析,若是對業務沒有足夠的了解又沒有數據依賴,就很可能在解決問題時雪上加霜。
建立沙箱影子系統,模拟複雜多變的現網環境,規避線上影響,重現或壓測問題,如tcpcopy、dubbocopy等
搭建開源的日志可視方案,協助我們去解決最後”一公裡”的問題,常見如ELK、Log.io等
善其事必先利其器,常見系統排查工具perf、iptraf、netperf、tcpdump、gdb、pstack、jstack、strace,top、iotop、tsar等
……
結語
總結這幾年處理問題的一些思路和經驗,可以歸納提煉如下幾句:
收集信息,随時記錄
協調資源,把控影響
冷靜判斷,沉着分析
大膽假設,謹慎嘗試
積極總結,以備後用
運維專家或許是每個運維人追尋的夢想,他們敏銳的嗅覺似乎總能揪出系統故障的根本原因。這種快速反應、準确定位的能力源自多年來處理複雜系統難題的經驗積累與個人知識儲備,而且其成功很難被複制。雖然沒有哪家機構願意為其頒發認證資質,盡管如此,這仍然是大家所樂于追尋的一種“超自然”的本領
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!