赞
踩
Redis监控的重要性体现在以下几个核心方面:
监控Redis的响应时间、QPS(每秒查询率)、吞吐量等性能指标,可以及时识别出系统在处理请求时是否存在性能瓶颈,比如某个命令响应慢、CPU使用过高、内存碎片化严重等,从而针对性地优化Redis配置、数据结构设计或应用代码逻辑。
实时监控Redis服务状态,当出现连接失败、主从同步延迟、持久化失败等问题时,可以触发报警系统及时通知运维人员,使得故障能在第一时间得到处理,减少因Redis服务中断导致的数据丢失风险或业务影响。
Redis是内存数据库,内存使用情况至关重要。监控内存使用率、缓存命中率、淘汰策略执行情况等,有助于合理规划和分配内存资源,避免内存溢出,并确保数据的有效缓存。
对于分布式部署的Redis集群,监控每个节点的健康状况、流量分布、槽位迁移情况等,可以确保整个集群的稳定性和可靠性。
安全性保障:
监控Redis的安全相关指标,如访问控制、认证方式、数据加密等,可确保Redis服务免受恶意攻击或误操作的影响。
根据历史数据增长趋势和当前使用情况,监控可以帮助进行容量规划,提前预警并扩容或优化存储结构,防止因数据量过大导致的服务性能下降。
Redis 提供了多种命令用于监控其运行状态和性能指标,以下是其中一些关键的监控命令:
redis-cli -h [hostname] -p [port] -a [password] monitor
monitor 命令会进入实时命令监听模式,它会打印出Redis服务器接收到的所有请求命令,这对于调试和分析服务器上的活动十分有用。但是请注意,此命令会带来较大的性能开销,因此不适合在生产环境中持续开启。
$ redis-cli monitor
1339518083.107412 [0 127.0.0.1:60866] "keys" "*"
1339518087.877697 [0 127.0.0.1:60866] "dbsize"
1339518090.420270 [0 127.0.0.1:60866] "set" "x" "6"
1339518096.506257 [0 127.0.0.1:60866] "get" "x"
1339518099.363765 [0 127.0.0.1:60866] "eval" "return redis.call('set','x','7')" "0"
1339518100.363799 [0 lua] "set" "x" "7"
1339518100.544926 [0 127.0.0.1:60866] "del" "x"
redis-cli -h [hostname] -p [port] -a [password] info
info 命令提供了大量关于Redis服务器的状态信息,包括但不限于服务器信息、客户端连接、CPU使用情况、内存统计、持久化、复制、集群、键空间统计等详细信息。你可以根据需求指定section:
redis-cli info [section]
可选参数可用于选择特定信息部分:
server:有关 Redis 服务器的一般信息
clients:客户端连接部分
memory:内存消耗相关信息
persistence: RDB 和 AOF 相关信息
stats: 一般统计
replication:主/副本复制信息
cpu:CPU消耗统计
commandstats:Redis 命令统计信息
latencystats:Redis 命令延迟百分位分布统计信息
sentinel:Redis Sentinel 部分(仅适用于 Sentinel 实例)
cluster:Redis 集群部分
modules: 模块部分
keyspace: 数据库相关统计
errorstats:Redis 错误统计
它还可以采用以下值:
all:返回所有部分(不包括模块生成的部分)
default:仅返回默认的节集
everything:包括 和allmodules
redis> INFO "# Server redis_version:7.2.4 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:affe2dab174e19c6 redis_mode:standalone os:Linux 5.15.0-1015-aws x86_64 arch_bits:64 monotonic_clock:POSIX clock_gettime multiplexing_api:epoll atomicvar_api:c11-builtin gcc_version:10.2.1 process_id:1 process_supervised:no run_id:aefa5a2dac16d8c0afbf87b3c69eb466bb51828f tcp_port:6379 server_time_usec:1710252278275665 uptime_in_seconds:1190771 uptime_in_days:13 hz:10 configured_hz:10 lru_clock:15753462 executable:/data/redis-server config_file:/etc/redis/redis.conf io_threads_active:0 listener0:name=tcp,bind=*,bind=-::*,port=6379 # Clients connected_clients:2 cluster_connections:0 maxclients:10000 client_recent_max_input_buffer:20480 client_recent_max_output_buffer:0 blocked_clients:0 tracking_clients:0 clients_in_timeout_table:0 total_blocking_keys:0 total_blocking_keys_on_nokey:0 # Memory used_memory:80362144 used_memory_human:76.64M used_memory_rss:88260608 used_memory_rss_human:84.17M used_memory_peak:80398528 used_memory_peak_human:76.67M used_memory_peak_perc:99.95% used_memory_overhead:23999280 used_memory_startup:867280 used_memory_dataset:56362864 used_memory_dataset_perc:70.90% allocator_allocated:80471392 allocator_active:80764928 allocator_resident:84983808 total_system_memory:16585560064 total_system_memory_human:15.45G used_memory_lua:31744 used_memory_vm_eval:31744 used_memory_lua_human:31.00K used_memory_scripts_eval:0 number_of_cached_scripts:0 number_of_functions:0 number_of_libraries:0 used_memory_vm_functions:32768 used_memory_vm_total:64512 used_memory_vm_total_human:63.00K used_memory_functions:184 used_memory_scripts:184 used_memory_scripts_human:184B maxmemory:4294967296 maxmemory_human:4.00G maxmemory_policy:allkeys-lru allocator_frag_ratio:1.00 allocator_frag_bytes:293536 allocator_rss_ratio:1.05 allocator_rss_bytes:4218880 rss_overhead_ratio:1.04 rss_overhead_bytes:3276800 mem_fragmentation_ratio:1.10 mem_fragmentation_bytes:7900288 mem_not_counted_for_evict:0 mem_replication_backlog:0 mem_total_replication_buffers:0 mem_clients_slaves:0 mem_clients_normal:24328 mem_cluster_links:0 mem_aof_buffer:0 mem_allocator:jemalloc-5.3.0 active_defrag_running:0 lazyfree_pending_objects:0 lazyfreed_objects:0 # Persistence loading:0 async_loading:0 current_cow_peak:0 current_cow_size:0 current_cow_size_age:0 current_fork_perc:0.00 current_save_keys_processed:0 current_save_keys_total:0 rdb_changes_since_last_save:1248137 rdb_bgsave_in_progress:0 rdb_last_save_time:1709061507 rdb_last_bgsave_status:ok rdb_last_bgsave_time_sec:-1 rdb_current_bgsave_time_sec:-1 rdb_saves:0 rdb_last_cow_size:0 rdb_last_load_keys_expired:0 rdb_last_load_keys_loaded:0 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_rewrites:0 aof_rewrites_consecutive_failures:0 aof_last_write_status:ok aof_last_cow_size:0 module_fork_in_progress:0 module_fork_last_cow_size:0 # Stats total_connections_received:21 total_commands_processed:1555738 instantaneous_ops_per_sec:3 total_net_input_bytes:123750190 total_net_output_bytes:44626194 total_net_repl_input_bytes:0 total_net_repl_output_bytes:0 instantaneous_input_kbps:0.23 instantaneous_output_kbps:0.02 instantaneous_input_repl_kbps:0.00 instantaneous_output_repl_kbps:0.00 rejected_connections:0 sync_full:0 sync_partial_ok:0 sync_partial_err:0 expired_keys:37130 expired_stale_perc:0.04 expired_time_cap_reached_count:0 expire_cycle_cpu_milliseconds:105868 evicted_keys:0 evicted_clients:0 total_eviction_exceeded_time:0 current_eviction_exceeded_time:0 keyspace_hits:359354 keyspace_misses:26884 pubsub_channels:0 pubsub_patterns:0 pubsubshard_channels:0 latest_fork_usec:0 total_forks:0 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 total_active_defrag_time:0 current_active_defrag_time:0 tracking_total_keys:0 tracking_total_items:0 tracking_total_prefixes:0 unexpected_error_replies:0 total_error_replies:2558 dump_payload_sanitizations:0 total_reads_processed:1556726 total_writes_processed:1556711 io_threaded_reads_processed:0 io_threaded_writes_processed:0 reply_buffer_shrinks:4447 reply_buffer_expands:4463 eventloop_cycles:13409463 eventloop_duration_sum:2752178221 eventloop_duration_cmd_sum:1089101756 instantaneous_eventloop_cycles_per_sec:12 instantaneous_eventloop_duration_usec:123 acl_access_denied_auth:0 acl_access_denied_cmd:942 acl_access_denied_key:0 acl_access_denied_channel:0 # Replication role:master connected_slaves:0 master_failover_state:no-failover master_replid:92fef281b2fd4ad63906bd1724167c0a8051ac94 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:978.109037 used_cpu_user:2248.144019 used_cpu_sys_children:0.006738 used_cpu_user_children:0.001050 used_cpu_sys_main_thread:977.680699 used_cpu_user_main_thread:2247.648975 # Modules # Errorstats errorstat_BUSYGROUP:count=3 errorstat_ERR:count=1383 errorstat_NOAUTH:count=1 errorstat_NOPERM:count=942 errorstat_WRONGTYPE:count=229 # Cluster cluster_enabled:0 # Keyspace db0:keys=472023,expires=1003,avg_ttl=865010813668214 "
redis-cli config get [parameter]
redis-cli config set [parameter] [value]
用于查看和修改Redis服务器的运行时配置。
redis> config get *max-*-entries* maxmemory
1) "maxmemory"
2) "0"
3) "hash-max-listpack-entries"
4) "512"
5) "hash-max-ziplist-entries"
6) "512"
7) "set-max-intset-entries"
8) "512"
9) "zset-max-listpack-entries"
10) "128"
11) "zset-max-ziplist-entries"
12) "128"
redis-cli client list
显示所有已连接客户端及其相关信息,有助于监控当前连接数和客户端状态。
redis-cli --stat
这个选项会周期性地输出Redis的关键性能指标,适合连续监控Redis的基本性能。
下是如何进行Redis慢查询监控的几个关键步骤:
配置慢查询日志:
在Redis配置文件redis.conf中,可以设置慢查询的阈值(单位通常为微秒)和日志长度限制:
slowlog-log-slower-than <milliseconds>
slowlog-max-len <number_of_records>
当命令执行时间超过设定的阈值时,Redis会将该命令添加到慢查询日志中。slowlog-max-len参数则决定了要保留的慢查询记录数量,当超出该数量时,最早的记录会被自动移除。
查看慢查询日志:
使用Redis命令行工具,可以执行如下命令来查看慢查询日志:
slowlog get [n]
其中 [n] 表示你想获取的慢查询记录的数量,默认情况下显示所有记录。该命令会返回一个包含命令ID、执行消耗时间、执行时间戳以及具体的命令和参数列表。
redis-cli -h [hostname] -p [port] -a [password] info memory
监控Redis实例的内存占用情况,包括总内存使用量、已用内存、空闲内存、内存碎片率等,当达到预设阈值时触发告警,以便及时扩容或优化数据结构。
执行以上命令后,Redis将会返回一系列关于内存使用的统计数据,其中包括:
used_memory:Redis当前分配的内存量(字节数)。
used_memory_human:以人类可读格式(如KB, MB, GB)表示的已使用内存大小。
used_memory_peak:Redis内存占用峰值(字节数)。
used_memory_lua:Lua脚本引擎所使用的内存大小。
mem_fragmentation_ratio:内存碎片率,即已分配内存与实际使用内存之间的比率。
maxmemory:Redis配置的最大内存限制(如果设置了的话)。
maxmemory_human:最大内存限制以人类可读格式表示。
maxmemory_policy:当达到maxmemory限制时,Redis所采用的内存淘汰策略。
evicted_keys:因为内存不足而被主动删除的键数量。
redis-cli -h [hostname] -p [port] -a [password] info replication
在主从架构下,监控主从之间的复制延迟,确保数据一致性。
如果你正在查看的是从服务器,命令相同,只需要将主机地址替换为从服务器的地址。执行上述命令后,Redis会返回关于复制(replication)状态的一系列信息,其中包括:
role: 显示服务器的角色是master还是slave。
master_host, master_port: 如果是 slave,则显示主服务器的地址和端口。
master_link_status: 显示与主服务器的连接状态,例如up或down。
master_last_io_seconds_ago: 显示最后一次与主服务器交互的时间(以秒为单位)。
master_sync_in_progress: 是否正在进行同步操作,0表示没有同步正在进行,1表示正在进行同步。
slave_repl_offset: 从服务器的复制偏移量,表示已从主服务器接收了多少条命令。
second_repl_offset_age: 复制偏移量的年龄,表明这个信息多久未更新。
connected_slaves: 如果是主服务器,则显示当前有多少从服务器与其相连。
如果使用Redis Sentinel或Cluster模式,监控各个节点的健康状况,包括主备切换、slot迁移等重要事件。
redis-cli -p 26379 sentinel masters
此命令会列出Sentinel实例监控的所有主服务器(masters),包括它们的当前状态、IP、端口、从属节点(slaves)信息以及最新的故障转移状态。
redis-cli -p 26379 sentinel master [master-name]
通过指定主服务器的名称,可以获得该主服务器及其从服务器的详细状态。
redis-cli -p 26379 info sentinel
该命令会返回Sentinel自身的各种状态信息,包括监视的主服务器列表、最近的故障转移操作、与其他Sentinel的连接状态等。
redis-cli -c -h [node-ip] -p [node-port] cluster nodes
此命令会列出集群中所有节点(包括主节点、从节点)的详细信息,包括节点ID、IP地址、端口、状态(master、slave、handshake、fail等)、槽位分配情况等。
监控RDB/AOF持久化任务是否正常完成,确保在服务器宕机时能够尽可能减少数据丢失。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。