Redis 配置错误日志、慢日志方法

启动、错误日志

日志级别

Redis 总共支持四个级别:debug、verbose、notice、warning

debug:会打印生成大量信息,适用于开发/测试阶段

verbose:包含很多不太有用的信息,但是不像debug级别那么混乱

notice:适度冗长,适用于生产环境

warning:仅记录非常重要、关键的警告消息

配置: sudo vim /usr/local/redis/etc/redis.conf

# Specify the server verbosity level.
# This can be one of:
# debug (a lot of information, useful for development/testing)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably)
# warning (only very important / critical messages are logged)
loglevel notice

指定日志输出文件

默认是 logfile stdout ,这种日志记录方式,默认为标准输出,如果配置 Redis 为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给 /dev/null

配置: sudo vim /usr/local/redis/etc/redis.conf

# Specify the log file name. Also the empty string can be used to force
# Redis to log on the standard output. Note that if you use standard
# output for logging but daemonize, logs will be sent to /dev/null
logfile "/alidata/log/redis/redis.log"

重启 Redis 服务生效

慢日志

慢日志(Slow log) 是 Redis 用来记录命令执行时间的日志系统。例如线上Redis突然出现堵塞,使用该命令可以查询Redis服务器耗时的命令列表,快速定位问题。

由于慢日志是存储于内存的,读写速度非常快,不用担心因为使用慢日志而造成性能问题。

如何配置

2种配置方法。

第一种是修改redis.conf配置文件,

第二种则是使用CONFIG SET动态修改。

需要配置的参数:

slowlog-log-slower-than 配置对执行时间大于多少微秒(microsecond, 1秒=10^6微秒) 的命令进行记录。线上可以设置为10000微秒,也就是10毫秒。

slowlog-max-len 设置最大考验记录多少条记录。 slow log 本身是一个先进先出(FIFO) 队列,当队列大小超过该配置的值时,最旧的一条日志将被删除。线上可以设置为1000以上。

示例:

若修改redis.conf 也是修改这两个参数

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

查询是否生效,可以使用CONFIG GET命令:

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

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

查询慢日志

查询很简单,使用SLOWLOG GET命令:

127.0.0.1:6379> SLOWLOG GET 2
1) 1) (integer) 207
   2) (integer) 1582875104
   3) (integer) 98977
   4) 1) "SPOP"
      2) "wt_pre_room_wxids"
2) 1) (integer) 206
   2) (integer) 1582875103
   3) (integer) 501649
   4) 1) "SPOP"
      2) "wt_bind_user_wxids"

该命令如果不给参数,则打印出所有慢查询命令。

现在按结果集顺序讲解一下输出的结果含义:

唯一性(unique)的日志标识符。日志的唯一 id 只有在 Redis 服务器重启的时候才会重置,这样可以避免对日志的重复处理。

被记录命令的执行时间点,以 UNIX 时间戳格式表示

查询执行时间,单位为微秒

执行的命令,以数组的形式排列

如果仅需要知道当前慢查询的数量,则使用命令SLOWLOG LEN即可:

127.0.0.1:6379> SLOWLOG LEN
(integer) 128

使用命令 SLOWLOG RESET 可以清空 慢日志 :

127.0.0.1:6379> SLOWLOG RESET
OK

提示:慢查询较多的情况下,可能会丢失部分慢查询命令,可以定期执行 SLOWLOG GET命令将慢查询日志持久化到其他存储(例如ES)中。然后制作可视化界面查询。