UAVStack的慢SQL資料庫監控功能及其實現

宜信技術學院發表於2019-08-16

UAVStack是一個全維監控與應用運維平臺。UAV.Monitor具備監控功能,包含基礎監控、應用/服務效能監控、日誌監控、業務監控等。在應用監控中,UAV可以根據應用例項畫像;其中應用例項元件可以對日誌、服務、客戶端等進行畫像;基於客戶端的畫像又分為Http、Dubbo、MQ、Kafka、JDBC、Redis、MongoDB等等。

一、背景

作為一個工作多年的程式設計師或運維人員,相信你一定遇到過以下情況:

場景一:系統出現異常情況,運維人員沒能在第一時間發現,反而是業務方在使用過程中反饋系統崩潰、頁面點不開。檢視系統日誌,發現一直在報連線資料庫異常;

場景二:新功能上線穩定執行一段時間後,使用者反饋頁面響應越來越慢,開啟一個頁面要等好久。排查問題,發現是一個慢SQL影響了整個功能的體驗。

為此,UAVStack開發了資料庫監控功能。最初,資料庫監控功能只是對資料來源、資料庫連線池進行了指標採集,透過客戶端畫像可以檢視實時的資料庫連線池資訊以及操作計數。最近UAVStack又解鎖了一項新功能——慢SQL監控,使資料庫監控功能更加完善。

今天小編就向大家介紹一下資料庫監控的具體實現。文章中出現的以下關鍵字全部用簡稱代替:

· 中介軟體增強框架:英文MonitorFramework,簡稱MOF · 健康管理服務:英文HealthManager,簡稱HM · 監控代理程式:英文MonitorAgent,簡稱MA

二、關鍵技術&UAV自研框架

· MOF Agent注入機制:MOF Agent的注入機制以Java agent以及Javaassit技術作為基礎支撐。Java agent負責攔截和轉換位元組碼流,轉換過程中使用Javaassist進行解析和修改,在應用伺服器生命週期的關鍵位置注入切點,為MOF框架初始化、應用的畫像資訊和實時監控資料資訊捕獲提供基礎。

· InterceptFramework框架:在應用啟動的特定生命週期內改寫位元組碼,植入特定的邏輯處理程式碼,即畫像資料採集,採集的資料包含服務畫像以及客戶端畫像;客戶端畫像包含Http、Dubbo、MQ、Kafka、JDBC、Redis、MongoDB等常見的開源元件,系統中呼叫的第三方服務都會被列為是客戶端的物件,比如系統中呼叫了第三方系統的介面都屬於客戶端的範疇。

· CaptureFramework框架:透過InterceptFramework框架在特定的生命週期改寫位元組碼植入特定的邏輯程式碼,在植入的邏輯程式碼中可以透過CaptureFramework畫像的Monitor捕獲體系的能力採集資料以及資料儲存。具體實現為採用doCapture來實現在特定的捕獲點執行抓取資料行為,採用doPreStore來實現在儲存資料結構之前的一些捕獲動作,對抓取的資料進行特殊資料的處理,獲取到處理完成後的資料再透過UAVServer呼叫具體的Supporter,最後實現資料落地。

三、組成部分

慢SQL監控的實現分為四個組成部分:

· 慢SQL的動態啟停:慢SQL的監控啟/停依賴於MOF的Global Filter機制。在應用初始化時,UAV對應用的Filter進行了改寫,提供了向MOF下發指令的介面。只要呼叫介面傳入規定的引數便可以實現對慢SQL監控的動態啟停。UAV系統中並不存在其它服務直接呼叫MOF的操作,都是透過MA來完成的。大家可以把MA理解為服務請求方與MOF之間的媒介。

· 慢SQL資料採集:依賴InterceptFramework框架在特定的生命週期改寫位元組碼植入特定邏輯,同時採用MOF的CaptureFramework框架進行資料抓取並生成抓取結果。MA會對生成結果的檔案進行定時採集並封裝成固定的資料結構傳送至MQ。

· 資料儲存:在HM中建立獨立的feature進行資料處理,消費MA推送至MQ中的資料,完成資料清洗再儲存至ES。由於資料採集的結果進行了特殊的約定,從MQ拿到的資料並不能直接轉換成相應的結果,需要進行相應的解析處理才能進行儲存(由於採集的資料中欄位較多、可能含有特殊的字元會影響對資料的解析,在生成資料結果時有規則約束才能實現資料的正確解析)。資料庫監控的feature還提供了查詢、統計慢SQL操作的相關介面。

· 頁面展示:操作頁面可自主啟停資料庫監控,設定慢SQL的時間閾值。啟停以及時間閾值的設定依賴於MA向MOF傳送指令。頁面展示的SQL統計、追蹤等資訊則透過HM的介面獲取。

四、功能展示

資料庫監控目前已實現的功能有SQL分類統計、資料庫連線池監控、慢SQL耗時分佈統計、慢SQL統計、慢SQL追蹤以及呼叫鏈/日誌關聯功能。

SQL分類統計:

· 資料來源:OpenTSDB(透過畫像採集指標)

· 針對插入、刪除、更新、查詢、批次操作進行分類統計

· 根據時間分佈展示資料庫的訪問情況,根據時間分佈展示資料庫的訪問情況,展示所選時間段的總訪問計數(累計值)

· 可以自定義時間條件查詢歷史資料

資料庫連線池監控:

· 資料來源:OpenTSDB(透過畫像採集指標)

· 可以檢視連線池總連線數、活動連線數、空閒連線數的變化曲線

慢SQL耗時分佈統計:

· 資料來源:ES

· 慢SQL統計可根據分類進行展示統計

· 針對慢SQL的耗時分佈統計,最多查詢100條

· 根據時間分佈展示資料庫慢SQL的訪問情況,展示當前時間點的慢SQL訪問時間、SQL、耗時

· 可以根據設定查詢歷史資料

慢SQL統計:

· 資料來源:ES

· 針對所有型別的SQL

· 根據時間分佈展示資料庫某時間段的慢SQL統計

· 可以根據設定查詢歷史資料

慢SQL追蹤:

· 資料來源:ES

· 查詢條件為:關鍵字、是否慢SQL追蹤、時間範圍

· 根據搜尋條件查詢SQL追蹤列表,列表展示內容為:SQL語句、總執行次數、執行總時間、平均執行時間、操作-可檢視詳情

慢SQL追蹤-詳情檢視:

· 資料來源:ES

· 慢SQL詳情:點選某一條慢SQL統計可檢視詳情:包含開始執行時間、執行時長、入參、執行結果、影響條數

慢SQL追蹤-呼叫鏈關聯:

· 應用監控中需開啟輕度呼叫鏈

· 點選某一行詳細的執行時間,可以跳轉至呼叫鏈頁面,檢視呼叫鏈的詳細內容(相關的呼叫鏈高亮顯示)

慢SQL追蹤-日誌關聯:

· 應用監控中需開啟日誌歸集

· 點選某一行詳細的呼叫鏈內容的日誌關聯,可檢視相應的日誌資訊,相關的日誌行數高亮顯示

五、總結

資料庫監控是不容忽視的,好的資料庫監控可以幫助最佳化系統並進行實時預警。透過文中介紹的資料庫連線池監控,運維人員可以隨時關注資料庫連線池的狀態,有效防止系統出現連線池活動連線數佔滿無法連線資料庫的情況;而慢SQL監控功能可以動態展示一個系統的SQL情況,幫助最佳化SQL語句,讓系統更穩定。

作者:王林林

來源:宜信技術學院


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69918724/viewspace-2653931/,如需轉載,請註明出處,否則將追究法律責任。

相關文章