监控Redis其实是一件很容易的事情,因为它本身就记录了相当丰富的统计数据。我们可以通过INFO
命令获取这些数据。
INFO
INFO
命令提供了详尽的运行信息和统计数据,可分为服务器信息、内存使用状况、CPU使用状况等。这些在官方文档中有详细的说明,本文不再赘述。
信息虽全,但并不是所有都是需要时时监控的。因此,用好INFO
的重点在于该选取哪些指标。一般来说,我们会重点关注以下几个指标:
- instantaneous_ops_per_sec:实时的每秒操作数
- used_memory:Redis当前使用的内存大小;设置了最大内存限制时尤其需要关注
- used_memory_rss:Redis进程实际占用的内存大小
- used_cpu_sys/used_cpu_user:CPU用量
- instantaneous_input_kbps/instantaneous_output_kbps:实时I/O流量
除了INFO
外,我们还可以借助SLOWLOG
和MONITOR
这两个命令更加完善我们的监控系统。
SLOWLOG
慢查询是影响应用性能和数据库吐吞的一个重要因素。特別是对于Redis这样的单线程程序,一条命令执行时间过长意味着在它执行过程中发生的任何请求都会被阻塞。
Redis中集成了一个慢查询系统,能够记录执行时间超过一定阈值的命令。它记录的信息包括:
- 这条记录的id
- 开始执行的时间戳
- 执行了多少微秒
- 这个命令及它的参数
我们可以通过SLOWLOG GET
来查看这些记录。我遇到过的一个极端的记录是一个请求超过十万个key的MGET
操作,花了超过50ms……
MONITOR
MONITOR
命令可以持续不断地返回Redis收到的每一条命令。通过它,我们可以方便地了解到应用与Redis的所有交互,可以细致地分析数据流。
需要注意的是,MONITOR
会给Redis带来不小的开销。根据Redis官方的benchmark,仅有一个客户端执行此命令时,服务端的性能就下降了超过50%。
我一般会在用终端连接Redis时就直接执行这个命令开始monitor:
redis-cli -h hostname -p port MONITOR
Redis本身并没有提供dashboard,但通过以上几个命令DIY一个dashboard并不是一件难事。基本思路是:
- 定时查询
INFO
和SLOWLOG
,解析出关注的指标 - 直接将指标数据发往前端,或存储在数据库中(可以是Redis本身)
- 开发前端以适当的图表展示指标数据
一些开源Redis监控工具,如redis-stat、Redmon等便是这样实现的。
如果有在使用Graphite这类工具,那监控Redis会更简单,也更容易集成进现有的监控和告警系统中。只需要将定时查询的指标数据发往Graphite即可。
网友评论