導讀 | 因為很多系統,特別是 IT 系統或一些電力系統、通訊系統,都是 7×24 小時不間斷的運作。如果一旦發生故障,就要求我們維運人員很快的發現故障,然後用快速且經濟的辦法去把這個故障解決掉。例如醫院有些支撐手術的系統,一旦故障如果無法很快解決的話,甚至會威脅到病人的生命安全。所以 troubleshooting 對我們維運人員來說是一項非常重要的技能和技術要求。 |
troubleshooting 是找到問題發生的根源並將其解決更正的過程,troubleshooting 的目標就是讓設備 / 系統回到正常的工作狀態。
因為很多系統,特別是 IT 系統或是一些電力系統、通訊系統,都是 7×24 小時不間斷的運作。如果一旦發生故障,就要求我們維運人員很快的發現故障,然後用快速且經濟的辦法去把這個故障解決掉。例如醫院有些支撐手術的系統,一旦故障如果無法很快解決的話,甚至會威脅到病人的生命安全。所以 troubleshooting 對我們維運人員來說是一項非常重要的技能和技術要求。
不只在工作中需要做 troubleshooting,生活中也會遇到。前陣子我跟著朋友在玩王者榮耀,就遇到了一個故障。每天晚上玩這個遊戲大概 8、9 點鐘就遇到打著打著網路品質變差,操作變得很卡牌。我很苦惱,身為一個維運人員,或是一個技術人員的本能,我就想網路是什麼問題?怎麼把它解決掉?所以我就做了一次 troubleshooting 的過程。我對家裡所有的無線網絡,聯通的寬頻做了一些測試,嘗試對無線路由器做了配置優化,最後定位到是我們家和鄰居附近2.4G 頻道太擁擠了,幹擾太嚴重,所以晚高峰的時候大家都有上網需求,會互相干擾。後來我把頻道切換到 5G,世界就清靜了,可以安心打遊戲了。
解決問題的通用方法後來我就思考,有沒有非常科學和規範的流程或方法,按照這個方法一步步做下來,就可以解決任何故障或問題?儘管問題多種多樣,實際問題解決的方式也多種多樣,對於具體場景和問題,可以製定特定的問題解決流程。在具體的工作中,大家有做 SA 的,也有做網路的,也有做 DBA 的,每一個特定的方向都會有一些跟專業和問題場景相關的 troubleshooting 方法。
對於通用的問題,是否會有通用的解決方法和解決步驟可以遵循?
這是 《troubleshooting and maintaining cisco IP network》 這本書的作者總結的一套相對一個通用的方法。他把 troubleshooting 整個過程分成了 7 個步驟,從定義問題,到收集線索和信息,到分析、假設、排除可能性,最終可以把問題解決掉。
在一些複雜的系統或複雜問題的 troubleshooting 中,我們可以按照這個解決方法的流程對問題去做一些抽象和定義,然後一步一步來解決。
具體策略與技巧在這個標準流程和方法之外,我們可能會遇到一些相對簡單或更直觀的問題,可以使用一些具體的策略和小技巧來更快速的 troubleshooting。
排查先決條件#我們常常會遇到電視按了開關怎麼沒反應?電腦怎麼開不了了?這個問題有非常大的可能性是電源沒插,或是停電了。從這個事情引申出來,任何系統運作都需要一些必要的前提條件,或叫先決條件。在系統或服務發生異常的時候,需要回過頭來了解一下這個系統有哪些依賴關係,有哪些先決的條件,這些條件是不是之前是存在和正常的,現在條件不滿足了,所以發生了一些故障。
比如說摩托車在行駛過程中不走了,是不是沒油了?在一些非常成熟或產品化做得非常好的產品,比如說iphone 手機,它的使用手冊裡會列出正常運作的條件,以及要遠離哪些條件,比如高溫、低溫等,會做一個非常明確的定義。
但是在一些自研系統的維運過程中,這些系統往往文檔和說明並不是特別完善,所以先決條件需要根據系統的異常或者問題去做一些排查,另外也需要跟研發人員,或者是設計人員做一些深入的溝通,找到系統的一些先決條件,然後作為一個排查的線索去進行排查。這是第一個很基本的 troubleshooting 方法。每個人都解決過類似的問題,大多數的問題往往是很普通的原因造成的,而我們的經驗和直覺可以幫助解決。
最精簡系統#我們進入下一個問題解決的策略,大家都有裝過電腦的經驗嗎?一套電腦系統有很多零件,例如 CPU、記憶體、電源、機殼、顯示器、光碟機、滑鼠、音響、網路卡,等等。我們在裝機的時候並不是需要一次全部裝好,往往是把電源,主機板、CPU、記憶體裝好後,就可以試試這套系統能不能正常運作。如果這個系統能亮,表示這套系統最重要的零件是 OK 的。所以從troubleshooting 的角度,在做故障定位的時候,可以嘗試把一個非常複雜,功能和組件非常多的系統,精簡到最基本的系統,測試沒問題後,再一件一件把其他的系統組件加進來,這樣就可以事半功倍的把這個問題找到並解決掉。
恢復預設狀態 / 重啟另外一個跟第一種場景類似,系統經過長時間的運行,工作狀態不正常了,一般要怎麼解決呢?重啟一下。在我之前的前東家有一條不成文的規則,重要的系統在節假日前做排查,如果超過多少天沒有重啟,就會安排一次計劃中的重啟,來避免系統長時間的運行導致的異常的狀態。
所以可以用一些重啟的方案來把故障恢復到系統初始的狀態,把這個故障解決掉,這是一個非常強有力的一個故障解決方法。當然,重啟前需要考慮預期外的後果,例如可能啟動失敗會導致更差的後果。除了重啟,還可以重新安裝 / 重建系統,從預設或正常工作的系統複製一個副本出來。
一次更換且只更換其中一個組件當我們透過一些分析定位發現,故障可能發生在某個子系統或某幾個模組之內,有什麼辦法能夠很快的定位問題呢?可以嘗試去更換其中一個零件,然後測試下。使用這個方法,可以透過排查一步一步精確定位到故障點,然後去解決。這為我們以後遇到類似的問題提供了寶貴的經驗。在使用這個方法的過程中,需要注意,每次只更換一個組件,測試完成後如果需要更換其他部件,首先要講之前更改的恢復原狀。否則可能會因為變更導致出現多個問題,影響和乾擾問題的解決。
寫在最後troubleshooting 既是一門科學,也是藝術。除此之外,還可以嘗試復現問題、更改啟動和配置順序等等方法,在實踐中根據時間、資源、場景情況和限制,選擇最適合的策略,完成 troubleshooting。 Happy troubleshooting!
作者介紹滕傳永,美團雲端架構師。先後在百度和 eBay 從事系統和服務維運工作,工作涉及基礎服務維,大規模系統部署和最佳化,虛擬化等。 12 年加入美團,負責維運工作,主要集中在基礎服務維,資料中心及網路建設,雲端運算環境建設及維運等方面。
文章來自微信公眾號:高效率開發維運
以上是技術人必備技能:解決問題方法論-troubleshooting的詳細內容。更多資訊請關注PHP中文網其他相關文章!