Redis慢日誌查詢

Redis slowlog 是個什麼

redis的slow log記錄了那些執行時間超過規定時長的請求。執行時間不包括I/O操做(好比與客戶端進行網絡通訊等),只是命令的實際執行時間(期間線程會被阻塞,沒法服務於其它請求。 css

有兩個參數用於配置slow log: redis

slowlog-log-slower-than:設定執行時間,單位是毫秒,執行時長超過該時間的命令將會被記入log。-1表示不記錄slow log; 0強制記錄全部命令。 網絡

slowlog-max-len:            slow log的長度。最小值爲0。若是日誌隊列已超出最大長度,則最先的記錄會被從隊列中清除。 工具

能夠經過編輯redis.conf文件配置以上兩個參數。對運行中的redis, 能夠經過config get, config set命令動態改變上述兩個參數性能

使用這個命令能夠讀取或重置 Redis 慢速查詢日誌。通俗講就是 redis 能夠把執行時間超過咱們設定值的命令記錄下來,slowlog 是記錄到內存中的哦,因此很是快。spa

設置 Redis slowlog

兩種方式:線程

  1. 能夠經過配置 redis.conf 來完成。
  2. 運行時,使用 CONFIG GET 和 CONFIG SET 命令配置。

這裏咱們主要說的是第二種方式,您可使用兩個參數來配置慢日誌:slowlog-log-slow-than * ,告訴 Redis, 記錄超過 * 微秒 內的命令執行狀況。unix

須要注意的是,設置負數表示禁用 slowlog ,而設置 0 則強制記錄每一個命令的執行狀況。
如下是 slowlog 的設置使用說明:日誌

redis 127.0.0.1:6379>config set slowlog-log-slower-than 10000
"OK"

redis 127.0.0.1:6379>config get slowlog-log-slower-than
1)  "slowlog-log-slower-than"
2)  "10000"

那麼問題又來了,slowlog 是記錄再內存中的,若是記錄全部的命令 log 會不會把內容撐爆呢?code

答案是固然不會。slowlog 記錄的 log 數是有最大長度限制的,咱們能夠經過 slowlog-max-len 來查詢 slowlog 的最大長度。最小值爲零。當一個新的命令被記錄下來,而且若是已經達到它的最大長度時,最老的一個 log 將從隊列中刪除,FIFO 。

另外,使用 slowlog len 命令能夠查看當前已記錄的數量。 
使用 slowlog reset 重置已記錄的 slowlog 信息。

如何閱讀 slowlog

咱們已經瞭解 slowlog 是記錄在內存中的,因此您能夠啓用全部命令的日誌記錄即 slowlog-log-slow-than 配置參數設置爲 0 便於監測性能。

要讀取 slowlog,使用 SLOWLOG GET 獲取命令,它返回慢日誌中的每個條目。能夠只返回N個最近的條目,將一個附加參數傳遞給命令(例如 SLOWLOG GET 2)。

redis 127.0.0.1:6379> slowlog get 2
    1) 1) (integer) 14             //slowlog 惟一標識
       2) (integer) 1309448221     //unix 時間戳
       3) (integer) 15             //命令執行的時間,單位:微秒
       41"ping"                //具體執行的命令,最多記錄128
    21) (integer) 13
       2) (integer) 1309448128
       3) (integer) 30
       41"slowlog"
          2"get"
          3"100"

//其中 Redis 4.0 及以上版本還包含如下兩部分:

       5"127.0.0.1:58217"         //客戶端IP:Port
       6"worker-123"              //客戶端名稱

最後,須要注意此命令須要 2.2.12及以上版本的 redis 才能支持。

 

因爲慢查詢日誌是一個先進先出的隊列,也就是說若是慢查詢比較多的狀況下,可能會丟失部分慢查詢命令,爲了防止這種狀況發生,能夠按期執行slowlog get命令將慢查詢日誌持久化到其餘存儲中(例如:MySQLElasticSearch等),而後能夠經過可視化工具進行查詢

 

查看當前日誌的數量:

redis 127.0.0.1:6379> SLOWLOG LEN (integer) 14

使用命令 SLOWLOG RESET 能夠清空 slow log 。

redis 127.0.0.1:6379> SLOWLOG LEN (integer) 14 redis 127.0.0.1:6379> SLOWLOG RESET OK redis 127.0.0.1:6379> SLOWLOG LEN (integer) 0
相關文章
相關標籤/搜索