Redis的运维监控指标简述
自身状态
相关命令
- info
- 状态信息。能够查看实时的吞吐量(ops/sec),还能看到一些有用的运行时信息
- monitor
- 监控执行命令。监视服务端收到的命令
- latency
- 服务端内部的延迟监控命令,Redis为了高性能还是默认关闭了它
Redis慢查询监控
因redis是单线程模型(single-threaded server),即一次只能执行一个命令,如果命令耗时较长,其他命令就会被阻塞,进入队列排队等待
命令
#获取慢查询日志个数
slowlog len
#获取慢查询日志
slowlog get number
#清空慢查询日志
slowlog reset
配置
#慢查询日志长度,默认128个。建议大于1024个,因监控采集周期1分钟
slowlog-max-len
#慢查询日志阀值,建议1ms,命令执行耗时超过 1 毫秒,记录慢日志
slowlog-log-slower-than
具体的监控指标有哪些呢
服务器系统数据采集
- 服务器存活监控
- CPU
- 内存和swap
- 磁盘
- 网络
Redis Server数据采集
- Redis存活监控
- Redis 连接数监控
- Redis内存监控
综合性能监控
- Redis Keyspace。redis键空间的状态监控
- Redis qps
- Redis cmdstat_xxx
- Redis Keysapce hit ratio
- Redis fork
持久化监控指标
- 最近一次rdb持久化是否成功
- 最近一次成功生成rdb文件耗时秒数
- 离最近一次成功生成rdb文件,写入命令的个数
- 离最近一次成功rdb持久化的秒数
复制监控指标
- 复制连接状态
- redis角色
- 复制连接断开时间长度
- 主库多少秒未发送数据到从库
- 从库多少秒未向主库发送REPLCONF命令
- 从库是否设置只读
- 主库挂载的从库个数
- 复制积压缓冲区是否开启
- 复制积压缓冲大小
集群监控
- 实例是否启用集群模式
- 集群健康状态
- 集群数据槽slots分配情况
- 检测下线的数据槽slots个数
- 集群的分片数
- 集群的节点数
响应时间监控
- 最长响应时间(respond_time_max)
- 99%的响应时间长度 (respond_time_99_max)
- 99%的平均响应时间长度 (respond_time_99_avg)
- 95%的响应时间长度 (respond_time_95_max)
- 95%的平均响应时间长度 (respond_time_95_avg)
方案设计思路
- 指标采集。即采集redis提供的metric指标,所以方案中有时候会出现Agent,比如metricBeat
- 监控的数据持久化。只有将监控数据放到数据库,才能对比和长期监控
- 时序化。因为很多场景都会按照时间序列去展示 - 所以通常是用时序库或者针对时间列优化
- 可视化。比如常见的kibana,grafana等
- 按条件报警。因为运维不可能盯着看,只有引入报警配置,触发报警条件时即发出报警,比如短息提醒等;基于不同报警方式,平台可以提供插件支持等
相关工具
常见工具
redis-stat
是一个比较有名的redis指标可视化的监控工具,采用ruby开发,基于redis的info和monitor命令来统计,不影响redis性能
RedisLive
是采用python开发的redis的可视化及查询分析工具
redmon
提供了cli、admin的web界面,同时也能够实时监控redis
redis_exporter
为Prometheus提供了redis指标的exporter,支持Redis 2.x, 3.x, 4.x, 5.x, and 6.x,配合Prometheus以及grafana的Prometheus Redis插件,可以在grafana进行可视化及监控
grafana
工具选型
什么样的场景会谈到redis监控体系
- 部署架构采用Redis-Cluster模式
- 后台应用系统有几十个,应用实例数超过二百个
- 所有应用系统共用一套缓存集群
- 集群节点数几十个,加上容灾备用环境,节点数量翻倍
- 集群节点内存配置较高
构建Redis监控体系具备什么价值
- redis故障快速通知,定位故障点
- 分析redis故障的Root cause
- redis容量规划和性能管理
- redis硬件资源利用率和成本
监控体系化包含哪些维度
-
服务端
- 常用的CPU、内存、网络IO,磁盘IO,服务端运行的进程信息等
- Redis运行进程信息,包括服务端运行信息、客户端连接数、内存消耗、持久化信息 、键值数量、主从同步、命令统计、集群信息等
- Redis运行日志,日志中会记录一些重要的操作进程,如运行持久化时,可以有效帮助分析崩溃假死的程序
-
应用端
- 应用端、获取应用端使用Redis的一些行为,具体哪些应用哪些模块最占用 Redis资源、哪些应用哪些模块最消耗Redis资源、哪些应用哪些模块用法有误等
-
联合分析
- 联合分析结合服务端的运行与应用端使用的行为。一些造成服务端突然阻塞的原因,可能是应用端设置了Big Key或者是时间维度复杂的操作
有哪些成熟的监控方案呢
- ELK Stack
- 采集agent: metricBeat
- 收集管道:logstash
- DB: elasticSearch
- view和告警: kibana及插件
- fluent + Prometheus + Grafana(推荐)
- 采集指标来源: redis-export
- 收集管道:fluentd
- DB: Prometheus
- view和告警: Grafana及插件