UAVStack的慢SQL資料庫監控功能及其實現
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle慢SQL監控指令碼實現OracleSQL指令碼
- 監控資料庫效能的SQL資料庫SQL
- SQL Server資料庫監控SQLServer資料庫
- UAVStack功能上新:新增JVM監控分析工具JVM
- oracle資料庫效能監控的SQL(轉)Oracle資料庫SQL
- 監控資料庫效能的SQL彙總資料庫SQL
- 資料庫效能SQL監控指令碼資料庫SQL指令碼
- Oracle 資料庫監控SQL語句Oracle資料庫SQL
- 【SQL】Oracle資料庫監控sql執行情況SQLOracle資料庫
- 【SQL】Oracle資料庫SQL監控報告示例SQLOracle資料庫
- 資料庫——慢sql的原因資料庫SQL
- 資料庫監控資料庫
- GO實現資料夾監控Go
- 崑崙分散式資料庫Sequence功能及其實現機制分散式資料庫
- 監控長時間執行的查詢(監控資料庫效能的SQL ) -- 轉資料庫SQL
- 監控寶SQL Server效能監控的功能和配置SQLServer
- zabbix和mysql performance monitor模板實現mysql資料庫的監控MySqlORM資料庫
- 給國產資料庫廠商提個建議:把慢SQL監控升級為關鍵SQL管理資料庫SQL
- 用canal監控binlog並實現mysql定製同步資料的功能MySql
- 資料庫效能監控資料庫
- 監控資料庫活動資料庫
- 大資料開發-資料表監控-實現大資料
- MySQL監控-Datadog資料庫監控調研MySql資料庫
- 某次資料庫效能監控中發現的問題資料庫
- 資料庫繁忙程度監控資料庫
- 資料庫監控軟體資料庫
- 資料庫監控指令碼資料庫指令碼
- 監控Oracle資料庫方法Oracle資料庫
- 監控資料庫指令碼資料庫指令碼
- zabbix監控oracle資料庫Oracle資料庫
- 【實驗】【審計】【FGA】使用Oracle的審計功能監控資料庫中的可疑操作Oracle資料庫
- 基於Prometheus的資料庫監控Prometheus資料庫
- Oracle資料庫的監控內容Oracle資料庫
- 【SQL監控】SQL完全監控的指令碼SQL指令碼
- EBS:Oracle 資料庫執行慢SQLOracle資料庫SQL
- 資料庫監控---PIGOSS BSM資料庫Go
- shell監控mysql 8.0資料庫MySql資料庫
- shell監控mysql 5.7資料庫MySql資料庫