Redis慢日志
redis慢日志也就是redis慢查詢日志。慢查詢是指用戶指令在redis引擎端執行時間較長的查詢,統計慢查詢的時間是指指令的執行時間,并不包含客戶端的網絡傳輸和排隊等待時間。
慢查詢日志是Redis引擎端在(zai)命(ming)令執行(xing)前后計算每條命(ming)令的(de)(de)執行(xing)時長,當超過指(zhi)定(ding)閾值時記(ji)(ji)錄下來的(de)(de)日志(zhi)。日志(zhi)中(zhong)(zhong)記(ji)(ji)錄了慢查詢發生的(de)(de)時間,還有執行(xing)時長、具體指(zhi)令等(deng)信息,用來幫助開發和(he)運維人(ren)員定(ding)位系統中(zhong)(zhong)存在(zai)的(de)(de)慢查詢。
慢日志實現邏輯
redis引擎執行指令時都會記錄開始執行時間以及結束時間,當指令執行耗時超過設置的閾值且內存中慢日志記錄條數小于設置的最大條數時,會記錄下該指令的slowlog格式數據。

慢日志操作指令
針對慢日志功能,redis提供具體指令操作慢日志接口,包括查詢慢日志記錄、清理慢日志以及配置慢日志參數。
查詢慢日志記錄
可以使用 slowlog get 指令獲取慢(man)查詢日志,還可(ke)以加一個(ge)數字,用(yong)于指定獲(huo)取慢查詢日(ri)志的條(tiao)數。另外,也支持查詢當前系(xi)統中包含(han)的慢日(ri)志條(tiao)數。
> slowlog len1) 1) (integer) 126
(integer) 12
> slowlog get 2
2) (integer) 1613704108
3) (integer) 46004
4) 1) "flushall"
2) 1) (integer) 125
2) (integer) 1608705338
3) (integer) 30449
4) 1) "scan"
2) "0"
3) "MATCH"
4) "*comment*"
5) "COUNT"
6) "10000"
可以看出每一條慢查詢日志都有4個屬性組成:
- - 唯一標識ID
- - 命令執行的時間戳
- - 命令執行時長
- - 執行的命名和參數
清理慢日志
所有的慢日志記錄都保存在內存中,當記錄的數量達到最大條數,如果還有新慢日志寫入,最早的舊記錄會被清理,為新記錄騰出空間。
在做慢日志歸檔時,應盡量避免日志寫滿被動清理,定時讀取慢日志,同時清理系統內存中的日志記錄。
> slowlog len (integer) 11>slowlog reset
OK>slowlog len(integer) 0
配置慢日志參數
根據上述功能,慢日志需要下面兩個配置:
- 指令執行時長的指定閾值,slowlog-log-slower-than
- 存放慢查詢日志的條數,slowlog-max-len
slowlog-log-slower-than的作用是指定命(ming)(ming)令執行(xing)時(shi)長(chang)的閾(yu)值,執行(xing)命(ming)(ming)令的時(shi)長(chang)超過這(zhe)個閾(yu)值時(shi)就會(hui)被(bei)記錄下來。它的單位是微秒(miao)(1秒(miao) = 1000毫秒(miao) = 1000000微秒(miao)),默認(ren)是10000微秒(miao)。
slowlog-max-len的作用是指定(ding)慢查(cha)(cha)詢日(ri)志(zhi)最(zui)多存儲的條數。Redis使用了一個(ge)列(lie)(lie)表(biao)(biao)(biao)存放慢查(cha)(cha)詢日(ri)志(zhi),slowlog-max-len就是這(zhe)個(ge)列(lie)(lie)表(biao)(biao)(biao)的最(zui)大長(chang)度(du)。當(dang)一個(ge)新的命(ming)令滿足滿足慢查(cha)(cha)詢條件時,被插入(ru)這(zhe)個(ge)列(lie)(lie)表(biao)(biao)(biao)中(zhong)。當(dang)慢查(cha)(cha)詢日(ri)志(zhi)列(lie)(lie)表(biao)(biao)(biao)已經達到最(zui)大長(chang)度(du)時,最(zui)早插入(ru)的那條命(ming)令將被從列(lie)(lie)表(biao)(biao)(biao)中(zhong)移出。
慢日志的兩個參數都可以通過 config 指令查詢和設置,注意修改配置后需要使用rewrite持久化保存配置值
> config get slowlog-log-slower-than
(integer) 10000
> config get slowlog-max-len
(inter) 100
> config set slowlog-log-slower-than 1000000
OK
> config set slowlog-max-len 120
OK
>config rewriteOK
慢日志歸檔及查詢功能
通過前端頁面向終端用戶提供慢日志功能,管控組件需要支持redis慢日志歸檔存儲和提供過濾查詢能力,以及在實例參數配置中提供慢日志相關參數的配置發布能力。
慢日志參數配置
在使用慢日志功能時,需要關注慢日志相關的配置參數。在實例參數配置頁面,設置slowlog-log-slower-than和slowlog-max-len參(can)數(shu)對應的(de)(de)值,設置(zhi)完成(cheng)后,會影響到系統后續的(de)(de)慢(man)日(ri)志記(ji)錄(lu),按最新的(de)(de)配(pei)置(zhi)值記(ji)錄(lu)慢(man)日(ri)志,但(dan)不會影響到參(can)數(shu)配(pei)置(zhi)前的(de)(de)慢(man)日(ri)志。

慢日志歸檔存儲
通過周期任務,定時查詢實例節點的慢日志,查詢后清理,保存查詢記錄到管控元數據數據庫中,慢日志記錄存儲字段包括:
| 記錄標識ID | 執行時間戳 | 執行耗時 | 指令及參數 | 讀寫標識 | 數據類型 | 實例ID |
PS:系統需要有慢日志數據清理動作,清理記錄時間較久遠的慢日志記錄。
慢日志過濾查詢
完成慢日志記錄后就可以提供慢日志查詢功能,可以支持按指令、數據類型、讀寫等維度過濾查詢。