読者です 読者をやめる 読者になる 読者になる

Redisのslowlog設定

Redis

概要

Redisのスローログ出力方法と設定のメモ

slowlogを5件出力する

SLOWLOG GET 5


表示例

[tsunokawa@test ~]$ redis-cli
127.0.0.1:6379> SLOWLOG GET 5
 1) 1) (integer) 18284101
    2) (integer) 1471441352
    3) (integer) 56080
    4) 1) "GET"
       2) "testkey1"
 2) 1) (integer) 18284100
    2) (integer) 1471441352
    3) (integer) 55133
    4) 1) "GET"
       2) "testkey1"
 3) 1) (integer) 18284099
    2) (integer) 1471441352
    3) (integer) 43424
    4) 1) "GET"
       2) "testkey1"
 4) 1) (integer) 18284098
    2) (integer) 1471441352
    3) (integer) 63600
    4) 1) "GET"
       2) "testkey1"
 5) 1) (integer) 18284097
    2) (integer) 1471441351
    3) (integer) 84269
    4) 1) "GET"
       2) "testkey1"
127.0.0.1:6379> 

ログの見方

 1) 1) (integer) 18284101
    2) (integer) 1471441352
    3) (integer) 56080
    4) 1) "GET"
       2) "testkey1"

上から

  • 自動採番されたID
  • コマンド実行時のUnixタイムスタンプ
  • コマンド実行にかかった時間(マイクロ秒)
  • コマンドとそのパラメータ


スローログ設定(デフォルト)

/etc/redis.conf

slowlog-log-slower-than 10000
slowlog-max-len 128

10000マイクロ秒以上かかったクエリを128件保持するようになっている。

スローログ設定確認と変更(オンライン)

設定確認
127.0.0.1:6379> CONFIG GET slowlog-log-slower-than
1) "slowlog-log-slower-than"
2) "10000"
127.0.0.1:6379> 


127.0.0.1:6379> CONFIG GET slowlog-max-len
1) "slowlog-max-len"
2) "128"
127.0.0.1:6379> 


設定変更
127.0.0.1:6379> CONFIG SET slowlog-log-slower-than 0
OK
127.0.0.1:6379> 

10000マイクロ秒から0マイクロ秒へ変更
これで全てのクエリがスローログとして保持される。

127.0.0.1:6379> CONFIG SET slowlog-max-len 256
OK
127.0.0.1:6379> 

スローログ保持件数を128件から256件へ変更

スローログ保持件数確認

スローログが何件保持されているかは

SLOWLOG LEN

で確認可能


表示例

127.0.0.1:6379> SLOWLOG LEN
(integer) 128
127.0.0.1:6379> 


スローログのリセット

保持しているスローログを削除する。

SLOWLOG RESET


表示例

127.0.0.1:6379> SLOWLOG RESET
OK
127.0.0.1:6379> 


Redisのログレベルをオンラインで変更する

Redis

概要

Redis稼働中に設定ファイルの書き換え&デーモンの再起動をすることなくログレベルを変更して詳細ログを吐き出す手順です。

現在のログレベル設定を確認

redis-cliで以下を実行することで設定を確認出来ます。

CONFIG GET loglevel


表示例
[tsunokawa@test ~]$ redis-cli 
127.0.0.1:6379> CONFIG GET loglevel
1) "loglevel"
2) "warning"
127.0.0.1:6379> 

現在ログレベルがwarningになっていることが確認出来ます。

ログレベルを変更

CONFIG SETを使ってログレベルをdebugに変更します。

CONFIG SET loglevel "debug"


表示例
[tsunokawa@test ~]$ redis-cli 
127.0.0.1:6379> CONFIG SET loglevel "debug"
OK
127.0.0.1:6379>


再度ログレベルの設定を確認

127.0.0.1:6379> CONFIG GET loglevel
1) "loglevel"
2) "debug"
127.0.0.1:6379> 

ログレベルがdebugに変更になりました。
これでログファイルにdebugレベルのログが出力されます。

その他の設定

ログレベル以外にも同様の手順でオンラインで設定の変更が可能です。
以下で設定全項目名を確認することが出来ます。

CONFIG GET *


表示例
127.0.0.1:6379> CONFIG GET *
  1) "dbfilename"
  2) "dump.rdb"
  3) "requirepass"
  4) ""
  5) "masterauth"
  6) ""
  7) "unixsocket"
  8) ""
  9) "logfile"
 10) "/var/log/redis/redis.log"
 11) "pidfile"
 12) "/var/run/redis/redis.pid"
(略)


Redis ClusterのFLUSHALL

Redis

概要

Redis Clusterのデータを全て消したい場合、各ノードでFLUSHALLを行う必要があります。

どこか1台のマスターノードでFLUSHALLを実行してもクラスタ内のデータは全消去されず、
redis-cliでアクセスしたサーバーのデータのみ削除されます。

また、クラスタ内の各マスターノードだけで実行してもスレーブがマスター昇格してしまいデータが再同期されてしまいデータが消えることはありません。

そこでマスター/スレーブ両方で同時にFLUSHALLを行うことでデータを削除することが出来ます。

マスター

[root@redis-cluster01 ~]# redis-cli -c
127.0.0.1:6379> FLUSHALL
OK
(18.88s)
127.0.0.1:6379> 


スレーブ

マスターと違ってスレーブはFLUSHALL前にスレーブでもデータの書き換えが出来るよう
CONFIG SET slave-read-only "no"を実行する必要があります。

[root@redis-cluster02 ~]# redis-cli -c
127.0.0.1:6379> CONFIG SET slave-read-only "no"
OK
127.0.0.1:6379> FLUSHALL
OK
(18.88s)
127.0.0.1:6379>