全鏈路數據監控

1.分佈式系統調用鏈監控的特點有哪些?
2.什麼是全鏈路性能監控?
3.怎樣做全鏈路性能監控架構?

分佈式系統調用鏈監控

應用架構由集中式向分佈式演進後,整個調用關係變得複雜。
分佈式架構由複雜且較大規模集羣構成,各個應用之間相當獨立,可能由不同團隊、不同語言實現。
系統一個完整的調用過程可能橫跨多個服務及數據中心。
複雜的調用導致系統出問題後難以定位問題。
無法準確知道整體系統性能及運行情況。

全鏈路性能監控

一個請求完整的調用鏈可能如下圖,經過多個系統服務,調用關係複雜。

期間我們會關注各個調用的各項性能指標,比如吞吐量(TPS)、響應時間及錯誤記錄等。

吞吐量,根據拓撲可相應計算組件、平臺、物理設備的實時吞吐量。
響應時間,包括整體調用的響應時間和各個服務的響應時間等。
錯誤記錄,根據服務返回統計單位時間異常次數。

全鏈路性能監控從整體維度到局部維度展示各項指標,將跨應用的所有調用鏈性能信息集中展現,可方便度量整體和局部性能,並且方便找到故障產生的源頭,生產上可極大縮短故障排除時間。

Google Dapper

系統整個調用鏈

  1. 當用戶發起一個請求時,首先到達前端A服務,然後分別對B服務和C服務進行RPC調用;

  2. B服務處理完給A做出響應,但是C服務還需要和後端的D服務和E服務交互之後再返還給A服務,最後由A服務來響應用戶的請求;

對整個調用過程的追蹤

  1. 請求到來生成一個全局TraceID,通過TraceID可以串聯起整個調用鏈,一個TraceID代表一次請求。
  2. 除了TraceID外,還需要SpanID用於記錄調用父子關係。每個服務會記錄下parent id和span id,通過他們可以組織一次完整調用鏈的父子關係。
  3. 一個沒有parent id的span成爲root span,可以看成調用鏈入口。
  4. 所有這些ID可用全局唯一的64位整數表示;
  5. 整個調用過程中每個請求都要透傳TraceID和SpanID。
  6. 每個服務將該次請求附帶的TraceID和附帶的SpanID作爲parent id記錄下,並且將自己生成的SpanID也記錄下。
  7. 要查看某次完整的調用則只要根據TraceID查出所有調用記錄,然後通過parent id和span id組織起整個調用父子關係。

調用鏈監控核心工作

調用鏈數據的生成,對整個調用過程的所有應用進行埋點並輸出日誌。
調用鏈數據採集,對各個應用中的日誌數據進行採集。
調用鏈數據存儲及查詢,對採集到的數據進行存儲,由於日誌數據量一般都很大,不僅要能對其存儲,還需要能提供快速查詢。
指標運算、存儲及查詢,對採集到的日誌數據進行各種指標運算,將運算結果保存起來。
告警功能,提供各種閥值警告功能。

整體架構

  • 通過AGENT生成調用鏈日誌。
  • 通過logstash採集日誌到kafka。
  • kafka負責提供數據給下游消費。
  • storm計算匯聚指標結果並落到es。
  • storm抽取trace數據並落到es,這是爲了提供比較複雜的查詢。比如通過時間維度查詢調用鏈,可以很快查詢出所有符合的traceID,根據這些traceID再去Hbase查數據就快了。
  • logstash將kafka原始數據拉取到hbase中。hbase的rowkey爲traceID,根據traceID查詢是很快的。

AGENT無侵入部署

通過AGENT代理的無侵入式部署,將性能測量與業務邏輯完全分離,可以測量任意類的任意方法的執行時間,這種方式大大提高了採集效率,並且減少運維成本。根據服務跨度主要分爲兩大類AGENT:

服務內AGENT,這種方式是通過Java的agent機制,對服務內部的方法調用層次信息進行數據收集,如方法調用耗時、入參、出參等信息。
跨服務AGENT,這種情況需要對主流RPC框架以插件形式提供無縫支持。並通過提供標準數據規範以適應自定義RPC框架:

Dubbo支持
Rest支持
自定義RPC支持

比如生成的數據格式如下:
{
“hostIp”: “192.168.4.1”,
“instanceName”: “TracingDemo”,
“isEntry”: true,
“errCode”: 0,
“spanId”: “3cbfe7f0-141c-4597-8b15-38d2fb145e01”,
“parentId”: “16a52a9f-e697-45ce-92fb-7395339eae4b”,
“traceId”: “e5549498-60f3-4870-8483-fe26f6d0367b”,
“className”: “dao.impl.ProductDaoImpl”,
“methodName”: “queryProduct”,
“inParam”: “”,
“createTime”: 1448442004537,
“returnTime”: 1448442004537,
“callTime”: 5
}

調用鏈監控好處

準確掌握生產一線應用部署情況;
從調用鏈全流程性能角度,識別對關鍵調用鏈,並進行優化。
提供可追溯的性能數據,量化 IT 運維部門業務價值。
快速定位代碼性能問題,協助開發人員持續性的優化代碼;
協助開發人員進行白盒測試,縮短系統上線穩定期。

發佈了83 篇原創文章 · 獲贊 44 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章