一、系统自带监控

1.1 Info

redis-cli info
# 获取所有信息
> info
# 获取内存相关信息,info 可以一次性获取所有的信息,也可以按块取信息
> info memory
# 获取复制相关信息
> info replication
# Info 指令显示的信息非常繁多,分为 9 大块,每个块都有非常多的参数,这 9 个块分别是:
(如果想要了解所有的参数细节,请参考阅读:https://redis.io/commands/info)

1、Server 服务器运行的环境参数

2、Clients 客户端相关信息

3、Memory 服务器运行内存统计数据

4、Persistence 持久化信息

5、Stats 通用统计数据

6、Replication 主从复制相关信息

7、CPU CPU 使用情况

8、Cluster 集群信息

9、KeySpace 键值对统计数量信息

比较重要的参数指标

instantaneous_ops_per_sec:789 # ops_per_sec: operations per second,也就是每秒操作数
connected_clients:124 #正在连接的客户端数量 ,client list列出所有的客户端连接
rejected_connections:0 #因为超出最大连接数限制而被拒绝的客户端连接次数
maxclients:10000 #最大连接数
maxmemory_human:100.00M #redis设置的最大内存
used_memory_human:827.46K #内存分配器 (jemalloc) 从操作系统分配的内存总量
used_memory_rss_human:3.61M #操作系统看到的内存占用 ,top命令看到的内存
used_memory_peak_human:829.41K #Redis 内存消耗的峰值
repl_backlog_size:1048576 # 复制积压缓冲区大小
sync_partial_err:0 #半同步失败次数

配合 linux下的 watch命令,实时监测 redis的内存开销和吞吐量 ,用作流量

watch -n 1 -d "redis-cli -p 6400 info |grep -e connected_clients -e used_memory_human -e used_memory_peak_human -e instantaneous -e evicted_keys"

1.2 Monitor

monitor的开启,会很大程度影响 redis本身的性能。监测 redis运行过程中的每个命令的信息。

redis-cli -p 6400 monitor

1.3 latency

ping操作,检测 server和 client间的网络延时,一般都是 1ms以内

redis-cli --latency

1.4 Intrinsic latency

redis的延时基准(命令本身的耗时),运行命令

redis-cli --intrinsic-latency 100

1.5 Latency monitor

redis运行过程中,可以对超出某个时间阈值的命令进行监控。开启监测的方式如下:

CONFIG SET latency-monitor-threshold 100 #ms

监测系统运行过程中 fork时间大于 10ms的 fork latency。

latency history fork

1.6 Slow log

开启记录 latency大于 100ms的命令和最大保留 1000条 slowlog

CONFIG SET slowlog-log-slower-than 100 #单位微妙 ,执行时间大于该值的 query才会被记录, 默认 10ms

CONFIG SET slowlog-max-len 1000 #慢查询最大的条数,超过则最早的被删除( FIFO队列)

查看 slowlog总条数

127.0.0.1:6379> SLOWLOG LEN
(integer) 4

读取

#开启记录latency大于100ms的命令和最大保留1000条slowlog
CONFIG SET slowlog-log-slower-than 100 #单位微秒,执行时间大于该值的query才会被记录,默认10ms
CONFIG SET slowlog-max-len 1000 #慢查询最大的条数,超过则最早的被删除(FIFO队列)

#查看slowlog总条数
127.0.0.1:6379> SLOWLOG LEN
(integer) 4

#读取慢查询日志
/*
1)日志的标识 id
2)发生的时间戳
3)命令耗时
4)执行的命令和参数
*/
127.0.0.1:6379> SLOWLOG GET
1) 1) (integer) 1 #唯一性(unique)的日志标识符,只有在Redis服务器重启的时候才会重置,可以避免对日志的重复处理(比如邮件通知)
   2) (integer) 1559237232 #被记录命令的执行时间点,以Unix时间戳格式表示
   3) (integer) 13 #命令耗时,以微秒为单位
   4) 1) "set" #执行的命令,以数组的形式排列
      2) "aaa"
      3) "bbb"