监控 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