监控Redis
# 150.监控Redis
了解Redis的运行状况也很重要
# 耗时命令日志
当一条命令执行时间超过限制时,Redis会将该命令的执行时间等信息加入耗时命令日志(slow log)以供开发者查看。可以通过配置文件的 slowlog-log-slower-than参数设置这一限制,要注意单位是微秒(1 000 000 微秒相当于1秒),默认值是10 000。耗时命令日志存储在内存中,可以通过配置文件的 slowlog-max-len 参数来限制记录的条数。
使用 SLOWLOG GET命令来获得当前的耗时命令日志,如:
redis> SLOWLOG GET
1) 1) (integer) 4
2) (integer) 1356806413
3) (integer) 58
4) 1) "get"
2) "foo"
2) 1) (integer) 3
2) (integer) 1356806408
3) (integer) 34
4) 1) "set"
2) "foo"
3) "bar"
2
3
4
5
6
7
8
9
10
11
12
每条日志都由以下4个部分组成:
(1)该日志唯一ID;
(2)该命令执行的Unix时间;
(3)该命令的耗时时间,单位是微秒
(4)命令及其参数。
提示 为了产生一些耗时命令日志作为演示,这里将 slowlog-log-slower-than参数值设置为0,即记录所有命令。如果设置为负数则会关闭耗时命令日志。
# MONITOR监控
Redis提供了MONITOR命令来监控Redis执行的所有命令,redis-cli同样支持这个命令,如在redis-cli中执行MONITOR:
redis> MONITOR
OK
2
这时 Redis 执行的任何命令都会在 redis-cli 中打印出来,如我们打开另一个 redis-cli执行 SET foo bar命令,在之前的redis-cli中会输出如下内容:
1356806981.885237 [0 127.0.0.1:57339] "SET" "foo" "bar
MONITOR命令非常影响Redis的性能,一个客户端使用MONITOR命令会降低Redis将近一半的负载能力。所以MONITOR命令只适合用来调试和纠错。
补充知识 Instagram团队开发了一个基于 MONITOR 命令的 Redis 查询分析程序redis-faina。redis-faina可以根据MONITOR命令的监控结果分析出最常用的命令、访问最频繁的键等信息,对了解Redis的使用情况帮助很大。
redis-faina 的项目地址是 https://github.com/Instagram/redis-faina,直接下载其中的redis-faina.py文件即可使用。
redis-faina.py的输入值为一段时间的MONITOR命令执行结果。如:
redis-cli MONITOR | head -n <要分析的命令数> | ./redis-faina.py