微信搜索superit|邀请体验:大数据, 数据管理、OLAP分析与可视化平台 | 赞助作者:赞助作者

redis 性能监控和排查

redis aide_941 8℃

示例:获取最近2个慢查询命令 127.0.0.1:6381> SLOWLOG get 2

1)

1) (integer) 6

2) (integer) 1458734263

3) (integer) 74372

4) 1) "hgetall"

2) "max.dsp.blacklist"

2)

1) (integer) 5

2) (integer) 1458734258

3) (integer) 5411075

4) 1) "keys"

2) "max.dsp.blacklist" 分析slowlog query:

以第一个HGET命令为例分析,每个slowlog实体共4个字段:

* 字段1:1个整数,表示这个slowlog出现的序号,server启动后递增, 当前为6.

* 字段2:表示查询执行时的Unix时间戳.

* 字段3:表示查询执行微妙数,当前是74372微妙,约74ms.

* 字段4: 表示查询的命令和参数,如果参数很多或很大,只会显示部分并给数参数个数; 当前命令是"hgetall" "max.dsp.blacklist"

 

本文主要研究一下redis的监控工具

redis-stat

redis-stat是一个比较有名的redis指标可视化的监控工具,采用ruby开发,基于redis的info命令来统计,不影响redis性能。

  • docker运行

 

docker run --name redis-stat -p 8080:63790 -d insready/redis-stat --server 192.168.99.100
  • 运行实例图
    redis-stat-web.png

RedisLive

RedisLive是采用python开发的redis的可视化及查询分析工具

  • docker运行

 

docker run --name redis-live -p 8888:8888 -d snakeliwei/redislive
  • 运行实例图
    redis-live.png

访问http://192.168.99.100:8888/index.html

redmon

redmon提供了cli、admin的web界面,同时也能够实时监控redis

  • docker运行

 

docker run -p 4567:4567 -d  vieux/redmon -r redis://192.168.99.100:6379
  • 运行实例图
    dashboard (2).png

redis_exporter

redis_exporter为Prometheus提供了redis指标的exporter,支持Redis 2.x, 3.x and 4.x,配合Prometheus以及grafana的Prometheus Redis插件,可以在grafana进行可视化及监控

  • 运行实例图
    image

小结

redis-stat、RedisLive、redmon都是现成的redis监控工具,只能可视化指标不能监控,而基于redis_exporter以及grafana可以做到指标可视化以及监控报警,可以考虑集成到生产应用上。

doc

作者:go4it
链接:https://www.jianshu.com/p/831bf6c8af4f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

01 redis的性能指标

我们在做性能测试的时候,经常需要观察redis的运行状态,因此我们得先了解它的一些我们需要观察的指标。redis提供丰富命令来使用户更好的运作以及了解redis,不过我觉得只要执行redis-cli info命令,就可以了解redis的一个状态了,而且指标比较全面了,下面是个人选择的几个相对重要的指标。

connected_clients:68  #连接的客户端数量
used_memory_rss_human:847.62M #系统给redis分配的内存
used_memory_peak_human:794.42M  #内存使用的峰值大小
total_connections_received:619104 #服务器已接受的连接请求数量
instantaneous_ops_per_sec:1159 #服务器每秒钟执行的命令数量
instantaneous_input_kbps:55.85 #redis网络入口kps
instantaneous_output_kbps:3553.89 #redis网络出口kps
rejected_connections:0 #因为最大客户端数量限制而被拒绝的连接请求数量
expired_keys:0 #因为过期而被自动删除的数据库键数量
evicted_keys:0 #因为最大内存容量限制而被驱逐(evict)的键数量
keyspace_hits:0 #查找数据库键成功的次数
keyspace_misses:0 #查找数据库键失败的次数

我觉得在上面的指标中,2个指标是需要着重观察的。

内存使用

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

QPS

即每分钟执行的命令个数,即:(total_commands_processed2-total_commands_processed1)/span,为了实时得到QPS,可以设定脚本在后台运行,记录过去几分钟的total_commands_processed。在计算QPS时,利用过去的信息和当前的信息得出QPS的估计值。

02 redis问题分析方法

redis有个很好用的功能,就是类似于mysql的慢日志。在出现问题的时候,方便我们查看哪里阻塞了。

Slow log是 Redis 用来记录查询执行时间的日志系统,查询执行时间指的是不包括像客户端响应(talking)、发送回复等 IO 操作,而单单是执行一个查询命令所耗费的时间。

另外,slow log保存在内存里面,读写速度非常快,因此你可以放心地使用它,不必担心因为开启 slow log 而损害 Redis 的速度。

设置 SLOWLOG

Slow log 的行为由两个配置参数(configuration parameter)指定,可以通过改写 redis.conf 文件或者用 CONFIG GET 和 CONFIG SET 命令对它们动态地进行修改。

第一个选项是 slowlog-log-slower-than ,它决定要对执行时间大于多少微秒(microsecond,1秒 = 1,000,000 微秒)的查询进行记录。

例子1:

执行以下命令将让 slow log 记录所有查询时间大于等于 100 微秒的查询:

CONFIG SET slowlog-log-slower-than 100

例子2:

记录所有查询时间大于 1000 微秒的查询:

CONFIG SET slowlog-log-slower-than 1000

另一个选项是 slowlog-max-len ,它决定 slow log 最多能保存多少条日志, slow log 本身是一个 FIFO 队列,当队列大小超过 slowlog-max-len 时,最旧的一条日志将被删除,而最新的一条日志加入到 slow log,以此类推。

例子3:

让 slow log 最多保存 1000 条日志:

CONFIG SET slowlog-max-len 1000

查看 slow log

要查看 slow log ,可以使用 SLOWLOG GET 或者 SLOWLOG GET number 命令,前者打印所有 slow log ,最大长度取决于 slowlog-max-len 选项的值,而 SLOWLOG GET number 则只打印指定数量的日志,最新的日志会最先被打印。

清空日志

使用命令 SLOWLOG RESET 可以清空slow log。

03 redis监控方法

Redis监控最直接的方法就是使用系统提供的info命令,只需要执行下面一条命令,就能获得Redis系统的状态报告。

redis-cli info结果会返回 Server、Clients、Memory、Persistence、Stats、Replication、CPU、Keyspace 8个部分,从info大返回结果中提取相关信息,就可以达到有效监控的目的。

我就是利用这个命令结合shell,完成一个简单的redis监控,最核心的语句只有一条,利用了redis-cli info和shell的管道。

/opt/redis/redis-3.2.5/bin/redis-cli -a ***** info | grep -w “connected_clients” |awk -F’:’ ‘{print $2}’

其中:grep -w用于字符串精确匹配。

执行的结果如下:

在我自己的服务器上测试验证了下其中2个指标能否正确获取。

1、获取连接redis的客户端数目。

2、获取服务器每秒钟执行的命令数量。

当然,你可以在此脚本基础上根据自己需求做一些扩展、定制化,灵活方便,譬如把数据存储到数据库,利用一些图形化软件把数据可视化等等,这些可以让监控更加直观。最终大家可以做成如下的效果,可以实时查看。

更多性能测试相关学习可以关注公众号大话性能。更多好文章

转载请注明:SuperIT » redis 性能监控和排查

喜欢 (2)or分享 (0)