抛砖系列之redis监控命令


抛砖系列之redis监控命令

文章插图
前言redis是一款非常流行的kv数据库,以高性能著称 , 其高吞吐、低延迟等特性让广大开发者趋之若鹜,每每看到别人发出的redis故障报告都让我产生一种居安思危,以史为鉴的危机感 , 恰逢今年十一西安烟雨不断,抽时间学习了几个redis监控命令,和大家分享一波 。
redis-cli --stat【连续统计】 连续统计可能是实时监控 Redis 实例的鲜为人知但非常有用的功能之一,要启用此功能,请使用redis-cli --stat 。
redis-cli --stat 默认每秒输出一条新行,其中包含有用信息和每个采集点的请求次数差异 。使用此命令可以轻松了解内存使用情况、客户端连接计数以及有关已连接 Redis 数据库的各种其他统计信息 。
可以使用-i修改采样频率,默认值为1秒,如下面这个命令代表每2s采集一次数据:
redis-cli --stat -i 2------- data ------ --------------------- load -------------------- - child -keysmemclients blocked requestsconnections8890131.89M4701705992846 (+0)25958890131.93M4701705992897 (+51)25958890131.93M4701705992954 (+57)25958890131.97M4701705992991 (+37)25958890131.89M4701705993043 (+52)25958890131.97M4701705993088 (+45)25958890132.01M4701705993122 (+34)25958890132.01M4701705993168 (+46)25958890132.01M4701705993194 (+26)25958890131.93M4701705993267 (+73)2595
redis-cli --bigkeys【统计大key】这个命令用作键空间分析器,它扫描数据集中的大键 , 但也提供有关数据集所包含的数据类型的信息 。
# 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 hashfound so far '"hash_big"' with 6 fields[00.00%] Biggest setfound so far '"set_big"' with 6 members[00.00%] Biggest string found so far '"string_big"' with 979 bytes[00.00%] Biggest string found so far '"string_big_2"' with 1365 bytes-------- summary -------Sampled 5 keys in the keyspace!Total key length in bytes is 38 (avg len 7.60)Biggesthash found '"hash_big"' has 6 fieldsBiggest string found '"string_big_2"' has 1365 bytesBiggestset found '"set_big"' has 6 members0 lists with 0 items (00.00% of keys, avg size 0.00)1 hashs with 6 fields (20.00% of keys, avg size 6.00)3 strings with 2420 bytes (60.00% of keys, avg size 806.67)0 streams with 0 entries (00.00% of keys, avg size 0.00)1 sets with 6 members (20.00% of keys, avg size 6.00)0 zsets with 0 members (00.00% of keys, avg size 0.00)在输出的第一部分中,将报告遇到的每个大于前一个较大key(相同类型)的新key 。摘要部分提供有关 Redis 实例内数据的一般统计信息 。
该程序使用 SCAN 命令,因此它可以在繁忙的服务器上执行而不会影响操作,当然也可以使用-i选项来限制每个 SCAN 命令的指定秒数部分的扫描过程 。
例如,redis-cli --bigkeys  -i 1 代表每次SCAN执行之后sleep 1s 。
可以看到--bigkeys给出了每种数据结构的top 1 bigkey,同时给出了每种数据类型的键值个数以及平均大小 。
redis-cli monitor【监控命令执行】与“发布/订阅”模式类似,使用 MONITOR 命令后,将自动进入监视模式,Redis 实例接收的所有命令都将打印到标准输出中:
redis-cli monitor1665128881.578949 [0 127.0.0.1:46046] "COMMAND" "DOCS"1665128885.870333 [0 127.0.0.1:46046] "get" "a"1665128891.200705 [0 127.0.0.1:46046] "set" "a" "asdfasdfasd" "asdfasdf"1665128897.234390 [0 127.0.0.1:46046] "sadd" "test" "aaa"1665128902.439247 [0 127.0.0.1:46046] "smembers" "test"1665128906.257225 [0 127.0.0.1:46046] "smembers" "test"1665128910.073980 [0 127.0.0.1:46046] "smembers" "test"1665128914.688753 [0 127.0.0.1:46046] "hget" "all" "hello"1665128918.006031 [0 127.0.0.1:46046] "hget" "all" "hello"可以看到目前smembers和hget命令执行的比较频繁 , 可能是异常流量导致,需要引起我们的注意了 。
更方便的是redis-cli monitor可以和管道配合使用,比如redis-cli monitor | grep goods_test_001
redis-cli monitor |grep goods_test_0011665129150.063322 [0 127.0.0.1:46046] "get" "goods_test_001"1665129150.935202 [0 127.0.0.1:46046] "get" "goods_test_001"1665129151.486148 [0 127.0.0.1:46046] "get" "goods_test_001"1665129152.012097 [0 127.0.0.1:46046] "get" "goods_test_001"1665129152.550077 [0 127.0.0.1:46046] "get" "goods_test_001"1665129153.059130 [0 127.0.0.1:46046] "get" "goods_test_001"1665129153.595023 [0 127.0.0.1:46046] "get" "goods_test_001"1665129154.166608 [0 127.0.0.1:46046] "get" "goods_test_001"1665129154.687753 [0 127.0.0.1:46046] "get" "goods_test_001"1665129155.204012 [0 127.0.0.1:46046] "get" "goods_test_001"结合grep goods_test_001可以发现goods_test_001这个key当前有大量的读请求 。

推荐阅读