Redis實用監控工具一覽
Redis已經成為web應用開發不可或缺的一個組成部分,在專案中的應用越來越廣泛,這篇文章就來講講那些關於Redis監控的那點事。
vredis-benchmark
1.1 簡介
第一個就介紹一下,Redis自帶的效能檢測工具redis-benchmark, 該工具可以模擬 N 個客戶端同時發出 Y 個請求。 可以使用 redis-benchmark -h 來檢視基準引數。
1.2 命令格式:
redis-benchmark [-h ] [-p ] [-c ] [-n <requests]> [-k ]
1.3 引數介紹:
序號 | 選項 | 描述 | 預設值 |
---|---|---|---|
1 | -h | 指定伺服器主機名 | 127.0.0.1 |
2 | -p | 指定伺服器埠 | 6379 |
3 | -s | 指定伺服器 socket | |
4 | -c | 指定併發連線數 | 50 |
5 | -n | 指定請求數 | 10000 |
6 | -d | 以位元組的形式指定 SET/GET 值的資料大小 | 2 |
7 | -k | 1=keep alive 0=reconnect | 1 |
8 | -r | SET/GET/INCR 使用隨機 key, SADD 使用隨機值 | |
9 | -P | 通過管道傳輸 <numreq> 請求 | 1 |
10 | -q | 強制退出 redis。僅顯示 query/sec 值 | |
11 | --csv | 以 CSV 格式輸出 | |
12 | -l | 生成迴圈,永久執行測試 | |
13 | -t | 僅執行以逗號分隔的測試命令列表。 | |
14 | -I | Idle 模式。僅開啟 N 個 idle 連線並等待。 |
1.4 例項:
1.4.1 同時執行1000個請求來檢測效能:
redis-benchmark -n 1000 -q
1.4.2 50個併發請求,10000個請求,檢測Redis效能:
redis-benchmark -h localhost -p 6379 -c 50 -n 10000
[root@localhost toutou]# redis-benchmark -h localhost -p 6379 -c 50 -n 10000 ====== PING_INLINE ====== 10000 requests completed in 0.11 seconds 50 parallel clients 3 bytes payload keep alive: 1 96.25% <= 1 milliseconds 98.38% <= 2 milliseconds 99.01% <= 3 milliseconds 100.00% <= 4 milliseconds 88495.58 requests per second ====== PING_BULK ====== 10000 requests completed in 0.10 seconds 50 parallel clients 3 bytes payload keep alive: 1 97.74% <= 1 milliseconds 100.00% <= 2 milliseconds 95238.10 requests per second ====== SET ====== 10000 requests completed in 0.11 seconds 50 parallel clients 3 bytes payload keep alive: 1 98.44% <= 1 milliseconds 100.00% <= 1 milliseconds 93457.95 requests per second ====== GET ====== 10000 requests completed in 0.11 seconds 50 parallel clients 3 bytes payload keep alive: 1 98.33% <= 1 milliseconds 99.13% <= 2 milliseconds 100.00% <= 2 milliseconds 93457.95 requests per second ====== INCR ====== 10000 requests completed in 0.10 seconds 50 parallel clients 3 bytes payload keep alive: 1 98.28% <= 1 milliseconds 100.00% <= 1 milliseconds 95238.10 requests per second ====== LPUSH ====== 10000 requests completed in 0.10 seconds 50 parallel clients 3 bytes payload keep alive: 1 98.70% <= 1 milliseconds 100.00% <= 1 milliseconds 97087.38 requests per second ====== RPUSH ====== 10000 requests completed in 0.10 seconds 50 parallel clients 3 bytes payload keep alive: 1 98.66% <= 1 milliseconds 100.00% <= 1 milliseconds 95238.10 requests per second ====== LPOP ====== 10000 requests completed in 0.15 seconds 50 parallel clients 3 bytes payload keep alive: 1 93.78% <= 1 milliseconds 96.51% <= 2 milliseconds 97.35% <= 3 milliseconds 98.41% <= 4 milliseconds 99.02% <= 5 milliseconds 99.23% <= 6 milliseconds 99.46% <= 7 milliseconds 99.96% <= 8 milliseconds 99.97% <= 9 milliseconds 100.00% <= 9 milliseconds 67567.57 requests per second ====== RPOP ====== 10000 requests completed in 0.31 seconds 50 parallel clients 3 bytes payload keep alive: 1 65.78% <= 1 milliseconds 84.10% <= 2 milliseconds 90.96% <= 3 milliseconds 94.19% <= 4 milliseconds 95.72% <= 5 milliseconds 97.05% <= 6 milliseconds 98.33% <= 7 milliseconds 98.80% <= 8 milliseconds 99.40% <= 9 milliseconds 99.72% <= 10 milliseconds 100.00% <= 14 milliseconds 31746.03 requests per second ====== SADD ====== 10000 requests completed in 0.19 seconds 50 parallel clients 3 bytes payload keep alive: 1 93.00% <= 1 milliseconds 96.88% <= 2 milliseconds 98.33% <= 3 milliseconds 98.92% <= 6 milliseconds 98.94% <= 7 milliseconds 98.95% <= 9 milliseconds 99.04% <= 10 milliseconds 99.48% <= 12 milliseconds 99.61% <= 14 milliseconds 99.62% <= 15 milliseconds 99.99% <= 16 milliseconds 100.00% <= 16 milliseconds 52083.33 requests per second ====== HSET ====== 10000 requests completed in 0.11 seconds 50 parallel clients 3 bytes payload keep alive: 1 95.90% <= 1 milliseconds 99.95% <= 2 milliseconds 100.00% <= 2 milliseconds 90909.09 requests per second ====== SPOP ====== 10000 requests completed in 0.11 seconds 50 parallel clients 3 bytes payload keep alive: 1 97.04% <= 1 milliseconds 99.75% <= 2 milliseconds 99.78% <= 3 milliseconds 100.00% <= 3 milliseconds 90909.09 requests per second ====== LPUSH (needed to benchmark LRANGE) ====== 10000 requests completed in 0.11 seconds 50 parallel clients 3 bytes payload keep alive: 1 96.48% <= 1 milliseconds 99.46% <= 2 milliseconds 99.95% <= 3 milliseconds 100.00% <= 3 milliseconds 87719.30 requests per second ====== LRANGE_100 (first 100 elements) ====== 10000 requests completed in 0.33 seconds 50 parallel clients 3 bytes payload keep alive: 1 32.63% <= 1 milliseconds 93.24% <= 2 milliseconds 99.83% <= 3 milliseconds 100.00% <= 3 milliseconds 30303.03 requests per second ====== LRANGE_300 (first 300 elements) ====== 10000 requests completed in 0.85 seconds 50 parallel clients 3 bytes payload keep alive: 1 2.65% <= 1 milliseconds 23.01% <= 2 milliseconds 53.33% <= 3 milliseconds 77.25% <= 4 milliseconds 91.47% <= 5 milliseconds 98.58% <= 6 milliseconds 99.99% <= 7 milliseconds 100.00% <= 7 milliseconds 11764.71 requests per second ====== LRANGE_500 (first 450 elements) ====== 10000 requests completed in 1.22 seconds 50 parallel clients 3 bytes payload keep alive: 1 1.01% <= 1 milliseconds 9.09% <= 2 milliseconds 28.25% <= 3 milliseconds 50.31% <= 4 milliseconds 68.06% <= 5 milliseconds 81.18% <= 6 milliseconds 90.78% <= 7 milliseconds 96.96% <= 8 milliseconds 99.43% <= 9 milliseconds 100.00% <= 9 milliseconds 8196.72 requests per second ====== LRANGE_600 (first 600 elements) ====== 10000 requests completed in 1.57 seconds 50 parallel clients 3 bytes payload keep alive: 1 0.61% <= 1 milliseconds 4.90% <= 2 milliseconds 14.77% <= 3 milliseconds 28.67% <= 4 milliseconds 44.56% <= 5 milliseconds 59.45% <= 6 milliseconds 72.38% <= 7 milliseconds 82.29% <= 8 milliseconds 90.01% <= 9 milliseconds 95.42% <= 10 milliseconds 98.34% <= 11 milliseconds 99.78% <= 12 milliseconds 100.00% <= 12 milliseconds 6357.28 requests per second ====== MSET (10 keys) ====== 10000 requests completed in 0.19 seconds 50 parallel clients 3 bytes payload keep alive: 1 68.40% <= 1 milliseconds 98.61% <= 2 milliseconds 100.00% <= 3 milliseconds 53763.44 requests per second [root@localhost toutou]#
vredis-cli
2.1 簡介
檢視redis的連線及讀寫操作
2.2 命令格式
redis-cli -h xx -p yy monitor
2.3 例項:
2.4 redis-cli info:
Redis 監控最直接的方法就是使用系統提供的 info 命令,只需要執行下面一條命令,就能獲得 Redis 系統的狀態報告。
# Server redis_version:5.0.2 # Redis 的版本 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:bf5d1747be5380f redis_mode:standalone os:Linux 2.6.32-220.7.1.el6.x86_64 x86_64 arch_bits:64 multiplexing_api:epoll gcc_version:4.4.7 #gcc版本 process_id:49324 # 當前 Redis 伺服器程序id run_id:bbd7b17efcf108fdde285d8987e50392f6a38f48 tcp_port:6379 uptime_in_seconds:1739082 # 執行時間(秒) uptime_in_days:20 # 執行時間(天) hz:10 lru_clock:1734729 config_file:/home/s/apps/RedisMulti_video_so/conf/zzz.conf # Clients connected_clients:1 #連線的客戶端數量 client_longest_output_list:0 client_biggest_input_buf:0 blocked_clients:0 # Memory used_memory:821848 #Redis分配的記憶體總量 used_memory_human:802.59K used_memory_rss:85532672 #Redis分配的記憶體總量(包括記憶體碎片) used_memory_peak:178987632 used_memory_peak_human:170.70M #Redis所用記憶體的高峰值 used_memory_lua:33792 mem_fragmentation_ratio:104.07 #記憶體碎片比率 mem_allocator:tcmalloc-2.0 # Persistence loading:0 rdb_changes_since_last_save:0 #上次儲存資料庫之後,執行命令的次數 rdb_bgsave_in_progress:0 #後臺進行中的 save 操作的數量 rdb_last_save_time:1410848505 #最後一次成功儲存的時間點,以 UNIX 時間戳格式顯示 rdb_last_bgsave_status:ok rdb_last_bgsave_time_sec:0 rdb_current_bgsave_time_sec:-1 aof_enabled:0 #redis是否開啟了aof 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:5705 #執行以來連線過的客戶端的總數量 total_commands_processed:204013 # 執行以來執行過的命令的總數量 instantaneous_ops_per_sec:0 rejected_connections:0 sync_full:0 sync_partial_ok:0 sync_partial_err:0 expired_keys:34401 #執行以來過期的 key 的數量 evicted_keys:0 #執行以來刪除過的key的數量 keyspace_hits:2129 #命中key 的次數 keyspace_misses:3148 #沒命中key 的次數 pubsub_channels:0 #當前使用中的頻道數量 pubsub_patterns:0 #當前使用中的模式數量 latest_fork_usec:4391 # Replication role:master #當前例項的角色master還是slave 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 used_cpu_sys:1551.61 used_cpu_user:1083.37 used_cpu_sys_children:2.52 used_cpu_user_children:16.79 # Keyspace db0:keys=3,expires=0,avg_ttl=0 #各個資料庫的 key 的數量,以及帶有生存期的 key 的數量
redis-cli info
結果會返回 Server、Clients、Memory、Persistence、Stats、Replication、CPU、Keyspace 8個部分。從info大返回結果中提取相關資訊,就可以達到有效監控的目的。
vshowlog
3.1 簡介
redis的slowlog是redis用於記錄記錄慢查詢執行時間的日誌系統。由於slowlog只儲存在記憶體中,因此slowlog的效率很高,完全不用擔心會影響到redis的效能。Slowlog是Redis從2.2.12版本引入的一條命令。
3.2 命令格式
在redis-cli中有關於slowlog的設定:
CONFIG SET slowlog-log-slower-than 6000
CONFIG SET slowlog-max-len 25
3.3 例項:
上面介紹的都是關於Redis自帶的命令化效能查詢工具。下面介紹介紹一些第三方的Redis視覺化效能監控工具。
vRedisLive
4.1 簡介
RedisLive是由Python編寫的開源的圖形化監控工具。核心服務部分只包括一個web服務和基於Redis自帶的Info命令以及monitor命令的監控服務。支援多例項監控,監控資訊可以使用redis儲存和sqlite持久化儲存。
4.2 安裝
4.2.1 安裝依賴環境
RedisLive是由Python2.X編寫的,所以最好使用Python2.7來執行RedisLive,在CentOS 7中預安裝了Python2.7,但沒有安裝Python的包管理器pip。
yum install epel-release sudo yum install python-pip pip install --upgrade pip pip install tornado pip install redis pip install python-dateutil
4.2.2 安裝RedisLive
git clone https://github.com/nkrode/RedisLive.git
4.2.3 修改配置檔案redis-live.conf
cd RedisLive/src
//按照以下方式修改配置檔案 { "RedisServers": [ #在此處新增需要監控的redis例項 { "server": "127.0.0.1", #redis監聽地址,此處為本機 "port" : 6379, #redis埠號,可以通過lsof -i | grep redis-ser檢視 redis-server埠號 "password" : "some-password" #redis認證密碼,如果沒有可以刪除該行,注意json格式 } ], "DataStoreType" : "redis", #監控資料儲存方案的配置,可選擇redis或sqllite #用來儲存監控資料的 Redis 例項 "RedisStatsServer": { "server" : "127.0.0.1", "port" : 6379, "password" : "some-password" }, #監控資料持久化資料儲存配置 "SqliteStatsStore" : { "path": "db/redislive.sqlite" #redis資料檔案 } }
redis-live.conf的配置可以參考redis-live.conf.example
4.3 啟動
啟動監控服務,每60秒監控一次
./redis-monitor.py --duration=60
再次開啟一個終端,進入/root/RedisLive/src目錄,啟動web服務
./redis-live.py
4.4 效果圖
vredis-faina
5.1 簡介
5.1.1 背景
redis-faina是由Instagram開發並開源的一個 Redis 查詢分析小工具。Instagram團隊曾經使用 PGFouine 來作為其PostgreSQL的查詢分析工具,他們覺得Redis也需要一個類似的工具來進行query分析工作,於是開發了 redis-faina。
5.1.1 概念
redis-faina 是通過Redis的 MONITOR命令來實現的,通過對在Redis上執行的query進行監控,統計出一段時間的query特性。
5.2 安裝
git clone https://github.com/facebookarchive/redis-faina.git
5.3 命令介紹
[root@localhost toutou]# cd redis-faina/ [root@localhost redis-faina]# ls heroku-redistogo-faina.sh LICENSE README.md redis-faina.py [root@localhost redis-faina]# ./redis-faina.py -h usage: redis-faina.py [-h] [--prefix-delimiter PREFIX_DELIMITER] [--redis-version REDIS_VERSION] [input] positional arguments: input File to parse; will read from stdin otherwise optional arguments: -h, --help show this help message and exit --prefix-delimiter PREFIX_DELIMITER String to split on for delimiting prefix and rest of key --redis-version REDIS_VERSION Version of the redis server being monitored [root@localhost redis-faina]#
其中 --prefix-delimiter
主要用於統計字首的key的資料。
可以通過 redis MONITOR
命令以及管道進行分析,例如:
redis-cli -p 6379 MONITOR | head -n | ./redis-faina.py [options]
或者
redis-cli -p 6379 MONITOR > outfile.txt
./redis-faina.py ./outfile.txt
Overall Stats ======================================== Lines Processed 117773 Commands/Sec 11483.44 Top Prefixes ======================================== friendlist 69945 followedbycounter 25419 followingcounter 10139 recentcomments 3276 queued 7 Top Keys ======================================== friendlist:zzz:1:2 534 followingcount:zzz 227 friendlist:zxz:1:2 167 friendlist:xzz:1:2 165 friendlist:yzz:1:2 160 friendlist:gzz:1:2 160 friendlist:zdz:1:2 160 friendlist:zpz:1:2 156 Top Commands ======================================== SISMEMBER 59545 HGET 27681 HINCRBY 9413 SMEMBERS 9254 MULTI 3520 EXEC 3520 LPUSH 1620 EXPIRE 1598 Command Time (microsecs) ======================================== Median 78.25 75% 105.0 90% 187.25 99% 411.0 Heaviest Commands (microsecs) ======================================== SISMEMBER 5331651.0 HGET 2618868.0 HINCRBY 961192.5 SMEMBERS 856817.5 MULTI 311339.5 SADD 54900.75 SREM 40771.25 EXEC 28678.5 Slowest Calls ======================================== 3490.75 "SMEMBERS" "friendlist:zzz:1:2" 2362.0 "SMEMBERS" "friendlist:xzz:1:3" 2061.0 "SMEMBERS" "friendlist:zpz:1:2" 1961.0 "SMEMBERS" "friendlist:yzz:1:2" 1947.5 "SMEMBERS" "friendlist:zpz:1:2" 1459.0 "SISMEMBER" "friendlist:hzz:1:2" "zzz" 1416.25 "SMEMBERS" "friendlist:zhz:1:2" 1389.75 "SISMEMBER" "friendlist:zzx:1:2" "zzz"
v部落格總結
關於Redis的監控工具還有很多,這裡就不一一列舉了,下面給出其它幾款優秀的Redis監控工具連結,感興趣的可以看看。
其他監控工具:
- https://github.com/junegunn/redis-stat
- https://github.com/steelThread/redmon
- https://github.com/oliver006/redis_exporter
作 者:請叫我頭頭哥
出 處:http://www.cnblogs.com/toutou/
關於作者:專注於基礎平臺的專案開發。如有問題或建議,請多多賜教!
版權宣告:本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結。
特此宣告:所有評論和私信都會在第一時間回覆。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信我
聲援博主:如果您覺得文章對您有幫助,可以點選文章右下角【推薦】一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!