呼叫鏈與日誌關聯的探索式查詢
一、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執行處理請求邏輯之前進行服務呼叫畫像等功能。更多能力和實現方式可以參考:
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的原始碼()
下載AllInOne開發演示版()
作者:李崇
來源:宜信技術學院
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69918724/viewspace-2660769/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 呼叫鏈與日誌的關聯式跟蹤查詢
- 關於MySQL 通用查詢日誌和慢查詢日誌分析MySql
- mysql 日誌之慢查詢日誌MySql
- Linux 查詢 日誌 相關命令Linux
- loki的日誌查詢Loki
- SLS 查詢新正規化:使用 SPL 對日誌進行互動式探索
- mysql 查詢日誌MySql
- mysql查詢日誌MySql
- 【SQL】使用分析函式與關聯子查詢的比較SQL函式
- mysql 日誌之普通查詢日誌MySql
- MySQL慢查詢日誌相關設定MySql
- 慢查詢日誌的管理
- MySQL:慢查詢日誌MySql
- MySQL 通用查詢日誌MySql
- 日誌查詢錯誤
- 使用慢查詢日誌
- mysql慢查詢日誌MySql
- ITMySQL錯誤日誌與通用查詢日誌圖文詳析jugMySql
- 區分關聯子查詢和非關聯子查詢
- exist-in和關聯子查詢-非關聯子查詢
- MyBatis關聯查詢MyBatis
- thinkphp關聯查詢PHP
- Java應用日誌如何與Jaeger的trace關聯Java應用日誌
- 開啟查詢慢查詢日誌引數
- 如何精準查詢日誌
- linux查詢日誌技巧Linux
- redo日誌組資訊查詢
- 記錄 sql 查詢日誌SQL
- 瞭解通用查詢日誌
- PHP慢指令碼日誌和Mysql的慢查詢日誌PHP指令碼MySql
- .NET Core 中的日誌與分散式鏈路追蹤分散式
- 在關聯子查詢中in與exists的區別
- Python—Django:關於在Django框架中對資料庫的查詢函式,查詢集和關聯查詢PythonDjango框架資料庫函式
- 使用關聯模型的鏈式呼叫時-有無括號的區別模型
- MySQLSlowlog慢查詢日誌的配置以及清空日誌內容MySql
- sql server關於跟蹤日誌查詢使用說明SQLServer
- Mongodb 關聯表查詢MongoDB
- MySQL多表關聯查詢MySql