拋磚系列之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當前有大量的讀請求 。

推薦閱讀