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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- UAVStack功能上新:新增JVM監控分析工具JVM
- 【SQL】Oracle資料庫監控sql執行情況SQLOracle資料庫
- 【SQL】Oracle資料庫SQL監控報告示例SQLOracle資料庫
- 資料庫——慢sql的原因資料庫SQL
- 給國產資料庫廠商提個建議:把慢SQL監控升級為關鍵SQL管理資料庫SQL
- GO實現資料夾監控Go
- 用canal監控binlog並實現mysql定製同步資料的功能MySql
- 崑崙分散式資料庫Sequence功能及其實現機制分散式資料庫
- MySQL監控-Datadog資料庫監控調研MySql資料庫
- 大資料開發-資料表監控-實現大資料
- EBS:Oracle 資料庫執行慢SQLOracle資料庫SQL
- 資料庫監控---PIGOSS BSM資料庫Go
- 監控資料庫活動資料庫
- 資料庫繁忙程度監控資料庫
- Zabbix監控神通資料庫教程資料庫
- shell監控mysql 8.0資料庫MySql資料庫
- shell監控mysql 5.7資料庫MySql資料庫
- TiDB監控實現--存活監控TiDB
- Python呼叫阿里雲資料庫監控資料Python阿里資料庫
- openGauss資料庫原始碼解析——慢SQL檢測資料庫原始碼SQL
- 資料庫DML監控一例資料庫
- Zabbix+Python監控Oracle資料庫PythonOracle資料庫
- 資料庫監視器(SQL Server Profilter)資料庫SQLServerFilter
- 用友全球司庫十問(四)|企業如何實現融資債券資料資訊的實時監控?
- 自定義帶監控的資料庫連線池資料庫
- zabbix6.2新增mysql資料庫監控MySql資料庫
- 一種對雲主機進行效能監控的監控系統及其監控方法
- Python的監控功能示例Python
- 【工業閘道器應用方案】資料庫機房遠端監控如何實現?資料庫
- SQL server資料庫with as子句與遞迴查詢的實現SQLServer資料庫遞迴
- Java實現ZooKeeper的zNode監控Java
- 資料庫監控工具--PIGOSSBSM運維監控管理系統資料庫Go運維
- Oracle 19C+13.4EMCC資料庫監控Oracle資料庫
- Zabbix5.0 配置 ODBC 監控 Oracle 資料庫Oracle資料庫
- MySQL資料庫與Nacos搭建監控服務MySql資料庫
- 使用 Performance API 實現前端資源監控ORMAPI前端
- Lumen 實現 SQL 監聽SQL
- 資料監控可以監測業務指標的實現情況,發現是否有升高或降低指標