1、监控指标
参考:https://redis.io/commands/info
1.1、性能指标:Performance
Name | Description |
latency | Redis响应一个请求的时间 |
instantaneous_ops_per_sec | 平均每秒处理请求总数 |
hi rate(calculated) | 缓存命中率(计算出来的 |
1.2、内存指标: Memory
Name | Description |
used_memory | 已使用内存 |
mem_fragmentation_ratio | 内存碎片率 |
evicted_keys | 由于最大内存限制被移除的key的数量 |
blocked_clients | 由于BLPOP,BRPOP,or BRPOPLPUSH而备阻塞的客户端 |
1.3、基本活动指标:Basic activity
redis连接了多少客户端 通过观察其数量可以确认是否存在意料之外的连接。如果发现数量不对劲,就可以使用lcient list指令列出所有的客户端链接地址来确定源头。
Name | Description |
connected_clients | 客户端连接数 |
conected_laves | slave数量 |
master_last_io_seconds_ago | 最近一次主从交互之后的秒数 |
keyspace | 数据库中的key值总数 |
1.4. 持久性指标: Persistence
Name | Description |
rdb_last_save_time | 最后一次持久化保存磁盘的时间戳 |
rdb_changes_sice_last_save | 自最后一次持久化以来数据库的更改数 |
1.5、错误指标:Error
由于超出最大连接数限制而被拒绝的客户端连接次数,如果这个数字很大,则意味着服务器的最大连接数设置得过低,需要调整maxclients。
Name | Description |
rejected_connections | 由于达到maxclient限制而被拒绝的连接数 |
keyspace_misses | key值查找失败(没有命中)次数 |
master_link_down_since_seconds | 主从断开的持续时间(以秒为单位) |
注:以上标红的为必须要监控的指标参数。
2、监控方式
- redis-benchmark
- redis-stat
- redis-faina
- redislive
- redis-cli
- monitor
- showlog
1.get:获取慢查询日志
2.len:获取慢查询日志条目数
3.reset:重置慢查询日志
相关配置:- slowlog-log-slower-than 1000 # 设置慢查询的时间下线,单位:微秒
- slowlog-max-len 100 # 设置慢查询命令对应的日志显示长度,单位:命令数
- info(可以一次性获取所有的信息,也可以按块获取信息)
使用info命令获取所有与Redis服务相关的信息
1.server:服务器运行的环境参数
2.clients:客户端相关信息
3.memory:服务器运行内存统计数据
4.persistence:持久化信息
5.stats:通用统计数据
6.Replication:主从复制相关信息
7.CPU:CPU使用情况
8.cluster:集群信息
9.Keypass:键值对统计数量信息
2.1、终端info命令使用
登录redis-cli查看redis相关监控信息:
// pub1:/home/test/redis-5.0.3/src % ./redis-cli -h iotrtdb1 -p 6379-c -a root.2020
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
pub1:6379> info
# Server
redis_version:5.0.3 # redis版本号
redis_git_sha1:00000000 #Git SHA1
redis_git_dirty:0 #Git dirty flag
redis_build_id:a71f8e9236e51d3e
redis_mode:cluster #redis模式
os:Linux 4.9.0-0.bpo.1-linx-security-amd64 x86_64 #操作系统
arch_bits:64 #架构32 or 64
multiplexing_api:epoll #event loop mechanism used by Redis
atomicvar_api:atomic-builtin
gcc_version:4.8.5 #编译redis server的GCC版本
process_id:7466 #server的进程号
run_id:10fc45b5d4b20eb222fbbe6ed8c37cbe6af0b6b7 #server的随机id(cluster和sentinel使用)
tcp_port:17500 #tcp/ip监控端口
uptime_in_seconds:5963209 #启动的总时间(单位秒)
uptime_in_days:69 #启动总时间(单位天)
hz:10
configured_hz:10
lru_clock:9840536 #每分钟会递增的一个clock,用于LRU管理
executable:/home/d5000/test/redis-5.0.3/src/./redis-server #服务执行命令位置
config_file:/home/d5000/test/redis_cluster/17500/redis.conf #配置文件位置
# Clients
connected_clients:129 #连接的客户端数量
client_recent_max_input_buffer:2 #当前client中最长的output list
client_recent_max_output_buffer:0 #当前client中最大的input buffer
blocked_clients:0 #由于BLPOP,BRPOP,or BRPOPLPUSH而被阻塞的客户端
# Memory
used_memory:197812400 # 已使用内存
used_memory_human:188.65M #内存分配器从操作系统分配的内存总量
used_memory_rss:171941888 #redis占用的总内存(包括内存碎片)
used_memory_rss_human:163.98M #操作系统看到的内存占用,top命令看到的内存
used_memory_peak:223458312 #redis占用的内存峰值
used_memory_peak_human:213.11M # redis内存消耗的峰值
used_memory_peak_perc:88.52%
used_memory_overhead:65087662
used_memory_startup:1449384
used_memory_dataset:132724738
used_memory_dataset_perc:67.59%
allocator_allocated:198244296
allocator_active:201465856
allocator_resident:211529728
total_system_memory:33718718464
total_system_memory_human:31.40G
used_memory_lua:37888
used_memory_lua_human:37.00K # lua脚本引擎占用的内存大小
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
allocator_frag_ratio:1.02
allocator_frag_bytes:3221560
allocator_rss_ratio:1.05
allocator_rss_bytes:10063872
rss_overhead_ratio:0.81
rss_overhead_bytes:-39587840
mem_fragmentation_ratio:0.87 #内存碎片率
mem_fragmentation_bytes:-25828256
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_clients_slaves:0
mem_clients_normal:2215710
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0 #编译的时候选择的内存分配器版本
active_defrag_running:0
lazyfree_pending_objects:0
# Persistence
loading:0 #是否有dump在执行中
rdb_changes_since_last_save:12842719696 # 自最后一次持久化以来数据库的更改数
rdb_bgsave_in_progress:0 #是否有RDB save在执行
rdb_last_save_time:1597712847 # 最后一次持久化保存磁盘的时间戳
rdb_last_bgsave_status:ok #最后一次 RDB save操作的状态
rdb_last_bgsave_time_sec:-1 #最后一次RDB save操作持续时间,单位秒
rdb_current_bgsave_time_sec:-1 #当前执行中的RDB save操作持续时间
rdb_last_cow_size:0
aof_enabled:0 #aof功能是否打开
aof_rewrite_in_progress:0 #aof的rewraite操作是否在执行
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1 #最后一次AOF的rewrite操作持续时间
aof_current_rewrite_time_sec:-1 #当前执行中的AOF的rewrite操作的持续时间
aof_last_bgrewrite_status:ok #上次AOF的rewrite操作状态
aof_last_write_status:ok #最后一次AOF的write操作状态
aof_last_cow_size:0
# Stats
total_connections_received:2575285 #服务器已接受的连接请求数量
total_commands_processed:28499626091 #server处理的命令的总数
instantaneous_ops_per_sec:1 #服务器每秒钟执行的命令数量
total_net_input_bytes:1989994886010
total_net_output_bytes:649513988586
instantaneous_input_kbps:0.03 #redis网络入口kps
instantaneous_output_kbps:7.00 #redis网络出口kps
rejected_connections:0 #因为最大客户端数量限制而被拒绝的连接请求数量
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:9 #因为过期而被自动删除的数据库键数量
expired_stale_perc:0.00
expired_time_cap_reached_count:0
evicted_keys:0 # 由于最大内存限制被移除的key的数量
keyspace_hits:15397635196 #查找数据库键成功的次数
keyspace_misses:253663939 #查找数据库键失败的次数
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0 #最后一次fork操作持续时间(单位微秒)
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0
# Replication
role:master
connected_slaves:0
master_replid:8f7b4c2cf289076e3a7d122871575155fbe5f2fa
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
# CPU
used_cpu_sys:8020.712000 #redis server消耗的系统CPU
used_cpu_user:34253.984000 #redis server消耗的用户CPU
used_cpu_sys_children:0.000000 #后台进程消耗的系统CPU
used_cpu_user_children:0.000000 #后台进程消耗的用户CPU
# Cluster
cluster_enabled:1 #实例是否启用集群模式,1代表是
# Keyspace
db0:keys=1116133,expires=0,avg_ttl=0 #各个数据库的 key 的数量,以及带有生存期的 key 的数量
交互式info命令使用:
./redis-cli -h ip地址 -p 端口号 [集群加-c] -a 登录密码 info 按块获取信息 | grep 需要过滤的参数
示例:
2.2、Java客户端jedis.info()获取监控信息
1)依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
2)示例
public class RedisInfoTest {
public static void main(String[] args) {
Jedis jedis = null;
try {
jedis = new Jedis("192.168.1.92", 6379); //地址
jedis.auth("root.2020); //密码
String info = jedis.info();
System.out.println(info);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (jedis != null) {
jedis.close();
}
}
}
}