呼叫鏈與日誌的關聯式跟蹤查詢
長假過完,相信無緣支付寶中國錦鯉的你一定已經回來工作了。雖然輕輕鬆鬆與全球免單大禮包失之交臂,但不要喪氣,小編悄悄為你準備了一份祕籍,助你在2018年最後不到三個月的時間裡成功逆襲,斬獲年終獎的大錦鯉! 本月小編將帶大家一起了解UAVStack的呼叫鏈技術,講述呼叫鏈技術的源起、實現、應用以及關鍵技術。好好研習本月的每篇推送,說不定年終獎的錦鯉就是你哦~~~趕快進入正文吧
近年來,Observability一詞開始在監控社群流行。筆者將Observability視為一種理念,一種監控的超集,涵蓋監控、日誌聚合和分散式跟蹤,能夠更加深入地實時觀察系統。本文將就日誌聚合、分散式跟蹤及二者的關聯運用展開說明。
呼叫鏈與日誌聚合的關聯
微服務、雲和容器化架構的出現,改變了我們構建系統的方式。應用程式是分散式的,而且瞬息萬變;底層基礎設施和網路服務愈加健壯。日常系統運維的大部分工作將集中於應用程式層或不同應用程式之間的複雜互動呼叫。
對於複雜的跨系統呼叫,一次請求可能需要後臺幾臺或上百臺節點的支援。此時,單純依靠人力已經很難追蹤到一次請求的完整呼叫流程,而最能反映每次請求處理過程的應該是分散式追蹤呼叫鏈(下文簡稱“呼叫鏈”)。
呼叫鏈著眼於一次請求的完整呼叫流程,當細粒到具體節點時,應用系統自身列印的日誌最能說明當前節點的處理邏輯。
下圖呈現了呼叫鏈和日誌聚合的關聯方式:
呼叫鏈的作用是記錄並彙總展示一次請求所經過的所有節點和關鍵操作,如圖中綠色箭頭,從全域性的層面展示一次請求的完整呼叫流程。
日誌聚合的作用是彙總整理所有節點和系統產生的日誌,併為使用者提供友好有效的查詢能力。
傳統的處理方式往往需要在呼叫鏈和日誌聚合之間反覆切換,即在呼叫鏈上發現問題後,需要切換到日誌聚合,根據特定屬性查詢對應的日誌資訊,排查日誌資訊後再次返回撥用鏈,查詢與日誌資訊關聯的呼叫鏈資訊……如此往返多次。
對於這種經典場景,日誌與呼叫鏈的關聯式跟蹤查詢提供了一種全新的閉環處理模式:
由上圖可以看出,從呼叫鏈入口進入,可以根據呼叫鏈關聯到與當前呼叫鏈相關的日誌,根據日誌又可以關聯到與當前日誌相關的呼叫鏈;從日誌入口進入,可以根據日誌關聯到與當前日誌相關的呼叫鏈,根據呼叫鏈又可以關聯到與當前呼叫鏈相關的日誌。兩種模式可以相互切換。舉個栗子
通過日誌聚合搜尋,使用者小明發現A系統的一段日誌存在異常。此時,小明可以通過此條日誌關聯找出對應的呼叫過程a。通過觀察呼叫鏈a,小明發現,異常是由呼叫鏈a上的節點a[2]超時導致。現在小明可以從呼叫鏈關聯到與節點a[2]相關的日誌內容,從而確定問題(詳見下文“效果展示”)。整體架構設計
1.資料抓取:
在應用叢集中的機器上部署代理程式(Agent),用於資料收集和上送;將探針內嵌在容器(Tomcat等)中,用於應用畫像和應用資訊收集。
2.資料傳輸:
Agent通過MQ將處理過的日誌上送到監控伺服器。
3.資料處理與儲存:
監控伺服器對採集的資料進行處理,並將其存入ES,方便使用者通過特定特徵快速定位。
4.資料展示:
將資料進行視覺化展示,並提供方便的視覺化自定義查詢服務。
具體實現
在介紹呼叫鏈和日誌聚合的具體實現之前需要先明確幾個概念:
1. 中介軟體劫持技術:
在中介軟體啟動時動態地將自己的程式碼行為植入中介軟體的各種行為中的技術。例如,在Tomcat啟動時,在Tomcat處理請求的開始位置動態地新增程式碼劫持,從而在Tomcat執行處理請求邏輯之前實現服務呼叫畫像等功能。更多能力及實現方式請參考JAVA服務治理實踐之無侵入的應用服務監控。
2. traceId:
通過中介軟體劫持技術在服務呼叫的最前端產生能夠唯一確定一條呼叫鏈的ID。
主要實現邏輯:
- 在應用容器啟動時,使用中介軟體劫持技術在服務呼叫入口和應用日誌寫檔案入口位置新增劫持點。
- 在發生服務呼叫時,生成呼叫鏈後設資料和上下文。
- 當應用寫日誌時,通過寫檔案入口劫持點獲取當前呼叫的呼叫鏈上下文,將traceId與應用日誌一同寫入應用日誌檔案。
- 日誌歸集將生成的日誌檔案聚合整理上送到監控伺服器。
- 監控伺服器對收集到的日誌資訊進行處理並存入ES。
- 通過Web頁面展示儲存在ES中的資料。
核心邏輯如下圖:
呼叫鏈和日誌聚合實現
呼叫鏈部分:模型設計、服務端資訊收集(輕/重)、方法級資訊收集(輕/重)、客戶端資訊收集(輕/重)、呼叫鏈協議設計(輕/重)、呼叫鏈上下文傳遞、呼叫資訊記錄及傳遞、呼叫資料統計處理幾個關鍵過程。
關鍵技術:中介軟體劫持增強框架、呼叫模型設計和呼叫鏈上下文傳遞。
詳情參見:架構文件
應用日誌部分:日誌歸集,日誌內容處理傳輸,服務端日誌處理及儲存等幾個關鍵步驟。
關鍵技術:服務畫像技術、日誌歸集。
詳情參見:架構文件
歡迎下載UAVStack的原始碼或AllInOne開發演示版體驗。
效果展示
呼叫鏈入口:
根據搜尋條件,獲取某次呼叫的過程,點選搜尋結果進入該呼叫的詳細過程介面。 點選右側的關聯按鈕,快速定位到與之相關聯日誌。 日誌入口: 根據搜尋條件(圖中為按照Hello關鍵字進行搜尋),搜尋出符合條件的日誌。 點選特定日誌即可進入對應的呼叫過程介面。以上就是對呼叫鏈概念、功能及實現策略的介紹,下期文章我們將繼續介紹呼叫鏈的模型設計與模型時序圖,歡迎繼續關注~
UAVStack已在Github上開放原始碼,並提供了安裝部署、架構說明和使用者指南等雙語文件,歡迎訪問-給星-拉取~~~
掃一掃下方二維碼,關注一個不會讓你失望的公眾號
大家好,我是李崇,宜信架構師,宜信集團級監控專案monitor、apm及ServiceGovern領域負責人。我。同時也是開源專案UAVStack核心開發人員,本週六(10月20日)我會做客掘金技術沙龍為大家做一場《多技術棧下的APM系統-UAVStack》的分享,歡迎大家可以現場交流。
點選圖片瞭解詳情: