Redis监控命令和指标介绍

Redis监控的重要性

Redis监控的重要性体现在以下几个核心方面:

性能瓶颈发现与优化:

监控Redis的响应时间、QPS(每秒查询率)、吞吐量等性能指标,可以及时识别出系统在处理请求时是否存在性能瓶颈,比如某个命令响应慢、CPU使用过高、内存碎片化严重等,从而针对性地优化Redis配置、数据结构设计或应用代码逻辑。

故障预警与快速恢复:

实时监控Redis服务状态,当出现连接失败、主从同步延迟、持久化失败等问题时,可以触发报警系统及时通知运维人员,使得故障能在第一时间得到处理,减少因Redis服务中断导致的数据丢失风险或业务影响。

资源规划与管理:

Redis是内存数据库,内存使用情况至关重要。监控内存使用率、缓存命中率、淘汰策略执行情况等,有助于合理规划和分配内存资源,避免内存溢出,并确保数据的有效缓存。

集群健康状况:

对于分布式部署的Redis集群,监控每个节点的健康状况、流量分布、槽位迁移情况等,可以确保整个集群的稳定性和可靠性。
安全性保障:

监控Redis的安全相关指标,如访问控制、认证方式、数据加密等,可确保Redis服务免受恶意攻击或误操作的影响。

容量预测与规划:

根据历史数据增长趋势和当前使用情况,监控可以帮助进行容量规划,提前预警并扩容或优化存储结构,防止因数据量过大导致的服务性能下降。

Redis监控命令

Redis 提供了多种命令用于监控其运行状态和性能指标,以下是其中一些关键的监控命令:

monitor

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"

INFO

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
"

CONFIG GET/SET

redis-cli config get [parameter]
redis-cli config set [parameter] [value]

用于查看和修改Redis服务器的运行时配置。

redis> config get *max-*-entries* maxmemory1) "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"

CLIENT LIST

redis-cli client list

显示所有已连接客户端及其相关信息,有助于监控当前连接数和客户端状态。

–stat

redis-cli --stat

这个选项会周期性地输出Redis的关键性能指标,适合连续监控Redis的基本性能。

slowlog

下是如何进行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: 如果是主服务器,则显示当前有多少从服务器与其相连。

Sentinel或Cluster健康状态

如果使用Redis Sentinel或Cluster模式,监控各个节点的健康状况,包括主备切换、slot迁移等重要事件。

Redis Sentinel健康状态命令:

  • 查看监控的所有主服务器及其状态:
redis-cli -p 26379 sentinel masters

此命令会列出Sentinel实例监控的所有主服务器(masters),包括它们的当前状态、IP、端口、从属节点(slaves)信息以及最新的故障转移状态。

  • 查看单个主服务器的状态:
redis-cli -p 26379 sentinel master [master-name]

通过指定主服务器的名称,可以获得该主服务器及其从服务器的详细状态。

  • 检查Sentinel实例自身状态:
redis-cli -p 26379 info sentinel

该命令会返回Sentinel自身的各种状态信息,包括监视的主服务器列表、最近的故障转移操作、与其他Sentinel的连接状态等。

Redis Cluster健康状态检查:

  • 查看Cluster节点状态:
redis-cli -c -h [node-ip] -p [node-port] cluster nodes

此命令会列出集群中所有节点(包括主节点、从节点)的详细信息,包括节点ID、IP地址、端口、状态(master、slave、handshake、fail等)、槽位分配情况等。

持久化检查

监控RDB/AOF持久化任务是否正常完成,确保在服务器宕机时能够尽可能减少数据丢失。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/740763.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI新工具(20240312) Midjourney官方发布角色一致性功能;免费且开源的简历制作工具;精确克隆语调、控制声音风格

1: Midjourney角色一致性功能 使人物画像在多方面高度一致成为可能。 Midjourney的角色一致性功能的使用方法如下&#xff1a; ⭐在你的输入指令后面加上 --cref URL&#xff0c;其中URL是你选择的角色图像的链接。 ⭐你可以通过 --cw 参数来调整参照的强度&#xff0c;范围…

力扣- 704. 二分查找

二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4 解释…

python如何读取文件

这里的文件是txt文件&#xff0c;office文件不支持。 假如有一个pi_digits的txt文件&#xff0c;里面的内容是“3.1415926” 如果要读取这个文件的内容&#xff0c;需要调取pathlib模块&#xff0c;并把路径告知python。同时python文件必须要和目标读取文件在一个文件夹里。 …

springboot集成Quartz定时任务组件

文章目录 前言一、Quartz 是什么&#xff1f;下面是对 Java 中 Quartz 的主要概念的简单描述&#xff1a; 二、使用步骤总结 前言 平时开发中相信大家都经常用到定时任务吧&#xff0c;最近简单的就是直接使用Scheduled注解标注到方法上用注解的方式在项目运行时无法去对任务进…

【WEEK2】Learning Objectives and Summaries【SpringMVC】【English Version】

Learning Objectives: Getting Started with SpringMVC in Three Weeks - Week 2 Learning Content: Reference video tutorials【狂神说Java】SpringMVC最新教程IDEA版通俗易懂Using annotations to complete the MVC programControllerRestFul styleResult Jumping StyleDa…

剑指offer经典题目整理(四)

一、树的子结构 1.链接 树的子结构_牛客题霸_牛客网 (nowcoder.com) 2.描述 给两颗二叉树A B&#xff0c;判断B是不是A的子结构 3.思路 将问题拆解开来&#xff0c;首先是找到a树中子结构的位置&#xff0c;然后是判断是否相同&#xff0c;也就是说&#xff0c;我们需要去…

interFoam-UEqn.H/pEqn.H

压力方程 “pEqn.H” {volScalarField rAU("rAU", 1.0/UEqn.A()); // rAU:在速度方程的的最后一个解中&#xff0c;矩阵对角项系数的倒数surfaceScalarField rAUf("rAUf", fvc::interpolate(rAU)); //转换为表面标量场volVectorField HbyA(con…

36+程序员3站考研:国家线轻松拿捏

基本情况是&#xff1a;年龄较大&#xff0c;比36还大&#xff0c;本科是自考&#xff0c;十几年来一直从事编程相关工作。 第一年考数学太慌了&#xff0c;选择题全蒙的&#xff0c;结果填空题一道没算对&#xff0c;大题全不会&#xff0c;所以尽管总分280多但是数学没过国家…

java Lambda表达式如何支持静态方法引用

java Lambda表达式如何支持静态方法引用 在Java中&#xff0c;Lambda表达式支持静态方法引用&#xff0c;允许你直接使用静态方法作为Lambda表达式的实现。静态方法引用使用类名和方法名来引用静态方法。 下面是一个简单的示例&#xff0c;展示了如何在Lambda表达式中使用静态…

Chrome下载B站视频字幕的插件

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Netty源码剖析——bind()绑定端口的分析-上(三十)

1.服务器就是在这个bind()里启动完成的 2.Bind()代码&#xff0c;追踪到创建了一个端口对象&#xff0c;并做了一些空判断&#xff0c;核心代码 doBind public ChannelFuture bind(SocketAddress localAddress){ validate(); if(localAddressnull){ throw new NullPointerExc…

软考高级:敏捷方法概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

LED基础知识分享(一)

大家好&#xff0c;我是砖一。 今天给大家分享一下&#xff0c;LED的基础知识&#xff0c;有照明行业&#xff0c;或者对LED感兴趣的朋友&#xff0c;可以学习一下&#xff0c;希望对你有用~ 一&#xff0c;什么是LED (Light Emitting Diode)? 1&#xff0c;LED是一种发出某…

AssetBundle打包与加载

官方文档 参照视频 1.AssetBundle打包 1.1设置资源的命名和后缀 命名只支持小写 1.2创建Editor文件夹&#xff0c;在里面创建编辑器打包AssetBundle的脚本 using UnityEditor; using System.IO;public class CreateAssetBundles {[MenuItem("Assets/Build AssetBun…

【机器学习】样本、特征、标签:构建智能模型的三大基石

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

【python】(9)迭代与生成器

1. 迭代的概念与原理 迭代是一种重要的编程模式,它允许我们按顺序访问容器中的每个元素,而不必事先知道容器的大小。在 Python 中,几乎所有的容器对象都可以进行迭代,包括列表、元组、字典、集合等。迭代的实现依赖于两个核心概念:可迭代对象(Iterable)和迭代器(Itera…

【dart】常用数据类型

Number num 可以声明是整数,也可以是浮点数int 只能声明整数double 只能声明浮点数 main() {int cont 6;// cont 6.3;double core 90;print(core); // 90.0num age 18;num sum 20.9; }常用api main() {int cont 6;// cont 6.3;double core 90;print(core); // 90.0n…

C++(3/12)

自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c; 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和 #include <iostream>using name…

C++ std::list的merge()使用与分析

看到《C标准库第2版》对list::merge()的相关介绍&#xff0c;令我有点迷糊&#xff0c;特意敲代码验了一下不同情况的调用结果。 《C标准库第2版》对list::merge()的相关介绍 list::merge()定义 merge()的作用就是将两个list合并在一起&#xff0c;函数有2个版本&#xff1a;…

蓝桥杯(3.12)

1064: 【模板】埃氏筛法 import java.util.Scanner;public class Main{static final int N 2000010;static boolean[] vis new boolean[N];public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();vis[0] true;vis[1] true;for…