做者: 王林林
出處:UAVStack智能運維
來源: 宜信技術學院
技術沙龍001期|AI中臺:一種敏捷的智能業務支持方案|宜信技術沙龍 3月28日晚8點線上直播,點擊報名
UAVStack是一個全維監控與應用運維平臺。UAV.Monitor具有監控功能,包含基礎監控、應用/服務性能監控、日誌監控、業務監控等。在應用監控中,UAV能夠根據應用實例畫像;其中應用實例組件能夠對日誌、服務、客戶端等進行畫像;基於客戶端的畫像又分爲Http、Dubbo、MQ、Kafka、JDBC、Redis、MongoDB等等。程序員
1、背景數據庫
做爲一個工做多年的程序員或運維人員,相信你必定遇到過如下狀況:segmentfault
· 場景一:系統出現異常狀況,運維人員沒能在第一時間發現,反而是業務方在使用過程當中反饋系統崩潰、頁面點不開。查看系統日誌,發現一直在報鏈接數據庫異常;服務器
· 場景二:新功能上線穩定運行一段時間後,用戶反饋頁面響應愈來愈慢,打開一個頁面要等很久。排查問題,發現是一個慢SQL影響了整個功能的體驗。數據結構
爲此,UAVStack開發了數據庫監控功能。最初,數據庫監控功能只是對數據源、數據庫鏈接池進行了指標採集,經過客戶端畫像能夠查看實時的數據庫鏈接池信息以及操做計數。最近UAVStack又解鎖了一項新功能——慢SQL監控,使數據庫監控功能更加完善。框架
今天小編就向你們介紹一下數據庫監控的具體實現。文章中出現的如下關鍵字所有用簡稱代替:運維
· 中間件加強框架:英文MonitorFramework,簡稱MOF性能
· 健康管理服務:英文HealthManager,簡稱HM優化
· 監控代理程序:英文MonitorAgent,簡稱MAspa
2、關鍵技術&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,最後實現數據落地。
3、組成部分
慢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的接口獲取;
4、功能展現
數據庫監控目前已實現的功能有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追蹤-日誌關聯:
· 應用監控中需開啓日誌歸集
· 點擊某一行詳細的調用鏈內容的日誌關聯,可查看相應的日誌信息,相關的日誌行數高亮顯示
5、總結
數據庫監控是不容忽視的,好的數據庫監控能夠幫助優化系統並進行實時預警。經過文中介紹的數據庫鏈接池監控,運維人員能夠隨時關注數據庫鏈接池的狀態,有效防止系統出現鏈接池活動鏈接數佔滿沒法鏈接數據庫的狀況;而慢SQL監控功能能夠動態展現一個系統的SQL狀況,幫助優化SQL語句,讓系統更穩定。