服務端問題排查對開發而言是屢見不鮮,問題並不可怕但要花大量時間去處理;另外一方面故障的快速解決相當重要。redis
目前問題排查最大的障礙是什麼呢?咱們認爲有如下幾個緣由:安全
實際工做中的排查思路並不是無跡可尋,排查思路和手段能夠沉澱出一套經驗模型。架構
下面是個人訂單列表的簡單抽象,其執行過程是先拿到我買到的訂單列表。訂單列表中又用到了賣家,商品以及店鋪信息服務,每一個服務又關聯着單次請求中提供服務對應的主機信息。併發
以線上常見的服務超時爲例,上圖中由於 127.123.12.12 這臺機器出現異常致使商品服務超時,進而致使個人訂單列表服務超時。根據平常中排查思路能夠總結出如下分析範式:性能
上面這種分析範式看起來很簡單清晰,可是它首先面臨着如下問題阿里雲
以上問題本質上是底層數據埋點問題,幸運的是阿里集團完備的數據建設使得這些問題基本都能找到很好的解決方案。有了底層數據支撐再配合上層抽象出來的這樣一套分析模型,設計並實現一套徹底自動化問題定位系統是徹底有可能的。spa
咱們認爲這樣一套問題自動定位的系統必定要知足 4 個目標,這同時也是整個系統的難點所在。插件
圍繞着這4大目標,咱們實現了上面這樣一套完整的定位系統,實現了從告警->定位->快速處理這樣一套完整閉環。自下而上劃分爲 4 個模塊,下面講一下每一個模塊解決的問題以及其難點。線程
數據採集模塊主要負責埋點數據的採集與上報,須要解決兩個問題:設計
採用 SLS+ 自定義插件庫來實現線上流量埋點數據的採集與上報。SLS 是阿里雲研發針對日誌類數據的一站式服務,其生命週期管理( TTL )以及極低的存儲成本能夠很好的解決海量數據帶來的成本問題。
實時計算以數據採集的輸出做爲輸入,負責對數據進行一輪預處理,包括鏈路數據的關聯(請求都有惟一標識,按照標識 group by ),數據清洗(只選取須要的數據)以及事件通知。
當收到事件通知後根據實時計算產出的有效數據進行自動化的分析,輸出問題的發生路徑圖。須要解決:
按照時間窗口對問題發生路徑進行實時聚合,還原問題發生時的現場。將監控,告警和診斷鏈路進行了互通,最大化的縮短從問題發現到結果展示的操做路徑。
系統上線以來經受住了實踐的檢驗,故障以及平常問題的定位效率獲得顯著提高,並得到了穩定性的結果。將平常問題/故障定位時間從10分鐘縮短到 5s 之內,如下是隨機選取的兩個真實 case 。
案例1:閒魚發佈受影響,監控系統發現商品發佈接口成功率下跌發出來告警信息,點擊告警診斷直接跳轉到問題現場,發現是由於安全某個服務錯誤率飆升致使,整個過程不到5s。
案例2: 首頁由於單機問題受到影響,閒魚首頁由於單機gc問題抖動觸發大量告警信息,秒級給出問題發生路徑。根據診斷路徑顯示搜索單機出現大量異常。
目前整個系統主要聚焦服務穩定性相關的問題定位,仍然有許多場景有待覆蓋,信息有待補全,措施有待執行,定位只是其中的一環。最終目的必定是建設問題定位,隔離,降級,與快速恢復這樣一個完整閉環。要想實現這樣一個完整閉環,離不開底層各個子系統的數據建設,核心在於兩點一面的建設:
原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。