天天看點

調用鍊與日志關聯的探索式查詢

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

一、Observability

Observability是一個最近幾年開始在監控社群流行的術語。本文将Observability視為一種理念,一種監控的超集,包括監控、日志聚合、分布式跟蹤,可以實時更深入地觀察系統。本文将就其中的日志聚合、分布式跟蹤及具體應用中結合使用進行展開說明。

二、日志與調用鍊的探索式查詢

微服務、雲和容器化架構的出現,改變了我們建構系統的方式。應用程式是分布式的,而且瞬息萬變。加之底層的基礎設施和網絡服務愈加健壯,日常系統運維的大部分工作将來自應用程式層或者是不同應用程式之間的複雜互動調用。

對于複雜的跨系統調用,一次請求可能需要背景幾台或上百台節點的支援。此時具體到一次請求已經很難通過人力确認其處理的完整流程,此時最能反映每次請求處理過程的應該是分布式追蹤(下文簡稱調用鍊)。

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

下面通過一張簡圖來說明調用鍊和日志聚合做的事情:

調用鍊與日志關聯的探索式查詢

調用鍊的作用是将一次請求所經過的所有節點和關鍵操作進行記錄并彙總展示出來,就像圖中綠色箭頭,能夠提供一個全局的視角去看待一次請求。

日志聚合的作用是将所有節點和系統産生的日志進行彙總整理,并提供給使用者一個有效并友好的查詢能力。

但是我們在具體使用過程中往往是這樣的:

從調用鍊進來以後發現了一個問題,然後切換到日志聚合去根據特定屬性查詢對應的日志資訊,通過排查日志資訊發現還需要再次去查詢與之關聯的調用鍊資訊……如此往返多次。

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

調用鍊與日志關聯的探索式查詢

從調用鍊入口進入,可以根據調用鍊關聯到具體應用的與目前調用鍊相關的日志,根據日志也可以關聯到具體一條調用鍊;從日志入口進入,可以根據日志關聯到與目前日志相關的具體一條調用鍊,根據一條調用鍊又可以關聯到與目前調用鍊相關聯的日志。而且兩種模式可以互相切換。

三、舉個栗子

調用鍊與日志關聯的探索式查詢

使用者小明通過日志聚合搜尋發現有A系統一段日志有異常資訊,此時他可以通過此條日志關聯找出對應的調用過程a。通過觀察a這條調用鍊小明發現,是由于a上的節點a[2]逾時導緻。此時小明可以從調用鍊關聯到與節點a[2]相關的日志内容進而确定問題所在(具體效果見下文)。

四、整體架構設計

調用鍊與日志關聯的探索式查詢

4.1 資料抓取:

應用叢集中的機器上部署的agent用于資料收集和上送,探針内嵌在容器(tomcat等)用于為應用畫像和收集應用資訊

4.2 資料傳輸:

agent将處理過後的日志通過mq上送到監控伺服器

4.3 資料處理及存儲:

監控伺服器将采集上來的資料進行處理并将其存入ES,友善使用者通過特定特征快速定位

4.4 資料展示:

将資料進行可視化展示,并提供友善的可視化自定義查詢服務

五、具體實作

在介紹調用鍊和日志聚合具體實作之前需要明确的幾個概念:

5.1 中間件劫持技術

通過在中間件啟動時動态将我們自己的代碼行為植入到中間件的各種行為中的技術。比如在tomcat啟動時動态在tomcat處理請求的開始位置添加代碼劫持,則能夠實作在tomcat執行處理請求邏輯之前進行服務調用畫像等功能。更多能力和實作方式可以參考:

http://chuansong.me/n/603660351655

5.2 traceId

通過中間件劫持技術在服務調用最前端産生且能夠唯一确定一條調用鍊的id。

主要實作邏輯:

  • 在應用容器啟動時,使用中間件劫持技術在服務調用入口和應用日志寫檔案入口位置添加劫持點
  • 在發生服務調用時生成調用鍊中繼資料和上下文
  • 當應用寫日志時通過寫檔案入口劫持點擷取目前調用的調用鍊上下文,将traceId與應用日志一同寫入應用日志檔案
  • 日志歸集将生成的日志檔案聚合整理上送到監控伺服器
  • 監控伺服器将收集到的日志資訊,進行處理并存入es
  • web頁面将存儲在es中的資料進行展示

核心邏輯如下圖:

調用鍊與日志關聯的探索式查詢

六、調用鍊和日志聚合實作

調用鍊部分分為:模型設計、服務端資訊收集(輕/重)、方法級資訊收集(輕/重)、用戶端資訊收集(輕/重)、調用鍊協定設計(輕/重)、調用鍊上下文傳遞、調用資訊記錄及傳遞、調用資料統計處理幾個關鍵過程。關鍵技術為中間件劫持增強架構、調用模型設計和調用鍊上下文傳遞。

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

七、效果展示

7.1 調用鍊入口

調用鍊與日志關聯的探索式查詢

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

調用鍊與日志關聯的探索式查詢

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

調用鍊與日志關聯的探索式查詢

7.2 日志入口

調用鍊與日志關聯的探索式查詢

通過特定特征(圖中為按照Hello關鍵字進行搜尋)搜尋出符合條件的日志。

調用鍊與日志關聯的探索式查詢

通過點選具體日志即可進入對應的調用過程。

調用鍊與日志關聯的探索式查詢

參考資料

更多詳情:

https://uavorg.github.io/documents/uavdoc_architecture/moniorframework/diao-yong-lian-shu-ju-sheng-cheng.html

下載下傳UAVStack的源碼(

https://github.com/uavorg

下載下傳AllInOne開發示範版(

https://uavorg.github.io/main/

作者:李崇

來源:宜信技術學院