Redis监控技巧(转)

来自:http://blog.nosqlfan.com/html/4166.htmlhtml

Redis 监控最直接的方法固然就是使用系统提供的 info 命令来作了,你只须要执行下面一条命令,就能得到 Redis 系统的状态报告。linux

redis-cli info

内存使用

若是 Redis 使用的内存超出了可用的物理内存大小,那么 Redis 极可能系统会被 OOM Killer杀掉。针对这一点,你能够经过 info 命令对 used_memory 和 used_memory_peak 进行监控,为使用内存量设定阈值,并设定相应的报警机制。固然,报警只是手段,重要的是你得预先计划好,当内存使用量过大后,你应该作些什么,是清除一些没用的冷数据,仍是把 Redis 迁移到更强大的机器上去。git

持久化

若是由于你的机器或 Redis 自己的问题致使 Redis 崩溃了,那么你惟一的救命稻草可能就是 dump 出来的 rdb文件了,因此,对 Redis dump 文件进行监控也是很重要的。你能够经过对rdb_last_save_time 进行监控,了解你最近一次 dump 数据操做的时间,还能够经过对rdb_changes_since_last_save 进行监控来知道若是这时候出现故障,你会丢失多少数据。github

主从复制

若是你设置了主从复制模式,那么你最好对复制的状况是否正常作一些监控,主要是对 info 输出中的 master_link_status 进行监控,若是这个值是 up,那么说明同步正常,若是是 down,那么你就要注意一下输出的其它一些诊断信息了。好比下面这些:web

role:slave master_host:192.168.1.128 master_port:6379 master_link_status:down master_last_io_seconds_ago:-1 master_sync_in_progress:0 master_link_down_since_seconds:1356900595

Fork 性能

当 Redis 持久化数据到磁盘上时,它会进行一次 fork 操做,经过 fork 对内存的 copy on write 机制最廉价的实现内存镜像。可是虽然内存是 copy on write 的,可是虚拟内存表是在 fork 的瞬间就须要分配,因此 fork 会形成主线程短期的卡顿(中止全部读写操做),这个卡顿时间和当前 Redis 的内存使用量有关。一般 GB 量级的 Redis 进行 fork 操做的时间在毫秒级。你能够经过对 info 输出的 latest_fork_usec 进行监控来了解最近一次 fork 操做致使了多少时间的卡顿。redis

配置一致

Redis 支持使用 CONFIG SET 操做来实现运行实的配置修改,这很方便,但同时也会致使一个问题。就是经过这个命令动态修改的配置,是不会同步到你的配置文件中去的。因此当你由于某些缘由重启 Redis 时,你使用 CONFIG SET 作的配置修改就会丢失掉,因此咱们最好保证在每次使用 CONFIG SET 修改配置时,也把配置文件一块儿相应地改掉。为了防止人为的失误,因此咱们最好对配置进行监控,使用 CONFIG GET 命令来获取当前运行时的配置,并与 redis.conf 中的配置值进行对比,若是发现两边对不上,就启动报警。sql

慢日志

Redis 提供了 SLOWLOG 指令来获取最近的慢日志,Redis 的慢日志是直接存在内存中的,因此它的慢日志开销并不大,在实际应用中,咱们经过 crontab 任务执行 SLOWLOG 命令来获取慢日志,而后将慢日志存到文件中,并用 Kibana 生成实时的性能图表来实现性能监控。数据库

值得一提的是,Redis 的慢日志记录的时间,仅仅包括 Redis 自身对一条命令的执行时间,不包括 IO 的时间,好比接收客户端数据和发送客户端数据这些时间。另外,Redis 的慢日志和其它数据库的慢日志有一点不一样,其它数据库偶尔出现 100ms 的慢日志可能都比较正常,由于通常数据库都是多线程并发执行,某个线程执行某个命令的性能可能并不能表明总体性能,可是对 Redis多线程

来讲,它是单线程的,一旦出现慢日志,可能就须要立刻获得重视,最好去查一下具体是什么缘由了。并发

监控服务

-Sentinel

Sentinel 是 Redis 自带的工具,它能够对 Redis 主从复制进行监控,并实现主挂掉以后的自动故障转移。在转移的过程当中,它还能够被配置去执行一个用户自定义的脚本,在脚本中咱们就可以实现报警通知等功能。

-Redis Live

Redis Live 是一个更通用的 Redis 监控方案,它的原理是定时在 Redis 上执行 MONITOR 命令,来获取当前 Redis 当前正在执行的命令,并经过统计分析,生成web页面的可视化分析报表。

-Redis Faina

Redis Faina 是由著名的图片分享应用 instagram 开发的 Redis 监控服务,其原理和 Redis Live 相似,都是对经过 MONITOR 来作的。

数据分布

弄清 Redis 中数据存储分布是一件很难的是,好比你想知道哪类型的 key 值占用内存最多。下面是一些工具,能够帮助你对 Redis 的数据集进行分析。

-Redis-sampler

Redis-sampler 是 Redis 做者开发的工具,它经过采样的方法,可以让你了解到当前

Redis 中的数据的大体类型,数据及分布情况。

-Redis-audit

Redis-audit 是一个脚本,经过它,咱们能够知道每一类 key 对内存的使用量。它能够提供的数据有:某一类 key 值的访问频率如何,有多少值设置了过时时间,某一类 key 值使用内存的大小,这很方便让咱们能排查哪些 key 不经常使用或者压根不用。

-Redis-rdb-tools

Redis-rdb-tools

跟 Redis-audit 功能相似,不一样的是它是经过对 rdb 文件进行分析来取得统计数据的。

相关文章
相关标签/搜索