3步玩轉鏈路追蹤,快速排查微服務各類問題!

在現有的微服務體系架構下,一套大型軟件系統可能涵蓋幾十種服務單元,各服務之間的調用錯綜複雜,可能1個客戶請求須要調用N個服務才能造成業務閉環。遇到 bug 時,開發人員不得不對各服務日誌一一進行排查,整個過程耗時耗力、效率低下,甚至可能所以致使系統長時間處於不可用狀態,直接形成一大筆業務損失。

針對這種現象,谷歌開發了開源 Dapper 鏈路追蹤組件,而且在2010年發表了論文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure 大規模分佈式系統的基礎跟蹤設施》。前端

連接:
https://static.googleusercont...python

這篇文章自發表後,一直是業內實現鏈路追蹤的標杆和理論基礎,具備很是大的參考價值。像你們熟知的鏈路追蹤組件—— Uber 的 Jeager,Twitter 的 Zipkin,阿里的 Eagleeye(鷹眼),Skywalking 與 ddtrace 等,都是基於這篇論文開發出來的。git

簡單來講,鏈路追蹤即經過跟蹤一個請求從發佈到被響應的整個過程,瞭解到每一個請求的詳細通過,好比有哪些服務參與,參與順序是什麼,各服務調用了多少次數據庫等。如此一來,當出現異常問題,開發就能快速定位問題根源,快速解決問題。github

鏈路追蹤優勢:數據庫

  • 服務關係:能夠很清晰地展示服務間的依賴或者調用關係;
  • 故障定位:在系統出現故障時候能夠快速高效定位問題;
  • 系統監測:在系統服務性能變差時能夠及時發現,提早採起預防措施;
  • 系統瓶頸分析與優化:基於全鏈路分析,很容易找出系統性能瓶頸點並做出優化改進,驗證優化措施是否奏效。

鏈路追蹤技術受到市場的熱烈歡迎,相關監測產品層出不窮,但因爲技術細節的實現各有特色(好比數據編碼格式不一樣( json/protobuf/thrift 等)、數據傳輸方式不一樣(http/udp/rpc 等)、相同語言 SDK 的 API 不一樣等),各產品、各客戶端的互操做性不好。爲解決這個問題,OpenTracing 出現了。OpenTracing 制定了一套無關平臺、無關廠商的鏈路追蹤API規範,只要每一個實現鏈路追蹤技術的廠家都遵照規範,當須要從一種技術實現切換到另外一種時,並不會產生特別多的額外工做量。開發者只需在初始化部分進行少許配置修改便可。json

OpenTracing GitHub 網址:
https://github.com/opentracing架構

OpenTracing 的出現減小了開發編碼方面的工做量,然而隨着雲計算技術不斷髮展,企業系統、產品結構不斷調整,企業仍然沒法擺脫因爲數據格式轉換、存儲方式、前端UI界面風格等不一樣,而致使的bug難定位、數據難監測的發展困境。app

那如今有沒有一款產品,既能兼容市面上主流的鏈路追蹤技術,又能多維度分析與展現數據?分佈式

3步玩轉鏈路追蹤,輕鬆定位Bug!

來自國內的 DataFlux ——一站式數據監測雲平臺,不但能夠兼容 Jeager、Zipkin、Skywalking 與 ddtrace等主流技術,並且能幫助用戶專一於業務開發,更直觀、更專業、更高效地展現數據監測分析結果。微服務

在 DataFlux 上咱們能夠按如下三個步驟進行分佈式鏈路追蹤:

  • 在 Datakit 開啓鏈路數據採集;
  • 開啓須要監控的應用(有的須要代碼埋點這具體取決於使用何種鏈路追蹤技術);
  • 在 DataFlux 前端頁面查看鏈路數據。

DataKit 開啓鏈路數據採集

在 DataFlux 中有專用於各類數據採集的工具—— DataKit。針對鏈路數據,它提供了四種類型的採集器分別對應不一樣技術實現:traceJaeger、traceZipkin、traceSkywalking 和 ddtrace。這裏以 ddtrace 爲例,其不須要代碼埋點,咱們介紹下它在 Linux 平臺的基本使用。

《3分鐘快速安裝 DataKit 採集器》
https://help.dataflux.cn/doc/...

安裝好 DataKit 後,在 /usr/local/cloudcare/dataflux/datakit/conf.d/ddtrace/ 目錄下,複製一份 ddtrace 鏈路數據採集配置。

$ sudo cp ddtrace.conf.sample ddtrace.conf

編輯 ddtrace.conf:

#[inputs.ddtrace]
#       path = "/v0.4/traces"                # ddtrace 鏈路數據接收路徑,默認與ddtrace官方定義的路徑相同
#       [inputs.ddtrace.tags]                # 自定義標籤組
#               tag1 = "tag1"                # 自定義標籤1
#               tag2 = "tag2"                # 自定義標籤2
#               tag3 = "tag3"                # 自定義標籤3
#               env  = "your_env_name"       # 設置環境名
#               version  = "your_version"    # 設置版本信息

至此,鏈路數據採集就配置好了,從新啓動一下 DataKit 的便可。
https://help.dataflux.cn/doc/...

開啓須要監控的應用

經過 ddtarce 採集數據須要根據當前項目開發語言參考對應幫助文檔 Datadog Tracing。

這裏以 Python 應用做爲示範:

第一步,安裝相關依賴包

pip install ddtrace

第二步,在應用初始化時設置上報地址

import os
from ddtrace import tracer

#經過環境變量設置服務名os.environ["DD_SERVICE"] = "your_service_name"

#經過環境變量設置項目名,環境名,版本號
os.environ["DD_TAGS"] = "project:your_project_name,env=test,version=v1"

#設置鏈路數據datakit接收地址,
tracer.configure(
    # datakit IP 地址` 
    hostname="127.0.0.1",

    # datakit http 服務端口號
    port="9529",
)

第三步,開啓應用

ddtrace-run python your_app.py

若經過 gunicorn 運行,須要在應用初始化時進行以下配置,不然會產生相同的 traceID

patch(gevent=True)

其餘語言應用與此相似,配置成功後約 1-2 分鐘便可在 DataFlux Studio 的 「鏈路追蹤」中查看相關的鏈路數據。

除了在應用初始化時設置項目名,環境名以及版本號外,還可經過以下兩種方式設置:

  • 經過環境變量設置
export DD_TAGS="project:your_project_name,env=test,version=v1"
  • 經過採集器自定義標籤設置
[inputs.ddtrace]
       path = "/v0.4/traces" # ddtrace 鏈路數據接收路徑,默認與ddtrace官方定義的路徑相同
       [inputs.ddtrace.tags] # 自定義標籤組
               project = "your_project_name" # 設置項目名
               env = "your_env_name" # 設置環境名
               version = "your_version" # 設置版本信息`

查看鏈路數據採集

接下來,咱們就能在 DataFlux 平臺看到對應的鏈路數據了:
每一個服務相關統計信息:

image

某次調用詳細信息:

image

服務之間的調用關係:

image

隨着科技的普及與發展,鏈路追蹤技術將直接對企業或我的的系統異常、業務bug等問題的解決產生重大影響,也將成爲愈來愈多的企業或我的開發者的發展共識。

相關文章
相關標籤/搜索