天天看點

釋放Trace的價值-SLS OpenTelemetry新功能直擊痛點前言Trace的價值所在深入OpenTelemetry規範SLS專為OpenTelemetry定制的Trace方案SLS OpenTelemetry Trace新功能總結參考

前言

SLS在2021年4月份正式釋出了對OpenTelemetry Trace 1.0版本的支援,完全相容OpenTelemetry Trace1.0版本的所有字段,提供了Trace顯示、分析、拓撲展示等功能(相關文章可以參考

SLS Trace介紹

)。在功能釋出後,衆多客戶開始接入SLS Trace并深度使用,其中對我們也提出來非常多的建議和需求。從中我們提取出了呼聲最高的一些功能和優化點,加入到了SLS的Trace方案1.1版本中。

Trace的價值所在

釋放Trace的價值-SLS OpenTelemetry新功能直擊痛點前言Trace的價值所在深入OpenTelemetry規範SLS專為OpenTelemetry定制的Trace方案SLS OpenTelemetry Trace新功能總結參考

在《

10個特性:這才是你需要的Trace方案

》中,我們詳細介紹了為什麼需要Trace,以及Trace的功能。Trace的第一訴求是解決分布式/複雜系統(尤其是微服務系統)的問題排查,通過跨系統的調用追蹤,找到具體是哪個請求/子產品導緻了錯誤/延遲上升。圍繞着這點來展開,其實有非常多的工作,不僅僅是能夠根據某個TraceID把鍊路串起來那麼簡單。這裡還包括:

  1. 詳細的記錄When、Where、What資訊,否則最多隻能知道某個調用出現了問題,而不知道是因為執行了什麼操作導緻的問題;
  2. 作為DevOps工程師、SRE、後端負責人、TL,最先關注的是系統整體的概況,是以Trace的依賴拓撲功能至關重要,需要能夠在依賴中盡可能多的計算并展示出系統的概要資訊;
  3. 具備快速分析的能力,通過過濾、排序、統計等方式,縮小排查範圍,然後再根據TraceID資訊去聚焦到某個調用上;
  4. TraceID通常都記錄在日志中,在日志中找到錯誤後,檢視Trace詳情需要跳轉到另一個系統中,日志和Trace盡可能需要更好的結合以避免體驗的割裂

深入OpenTelemetry規範

在涉及到分布式系統開發的時候,互相之間的調用規範極其重要,大家都要遵循統一的調用協定,例如HTTP、GRPC、Dubbo等。同樣Trace也需要統一的規範才能夠保證在不同的系統中都可以正常的傳播。Trace規範最開始的代表以OpenTracing和OpenCensus為主,後來為了全球化的統一,OpenTracing和OpenCensus已經合并成為了OpenTelemetry,目前也成為了Trace全球事實上的标準規範。

釋放Trace的價值-SLS OpenTelemetry新功能直擊痛點前言Trace的價值所在深入OpenTelemetry規範SLS專為OpenTelemetry定制的Trace方案SLS OpenTelemetry Trace新功能總結參考

而OpenTelemetry标準帶來的好處不僅僅是解決各個系統之間的Trace互通問題,還有統一的SDK、自動化埋點方案、資料采集、Traces/Metrics/Logs互通等等好處。感興趣的同學可以移步:

OpenTelemetry介紹

相比OpenTracing而言,OpenTelemetry協定在When、What、Where的定義上更加完備,尤其是What和Where。

  1. What:調用執行中具體的操作和相關屬性資訊,在OpenTelemetry叫做“ attribute semantic conventions ”,目前協定本身已經定義了包括HTTP、RPC、資料庫、消息隊列、FAAS、Exception等資訊。例如最典型的資料庫調用,規定了資料庫的類型、連接配接位址、DB名、Table名、使用者名、執行Statement等,如果在調用資料庫時,Trace中記錄了這些資訊,那Trace系統就可以自動了解出你是調用了某個資料庫。
  2. Where:調用産生時所在的執行個體資訊,在OpenTelemetry中叫做“ resource semantic conventions ”,目前協定定義了包括執行個體的服務名、調用名、主機名、IP等基礎資訊,也包括K8s Pod、Namespace、Service等雲原生資訊,還包括部署的環境、軟體版本号、程序、Runtime(語言)、OS、Container、雲環境等。有這些資訊後,就能夠使用分析、統計的方式,來對比到底是哪個部署環境、軟體版本号、OS版本、主機、營運商的集合出現了問題,快速縮小排查範圍。

SLS專為OpenTelemetry定制的Trace方案

SLS的Trace服務并不是自己從頭到尾造輪子,上篇文章《

》中我們也講到,Trace必須要遵循統一的規範,OpenTelemetry是目前全球公認的Trace标準化方案,而且OpenTelemetry本身也相容了Jaeger、Zipkin等OpenTracing協定、OpenCensus等方案,是以我們并不會獨立再造一個協定,而是直接以OpenTelemetry為SLS的Trace标準協定去提供服務。

釋放Trace的價值-SLS OpenTelemetry新功能直擊痛點前言Trace的價值所在深入OpenTelemetry規範SLS專為OpenTelemetry定制的Trace方案SLS OpenTelemetry Trace新功能總結參考

是以可以說SLS的Trace服務更像是對OpenTelemetry的補充,OpenTelemetry定義了Traces規範、各種SDK實作以及資料的采集Agent,而SLS則支援OpenTelemetry Traces資料的存儲、分析、可視化、告警以及後續的AIOps等能力。

SLS針對OpenTelemetry協定的可視化做了非常多的工作,就拿其中Trace詳情展示的功能而言,其中詳細展示了Span中When、Where、What資訊,而且盡可能在一個頁面上展示更多有效的資訊。

釋放Trace的價值-SLS OpenTelemetry新功能直擊痛點前言Trace的價值所在深入OpenTelemetry規範SLS專為OpenTelemetry定制的Trace方案SLS OpenTelemetry Trace新功能總結參考

例如詳情資訊中,除了展示執行時間跨度、Span所屬服務、調用外,還包括Span的調用類型、Span下面的子Span、用顔色區分Service、圖示化的方式顯示Span的類型資訊等。通過這種方式,我們可以很容易看到:

  1. 哪些Span是資料庫、消息隊列的調用
  2. 哪個Span執行出現錯誤
  3. 哪個Span執行時間長,尤其需要關注本身執行時間(實線部分)很長的Span
釋放Trace的價值-SLS OpenTelemetry新功能直擊痛點前言Trace的價值所在深入OpenTelemetry規範SLS專為OpenTelemetry定制的Trace方案SLS OpenTelemetry Trace新功能總結參考

SLS OpenTelemetry Trace新功能

此次帶來的Trace新功能,主要也是基于OpenTelemetry标準以及使用者呼聲,包括:

  1. Trace分類功能:基于OpenTelemetry标準,自動對Trace進行分類
  2. 鍊路拓撲優化:更加直覺的拓撲顯示,支援切換不同布局、顯示PXX延遲
  3. Trace品質分析:通過多種檢查項來檢測Trace資料是否符合規範,指導如何提高Trace品質
  4. 日志關聯跳轉Trace:從日志查詢的結果,可以直接跳轉到Trace詳情

Trace分類

釋放Trace的價值-SLS OpenTelemetry新功能直擊痛點前言Trace的價值所在深入OpenTelemetry規範SLS專為OpenTelemetry定制的Trace方案SLS OpenTelemetry Trace新功能總結參考

上圖是一個非常典型的應用架構,用戶端通過HTTP請求後端,後端部分有一個Frontend來接收用戶端的請求,然後根據不同的請求類型執行對應的邏輯,調用其他的系統來完成類似下單、登入、交易等功能。 整個系統可能會涉及非常多的團隊/小組進行配合,而Trace也需要滿足各類不同的需求,例如:

  1. TL、SRE、用戶端等同學,更加關注的是Trace入口的各類名額(成功率、QPS、延遲),針對Trace入口排查問題
  2. DBA同學主要關注各個服務調用資料庫相關的Span
  3. 子產品的開發同學在排查問題的時候,首先通過Server類型的資料找到出現問題的接口,然後再通過Client類型排查是不是因為調用下遊的服務/DB出現了問題
  4. 在進行版本釋出的時候,通過過濾不同的版本号來檢視新老版本在錯誤、延遲等核心名額上是否存在變化
釋放Trace的價值-SLS OpenTelemetry新功能直擊痛點前言Trace的價值所在深入OpenTelemetry規範SLS專為OpenTelemetry定制的Trace方案SLS OpenTelemetry Trace新功能總結參考

為了更好的通過各種分類快速定位各類不同人員需要關心的Trace,SLS基于OpenTelemetry标準内置了多種分類資訊,包括Trace入口、Trace類型、版本号、部署環境、調用類型等,可以在Trace概覽頁和Trace分析的查詢框中直接使用。例如下述是Trace概覽頁中,隻關注類型為Server,版本為1.0.0的調用資訊。

釋放Trace的價值-SLS OpenTelemetry新功能直擊痛點前言Trace的價值所在深入OpenTelemetry規範SLS專為OpenTelemetry定制的Trace方案SLS OpenTelemetry Trace新功能總結參考
釋放Trace的價值-SLS OpenTelemetry新功能直擊痛點前言Trace的價值所在深入OpenTelemetry規範SLS專為OpenTelemetry定制的Trace方案SLS OpenTelemetry Trace新功能總結參考

Trace拓撲優化

拓撲是Trace中非常重要的部分,通過拓撲可以快速了解系統整體的品質、定位有問題的服務。在此次優化中,我們着重優化了Trace拓撲,包括:

  1. 顯示優化,預設展示QPS、延遲、調用次數等資訊,對于出現錯誤的調用标紅并顯示錯誤率
  2. 優化拓撲布局,在服務很多的情況也能保持較好的布局效果,且支援兩種布局切換
  3. 調用關系中的名額增加了PXX延遲,便于監控使用者體驗相關的延遲名額
釋放Trace的價值-SLS OpenTelemetry新功能直擊痛點前言Trace的價值所在深入OpenTelemetry規範SLS專為OpenTelemetry定制的Trace方案SLS OpenTelemetry Trace新功能總結參考

Trace品質分析

Trace能夠實作的效果和Trace埋點的品質息息相關,例如當排查到是下遊問題時發現下遊沒有記錄Trace、當排查到某個Span時發現Span沒有記錄詳細的屬性資訊。是以為了提高問題排查和定位的效率,我們添加了一個Trace品質分析子產品,協助大家分析Trace的品質并給出一些高品質Trace埋點的建議。

目前内置了6大類12小類的檢查項(未來的檢查項還會逐漸豐富),每個檢查會給出檢查内容以及通過率,最終給出一個整體得分,相對而言得分如果能在70以上就已經非常優秀了。

釋放Trace的價值-SLS OpenTelemetry新功能直擊痛點前言Trace的價值所在深入OpenTelemetry規範SLS專為OpenTelemetry定制的Trace方案SLS OpenTelemetry Trace新功能總結參考
釋放Trace的價值-SLS OpenTelemetry新功能直擊痛點前言Trace的價值所在深入OpenTelemetry規範SLS專為OpenTelemetry定制的Trace方案SLS OpenTelemetry Trace新功能總結參考

日志關聯跳轉Trace

在實際問題排查中,通常都要結合使用日志、監控、Trace多種資料。如果多種資料存儲在不同系統中,互相關聯很難做到。目前SLS已經能夠原生支援日志(日志庫)、監控(Metrics,時序庫)、Trace(OpenTelemetry Trace服務)所有資料的存儲和分析。

這次的更新中,已經支援配置日志跳轉到Trace系統。如果日志中有TraceID、SpanID字段,且Trace已經儲存到SLS的Trace服務中,可以通過日志跳轉的進階配置選擇跳轉到指定的Trace執行個體,直接檢視Trace詳情。

  • 注:Trace反查日志、Trace與監控名額關聯等可觀察性資料關聯的功能正在開發中,很快就會和大家見面^_^。
釋放Trace的價值-SLS OpenTelemetry新功能直擊痛點前言Trace的價值所在深入OpenTelemetry規範SLS專為OpenTelemetry定制的Trace方案SLS OpenTelemetry Trace新功能總結參考

總結

SLS的Trace功能核心還是去和OpenTelemetry标準(包括OpenTracing、OpenCensus、SkyWalking等)一起配合使用,SLS提供更加快捷接入、使用簡單、無需運維的附加功能。本次方案的更新還是在做深Trace的核心功能,滿足各種不同場景的訴求。後續也會根據大家的回報逐漸更新,可聯系微信:davidzhang-zc。

  • Trace新釋出的相關Demo可以登入

對我們工作感興趣的,可以通過如下方式了解更多,謝謝關注:)

參考

  1. https://developer.aliyun.com/article/783270
  2. https://zhuanlan.zhihu.com/p/366270515
  3. https://developer.aliyun.com/article/766070
  4. https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/README.md
  5. https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification/resource/semantic_conventions