最新消息:

Redis监控汇总(1/2)

Linux ipcpu 4894浏览

Redis监控汇总一.md

一、概述

对于任何运行在生产环境的软件,监控都是必不可少的一个环节。

我们在分析各种工具之前,先来看下redis都有哪些指标需要关注和监控。

Redis监控的用途有两种,一种是类似于zabbix,监控指标并用来报警,另外一种就是出现问题时,快速定位问题使用的。

各个数据库db的key数量、redis存储的key总数量
redis内存使用状况
redis使用CPU状况
redis当前的QPS
redis中数据请求的命中率
key的过期和逐出情况
当前redis的客户端情况
Redis网络出入带宽
redis客户端发起的命令排行(TOP 10 命令)
主从、RDB和AOF持久化及其他

redis自带了redis-cli工具,基本上可以覆盖以上一些指标,但是有很多指标需要经过进一步处理才可以显示。我们后面会逐个分析。

二、redis-cli命令

redis-cli是redis自带的客户端工具,可以执行丰富的redis命令,当然也提供了很多的监控数据。

2.1 info命令

info命令是redis最基本的监控数据

[root@Ali-BJ-OL-99 ~]# redis-cli info
# Server
redis_version:3.2.8
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:d3e3dd6ceee8d380
redis_mode:standalone
os:Linux 2.6.32-573.22.1.el6.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.4.7
process_id:6048
run_id:6971ef604fa47e0d243993e31e376175eab35583
tcp_port:6379
uptime_in_seconds:3732962
uptime_in_days:43
hz:10
lru_clock:10546323
executable:/usr/bin/redis-server
config_file:/etc/redis.conf
# Clients
##@@客户端情况
connected_clients:71
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory
##@@当前redis占用的内存,也显示了maxmemory和maxmemory_policy参数的值。
used_memory:13085437256
used_memory_human:12.19G
used_memory_rss:13872644096
used_memory_rss_human:12.92G
used_memory_peak:13085903160
used_memory_peak_human:12.19G
total_system_memory:16726142976
total_system_memory_human:15.58G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:13500000000
maxmemory_human:12.57G
maxmemory_policy:volatile-lru
mem_fragmentation_ratio:1.06
mem_allocator:jemalloc-4.0.3
# Persistence
##持久化相关内容
loading:0
rdb_changes_since_last_save:220962
rdb_bgsave_in_progress:1
rdb_last_save_time:1520495145
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:115
rdb_current_bgsave_time_sec:17
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
# Stats
total_connections_received:882320
total_commands_processed:2796368475
instantaneous_ops_per_sec:820   #QPS
total_net_input_bytes:206269274267
total_net_output_bytes:221172814051
instantaneous_input_kbps:56.02    #带宽数据
instantaneous_output_kbps:25.40
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:209363123
evicted_keys:79500926
keyspace_hits:722384216
keyspace_misses:128646755
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:194435
migrate_cached_sockets:0
# Replication
##@@主从相关内容
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
# CPU
##@@CPU状态,这个值需要进行计算后才能得出CPU利用率。
used_cpu_sys:89819.95
used_cpu_user:45773.93
used_cpu_sys_children:19337.14
used_cpu_user_children:514401.09
# Cluster
cluster_enabled:0
# Keyspace
db0:keys=13678267,expires=10984098,avg_ttl=550750775
##@@这里显示了各个数据库key的存放数目,也可以通过select db后,dbsize计算当前db中key的数量。

info命令只是总体显示了一些监控数据,redis-cli还有其他监控项目,比如

2.2 查看和杀掉客户端连接

##@@列出客户端
127.0.0.1:6379> CLIENT LIST
id=881455 addr=172.28.0.87:36377 fd=12 name= age=4882 idle=5 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=del
id=881976 addr=172.28.0.95:42077 fd=35 name= age=2334 idle=9 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=setnx
id=881899 addr=172.28.0.95:40057 fd=38 name= age=2729 idle=6 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=ping
##@@杀掉客户端(不实用,自己一会儿就连上了)
127.0.0.1:6379> CLIENT KILL 172.28.0.95:40057

2.3 stat命令

此命令可以显示key数量、内存、客户端数量、QPS情况,类似于iostat、vmstat之类每秒钟刷新一次,如下

[root@Ali-BJ-OL-99 fio]# redis-cli -h 127.0.0.1 -p 6379 --stat
------- data ------ --------------------- load -------------------- - child -
keys      mem      clients blocked requests            connections
12495867  11.93G  57      0      2774586381 (+0)    878430
12495972  11.93G  57      0      2774587430 (+1049)  878430
12496038  11.93G  57      0      2774588265 (+835)  878430
12496149  11.93G  57      0      2774589330 (+1065)  878430
12496225  11.93G  57      0      2774590345 (+1015)  878430
12496326  11.93G  57      0      2774591469 (+1124)  878430
12496428  11.93G  57      0      2774592548 (+1079)  878430      

如果你的redis设置了密码,需要加上参数"-a yourpassword"。

2.4 查看redis延迟

--latency, --latency-history 参数可以参看redis当前的响应延迟情况。

[root@Ali-BJ-OL-99 ~]# redis-cli -h 127.0.0.1 -p 6379 --latency
min: 7, max: 1230, avg: 66.22 (89 samples)

2.5 使用monitor开启实时监控

monitor命令会监控当前redis接受的命令和数据内容,这个命令会比较消耗资源,根据官网的测试,QPS会下降到原先的50%,需要谨慎使用。

[root@Ali-BJ-OL-99 ~]# redis-cli monitor
OK
1520496864.844638 [0 172.28.0.95:40594] "SETNX" "CSCustomer_5ad69f0b068f278e01c2ef5f701ec5a5" "1"
1520496864.845212 [0 172.28.0.27:10706] "GET" "lock_:4211022454185883_20003"
1520496864.846564 [0 172.28.0.27:10706] "DEL" "lock_:4211022454185883_20003"

我们可以将 redis-cli monitor数据写入到文件,然后就可以手动分析命令执行的次数。

[root@Ali-BJ-OL-99 ~]# cat m.log |awk '{print $4}' |sort |uniq -c |sort -nr
  3523 "SETNX"
  1488 "GET"
  1253 "SADD"
  1142 "PING"

2.6 使用bigkeys查找占用空间较大的key

--bigkeys这条命令会使用SCAN从redis里面查找占用空间最大的key,这会遍历redis数据库。
但是他只把最大的找出来了,不怎么实用,至少来个TOP10吧。

[root@Ali-BJ-OL-99 ~]# redis-cli --bigkeys
# Scanning the entire keyspace to find biggest keys as well as
# average sizes per key type.  You can use -i 0.1 to sleep 0.1 sec
# per 100 SCAN commands (not usually needed).
[00.00%] Biggest string found so far 'priv_key_78410' with 1 bytes
[00.09%] Biggest string found so far 'bigkey' with 573 bytes
[50.22%] Biggest string found so far 'bigkey2' with 606 bytes
-------- summary -------
Sampled 81697 keys in the keyspace!
Total key length in bytes is 1133020 (avg len 13.87)
Biggest string found 'bigkey2' has 606 bytes
81697 strings with 83563 bytes (100.00% of keys, avg size 1.02)
0 lists with 0 items (00.00% of keys, avg size 0.00)
0 sets with 0 members (00.00% of keys, avg size 0.00)
0 hashs with 0 fields (00.00% of keys, avg size 0.00)
0 zsets with 0 members (00.00% of keys, avg size 0.00)

转载请注明:IPCPU-网络之路 » Redis监控汇总(1/2)