調用鏈與日誌關聯的探索式查詢

摘要:本文將就Observability中的日誌聚合、分佈式跟蹤及具體應用中結合使用進行展開說明。html

1、Observability

Observability是一個最近幾年開始在監控社區流行的術語。本文將Observability視爲一種理念,一種監控的超集,包括監控、日誌聚合、分佈式跟蹤,能夠實時更深刻地觀察系統。本文將就其中的日誌聚合、分佈式跟蹤及具體應用中結合使用進行展開說明。前端

2、日誌與調用鏈的探索式查詢

微服務、雲和容器化架構的出現,改變了咱們構建系統的方式。應用程序是分佈式的,並且瞬息萬變。加之底層的基礎設施和網絡服務越發健壯,平常系統運維的大部分工做未來自應用程序層或者是不一樣應用程序之間的複雜交互調用。git

對於複雜的跨系統調用,一次請求可能須要後臺幾臺或上百臺節點的支持。此時具體到一次請求已經很難經過人力確認其處理的完整流程,此時最能反映每次請求處理過程的應該是分佈式追蹤(下文簡稱調用鏈)。github

調用鏈是從一次具體請求的全局角度看待問題,當細粒具體到一個節點時,應用系統自身打印的日誌最能說明當前節點處理邏輯。web

下面經過一張簡圖來講明調用鏈和日誌聚合作的事情:tomcat

調用鏈的做用是將一次請求所通過的全部節點和關鍵操做進行記錄並彙總展現出來,就像圖中綠色箭頭,可以提供一個全局的視角去看待一次請求。服務器

日誌聚合的做用是將全部節點和系統產生的日誌進行彙總整理,並提供給用戶一個有效並友好的查詢能力。網絡

可是咱們在具體使用過程當中每每是這樣的:架構

從調用鏈進來之後發現了一個問題,而後切換到日誌聚合去根據特定屬性查詢對應的日誌信息,經過排查日誌信息發現還須要再次去查詢與之關聯的調用鏈信息……如此往返屢次。框架

日誌與調用鏈的探索式查詢對於這種經典場景提供了一種新的閉環處理問題模式:

從調用鏈入口進入,能夠根據調用鏈關聯到具體應用的與當前調用鏈相關的日誌,根據日誌也能夠關聯到具體一條調用鏈;從日誌入口進入,能夠根據日誌關聯到與當前日誌相關的具體一條調用鏈,根據一條調用鏈又能夠關聯到與當前調用鏈相關聯的日誌。並且兩種模式能夠相互切換。

3、舉個栗子

用戶小明經過日誌聚合搜索發現有A系統一段日誌有異常信息,此時他能夠經過此條日誌關聯找出對應的調用過程a。經過觀察a這條調用鏈小明發現,是因爲a上的節點a[2]超時致使。此時小明能夠從調用鏈關聯到與節點a[2]相關的日誌內容從而肯定問題所在(具體效果見下文)。

4、總體架構設計

4.1 數據抓取:

應用集羣中的機器上部署的agent用於數據收集和上送,探針內嵌在容器(tomcat等)用於爲應用畫像和收集應用信息

4.2 數據傳輸:

agent將處理事後的日誌經過mq上送到監控服務器

4.3 數據處理及存儲:

監控服務器將採集上來的數據進行處理並將其存入ES,方便用戶經過特定特徵快速定位

4.4 數據展現:

將數據進行可視化展現,並提供方便的可視化自定義查詢服務

5、具體實現

在介紹調用鏈和日誌聚合具體實現以前須要明確的幾個概念:

5.1 中間件劫持技術

經過在中間件啓動時動態將咱們本身的代碼行爲植入到中間件的各類行爲中的技術。好比在tomcat啓動時動態在tomcat處理請求的開始位置添加代碼劫持,則可以實如今tomcat執行處理請求邏輯以前進行服務調用畫像等功能。更多能力和實現方式能夠參考:http://chuansong.me/n/6036603...

5.2 traceId

經過中間件劫持技術在服務調用最前端產生且可以惟一肯定一條調用鏈的id。

主要實現邏輯:

  • 在應用容器啓動時,使用中間件劫持技術在服務調用入口和應用日誌寫文件入口位置添加劫持點
  • 在發生服務調用時生成調用鏈元數據和上下文
  • 當應用寫日誌時經過寫文件入口劫持點獲取當前調用的調用鏈上下文,將traceId與應用日誌一同寫入應用日誌文件
  • 日誌歸集將生成的日誌文件聚合整理上送到監控服務器
  • 監控服務器將收集到的日誌信息,進行處理並存入es
  • web頁面將存儲在es中的數據進行展現

核心邏輯以下圖:

6、調用鏈和日誌聚合實現

調用鏈部分分爲:模型設計、服務端信息收集(輕/重)、方法級信息收集(輕/重)、客戶端信息收集(輕/重)、調用鏈協議設計(輕/重)、調用鏈上下文傳遞、調用信息記錄及傳遞、調用數據統計處理幾個關鍵過程。關鍵技術爲中間件劫持加強框架、調用模型設計和調用鏈上下文傳遞。

應用日誌部分分爲:日誌歸集,日誌內容處理傳輸,服務端日誌處理及存儲等幾個關鍵步驟。關鍵技術爲:服務畫像技術、日誌歸集。

7、效果展現

7.1 調用鏈入口

經過特定條件搜素出關心的具體一次調用過程,點擊進入調用的詳細過程界面。

點擊右側的關聯按鈕可快速定位到與之相關聯日誌。

7.2 日誌入口

經過特定特徵(圖中爲按照Hello關鍵字進行搜索)搜索出符合條件的日誌。

經過點擊具體日誌便可進入對應的調用過程。

參考資料

更多詳情:https://uavorg.github.io/docu...

下載UAVStack的源碼(https://github.com/uavorg

下載AllInOne開發演示版(https://uavorg.github.io/main/

做者:李崇

來源:宜信技術學院

相關文章
相關標籤/搜索