Redis快取【監控指標】
1、監控指標
參考:
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();
}
}
}
}