如何监控Redis

监控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外,我们还可以借助SLOWLOGMONITOR这两个命令更加完善我们的监控系统。

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并不是一件难事。基本思路是:

  1. 定时查询INFOSLOWLOG,解析出关注的指标
  2. 直接将指标数据发往前端,或存储在数据库中(可以是Redis本身)
  3. 开发前端以适当的图表展示指标数据

一些开源Redis监控工具,如redis-statRedmon等便是这样实现的。

如果有在使用Graphite这类工具,那监控Redis会更简单,也更容易集成进现有的监控和告警系统中。只需要将定时查询的指标数据发往Graphite即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容