標籤:無法 select 記錄檔 查詢 語句 image lob 系統 替換
前言:最近有同事反應有的介面回應時間時快時慢,經過排查有的資料層回應時間過長,為了加快定位定位慢sql的準確性,決定簡單地搭建一個慢sql警示系統
具體流程如下架構圖
第一步:記錄日誌
每個業務系統都會在都會有自己的查詢語句,所有的sql語句最紅都會 我們先開啟每個mysql的慢sql採集配置
1.將 slow_query_log 全域變數設定為“ON”狀態
mysql> set global slow_query_log=‘ON‘;
2.設定慢查詢日誌存放的位置
3.mysql> set global slow_query_log_file=‘/usr/local/mysql/data/slow.log‘;
設定慢sql的時間
mysql> set global long_query_time=1;
測試一下
select sleep(3);去第二步設定的路徑找到記錄檔,開啟日誌發現會有一條記錄
第二步:採集日誌
當記錄下所有的記錄檔的之後,我們就需要採集,和傳統的ELK那套模式一致,用filebeat去搜集(filebeat採集的原理就不多說介紹了),採集完成後就統一傳輸到logstash
第三步:格式化資料
當logstash得到這些資料之後,需要格式化Elasticsearch需要的格式
注意:我們採集到日誌格式中無法區分sql類型,比如select * from user where userId=2 和 select * from user where userId=5 是同一種類型,但是原始日誌採集過來的資料無法判斷,我們需要特殊處理一下:
1:用Regex把所有 數字和引號“”裡面的內容都替換成?,
2:然後把返回的值用密碼編譯演算法加密一下,得到一個新的欄位
改欄位就可以表明是某種類型的sql
第四步:分析和展示資料
Elasticsearch得到logstash傳來的資料之後,就可以來檢索了(sql_for_hash欄位就行用來判別sql類型的欄位)
第五步:警示功能
以上四步基本完成了mysql慢sql的採集分析過程,接下裡就是警示功能,採用每小時(可以更短)去掃描es的中資料,根據日誌中出現的查詢時間以及每小時出現的次數決定警示層級,調用訊息中心的警示介面進行警示,這樣開發員人能夠即時地接收到慢sql的出現的情況以便及時排除解決問題(後台也寫了一個簡單的統計頁面方便查看)
mysql慢sql警示系統