陳根




關鍵詞:分布式系統;可觀測性;可視化;鏈路追蹤
1概述
隨著社會生產力的進步,社會分工細化,新的職業出現,新的商業模式誕生,為滿足人們的生產生活需求,信息系統的建設方式和架構也在與時俱進,信息系統處理越來越多的數據,處理速度也越來越快,同時要滿足頻繁多變的業務需求,分布式系統逐步浮出水面。本文不討論分布式系統建設方案,重點就分布式系統的可觀測建設展開論述。
2可觀測基礎能力建設
分布式系統不同于傳統的單體系統或者MIS系統,由于其業務量龐大、系統架構復雜、組件關聯密切,為運維帶來極大挑戰。當出現異常時,告警能力、故障根源分析判斷能力、故障快速處置能力就顯得非常重要,其中基礎能力從監控數據的采集、匯聚、異常監測和告警等階段進行闡述。
2.1采集能力
分布式系統的模型建設是先決條件,從分布式系統的特點來講,往往采用容器化部署,使用Kubernetes作為容器編排工具,可以按照Deployment-Pod-container的結構來設計。模型建設后,通過各類數據采集器獲取模型實例的運行狀態和配置數據,此時需按照統一的規范來完成。數據采集分為3種類型,分別是指標數據采集、日志數據采集、其他類數據采集。
2.1.1指標數據采集
對于操作系統以及運行在操作系統上的數據庫、中間件等基礎軟件,通常采集其CPU、內存、文件系統、磁盤10、網絡吞吐量等使用情況數據。操作系統、數據庫等IT基礎設施的指標建議通過操作系統文件如/proc/stat等采集,避免使用操作系統命令,以減少對源系統的資源消耗。
對于應用系統來說,根據Google SRE指南,包括TPS、成功率、響應時間、交易量、錯誤率等黃金指標,數字化模型建設好后的各個模型實例都可以參考這些指標,采用key-value鍵值對方式以json格式上報。
采集容器指標可通過多種框架實現.如sidecar模式或demonset模式,也有多種開源框架支持,如Istio等,一般采用Prometheus進行容器指標數據的采集。
應用指標也有2種實現方式,一是通過應用系統計算好指標,通過API和Socket供數。二是監控系統采集應用輸出的日志經過約定的規則計算。指標數據需覆蓋各地域、站點、單元(租戶)、集群、容器等維度,采集數據應攜帶必要的元數據信息,包括站點、單兀、IP、應用ID、集群ID等,以供后續的匯聚計算和故障定位使用。
2.1.2日志數據采集
日志包括普通文本日志、操作系統日志、Tracing日志等,利用文件采集器讀取日志數據,逐行讀取。Tracing日志也可以通過寫臨時文件的方式進行采集,最好是采用遠程日志方式,類似指標采集的方案供數、時效性更高,如采用log4j的RemoteLogging功能,配置SocketAppender寫到遠程服務器。
2.1.3其他數據采集
以上2種模式是主動數據采集,為了滿足其他場景需要,采集框架應該建立通用數據上報接口供其他應用或者組件調用。分布式系統的應用與組件應提供可用性探測接口,用于監測其可用性。
以上3種采集功能建設的同時,還應關注非功能性要求,以降低對源系統或者組件的影響。采集器需具備熱加載能力,其行為可被靈活定義和配置,包括日志路徑、采集頻率、數據報送發送頻率等,同時控制對CPU、網絡IO等資源的消耗。采集器應具備限流能力,流量過大應進行限流,避免影響源應用,可以設置一定的采樣頻率(50%和10%等),以降低網絡帶寬消耗,不能因為采集器異?;蛘邤祿溌樊惓;蛘吡髁勘l而影響源端應用和業務。采集數據上報使用星型結構,如圖1所示,葉子節點部署在被采集服務器上,匯聚節點負責集中所轄的葉子節點的數據,上報至核心節點進行匯總計算和存儲。匯聚節點支持橫向擴展,采集器與匯聚節點建立控制通信機制以感知匯聚節點的動態變化,靈活選擇需要上報的匯聚節點。可借助ribbon組件或者自研算法實現負載均衡策略。
2.2匯聚計算和異常監測
數據采集到匯聚節點后,根據不同數據類型采用不同計算法方法進行異常監測和計算。指標數據較規整,尋找異常點比較方便,適合直接進行程序計算,使用Java,Python,Golang等都可以對其進行簡單編碼、實現流式計算模式。同時,也能對接通用算法,如單指標異常監測、基線算法等。以計算CPU使用率是否超過閾值為例,程序開辟隊列保存接收到的KV鍵值對(Tx為采集間隔),T1時刻讀取隊列中的Ⅳ個數值來計算平均值、峰值、中位數等,T2日寸刻再讀取隊列中的Ⅳ個數字進行計算。T1,T2,N(滑動窗口)可根據應用系統的業務特點、交易量等設定,』7v越小越靈敏,越大越遲鈍。如果是聯機系統,適當減少T1,T2間隔,縮小Ⅳ。當T1*N*T2時,步進式增量計算,每次計算的數據都是新鮮數據。具體如圖2所示。
以上內容也可以采用通用的開源解決方案(如Zabbix,Prometheus等)實現。
除了直接計算,對于時效性有一定容忍度的指標,如數據庫表空間、業務序號、當日累計交易量等,可引入趨勢預測算法來計算,以獲得更好的監控表現,進而提前發現異常,及日寸介入處置。
聯機系統監控往往和業務模式有很大關系,參與交易的角色和渠道等因素都屬于監控的范圍,因業務需要可設計多維度靈活可配置的監控模型來支持。通??梢允褂靡韵?種方案。
2.2.1預置模型的設計和實現
對于每筆交易,根據交易要素拆分成多個KV鍵值對,交易的成功失敗結果也保存到每個KV鍵值對。用戶根據實際需要,在管理頁面端配置需要監控的交易角色、渠道等交易因素(維度),監控程序按照配置統計這些因素組成的維度的交易量、成功率等。
比如,配置A,B,C,D四個維度作為監控項,監控程序對每筆交易的A,B,C,D四個維度都進行統計,形成統計結果KV鍵值對,Key可以設置為A,B,C,D,根據不同取值統計匯總,并按照一定的時間周期判斷是否超閾值,進而產生告警。設計維度配置時,按照一定的邏輯順序組合,四因素的Key值緩存在內存中,以快速匹配,進而提升計算效率。具體如圖3所示。
2.2.2動態計算模型的設計和實現
相較于預置模型,動態計算就更復雜。對交易做降維處理,減少計算量。對于N維的交易來講,全維度動態計算是海量的,也帶來一些沒有價值的估算。降維計算有助于減少干擾,聚焦在有意義的數據上。具體流程如下。
(1)計算Ⅳ維中所有一維數據的指標(TPS、成功率、響應時間、交易量)。
(2)從中尋找指標最差的維度Dx。
(3)以維度Dx為基點,統計其他參與交易的角色指標,并找出可疑組合。
(4)列出組合供用戶選擇。
(5)告警收斂。
往往一個異常會產生多個報警,這時需要借助一些收斂算法壓縮告警量,以減少干擾,快速定位問題?;贑MDB的關聯關系,將同一個CI的告警歸集到一個主要告警上,同時將與之關聯的上游CI告警進行關聯,以“組告警”的方式呈現給用戶。在IT基礎設施發生故障時,這種收斂算法能起到很好的效果。以某臺物理機故障為例,監控系統產生諸多告警:硬件管理平臺監測到硬件故障產生的告警、連通性監測發現物理服務器不可達告警、虛擬化平臺或者容器管理平臺發現虛擬機宕機或者容器下線的告警、分布式系統自身的服務調用發現某服務不可用的告警、交易監控系統發現瞬時的交易成功率下降后者交易響應時間變長的告警。這些告警都和物理機異常相關。告警收斂算法設定一定的時間(因分布式系統對基礎設施異常的敏感度不同,通過測試可以得出這個值),如3分鐘內,那么相關的告警都可以收斂到此物理服務器宕機的告警上,前提是在CMDB中建立相關的關系,即物理機與虛擬化服務器的關系、物理機與容器的關系、容器與邏輯服務的關系、交易和邏輯服務的關系(通過鏈路日志關聯)[1]。
經過測算,此類收斂模型的有效率可達50%以上,大大降低了對信息的干擾,并可在可視化圖表上直接顯示異常點。
在Tracing日志中根據Tracingid形成鏈路,相同鏈路產生的告警也可以歸集到一起,并結合CMDB關聯到CI上,以收斂到較小的范圍。
3可視化能力建設
從分布式系統采集的運行數據,經過采集匯聚和異常監測計算,得到了分布式系統的運行狀態數據以及可能的異常點,通過系統整合和集成,建立分層次、縱向關聯的多視角觀測平臺,集中展示分布式系統的運行信息,從多個維度建立可視化展示配置視圖、關注性能的指標視圖、排查分析的日志視圖以及鏈路視圖等。具體如圖4所示。
配置視圖。用于展示分布式系統的配置數據及關聯關系,包括服務器與操作系統配置、應用與容器、分布式數據庫以及其他組件等。
指標視圖。用于展示分布式系統的應用及依賴服務/組件的指標類數據,指標視圖提供固定格式的數據,通過定制儀表盤方式實現個性化changing展示。
日志視圖和鏈路視圖。用于展示分布式系統的文本日志,包括系統日志、應用日志、數據庫日志,以及相關的服務與組件的文本日志,提供常規的基于時間、節點、文件名、關鍵字等條件的搜索功能,并提供基于spl語法的高級查詢功能。通過日志時間,所屬的文件、進程、容器等與鏈路日志進行關聯,以查詢tracelD的單筆鏈路數據、指定時間和節點范圍的鏈路數據清單[2]。
3.1全局健康視圖
將分布式系統的SLA設定核心監控指標作為全局健康視圖的主要展示數據,健康視圖簡明扼要地顯示系統的狀態,其具有高度的概括性,如全局交易成功率、資源可用率、全局交易響應時間等,若指標出現異常,則標記為紅色,并結合其他的視圖進行下鉆分析,找到引發異常的根源。
可建立“應用全局性能指標”,以應用為中心,將Tracing,Metric,Log多維數據進行融合,從而基于業務視角,統一性能評價標準,主動發現性能瓶頸、快速感知故障、高效故障恢復,保障應用系統連續穩定。
3.2部署架構視圖
綜合性視圖,將IT基礎設施到分布式系統的各個組件進行全面展示。構建此視圖時,可以自底向上展示網絡、服務器、容器、邏輯服務、交易的數據,每個節點可顯示更為詳細的具體運行數據。當出現故障時,部署架構視圖以紅、橙、黃等顏色進行警示,打開故障點后即可進入故障排查視圖。
3.3故障排查視圖
直接顯示故障內容,一般是告警或者收斂后的組合告警,視圖展示關聯該故障節點的交易運行情況和IT基礎設施的情況,以及鏈路視圖等,可根據展示的內容和故障染色等進一步打開故障點以分析故障。
分布式系統可觀測性建設是一項系統性、綜合性工程,其核心在于采集和匯聚計算上,利用成熟的異常監測算法可以定位到一些故障點,結合分布式系統建模以及告警收斂算法,將異常點與應用、IT基礎設施的運行日志關聯起來.可有效幫助開發和運維人員全面掌握生產運行信息,快速定位故障和解決問題,從而確保分布式系統高效穩定運行。