分佈式系統調用鏈監控
- 應用架構由集中式向分佈式演進後,整個調用關係變得複雜。
- 分佈式架構由複雜且較大規模集羣構成,各個應用之間至關獨立,可能由不一樣團隊、不一樣語言實現。
- 系統一個完整的調用過程可能橫跨多個服務及數據中心。
- 複雜的調用致使系統出問題後難以定位問題。
- 沒法準確知道總體系統性能及運行狀況。
全鏈路性能監控
一個請求完整的調用鏈可能以下圖,通過多個系統服務,調用關係複雜。javascript
期間咱們會關注各個調用的各項性能指標,好比吞吐量(TPS)、響應時間及錯誤記錄等。html
- 吞吐量,根據拓撲可相應計算組件、平臺、物理設備的實時吞吐量。
- 響應時間,包括總體調用的響應時間和各個服務的響應時間等。
- 錯誤記錄,根據服務返回統計單位時間異常次數。
全鏈路性能監控從總體維度到局部維度展現各項指標,將跨應用的全部調用鏈性能信息集中展示,可方便度量總體和局部性能,而且方便找到故障產生的源頭,生產上可極大縮短故障排除時間。前端
Google Dapper
系統整個調用鏈java
- 當用戶發起一個請求時,首先到達前端A服務,而後分別對B服務和C服務進行RPC調用;
- B服務處理完給A作出響應,可是C服務還須要和後端的D服務和E服務交互以後再返還給A服務,最後由A服務來響應用戶的請求;
對整個調用過程的追蹤後端
- 請求到來生成一個全局TraceID,經過TraceID能夠串聯起整個調用鏈,一個TraceID表明一次請求。
- 除了TraceID外,還須要SpanID用於記錄調用父子關係。每一個服務會記錄下parent id和span id,經過他們能夠組織一次完整調用鏈的父子關係。
- 一個沒有parent id的span成爲root span,能夠當作調用鏈入口。
- 全部這些ID可用全局惟一的64位整數表示;
- 整個調用過程當中每一個請求都要透傳TraceID和SpanID。
- 每一個服務將該次請求附帶的TraceID和附帶的SpanID做爲parent id記錄下,而且將本身生成的SpanID也記錄下。
- 要查看某次完整的調用則只要根據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:架構
- 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 運維部門業務價值。
- 快速定位代碼性能問題,協助開發人員持續性的優化代碼;
- 協助開發人員進行白盒測試,縮短系統上線穩按期。
一些效果圖
====廣告時間,可直接跳過====分佈式
鄙人的新書《Tomcat內核設計剖析》已經在京東預售了,有須要的朋友能夠到 item.jd.com/12185360.ht… 進行預約。感謝各位朋友。
=========================
歡迎關注: