当前位置:

首页 > 编程开发 > 怎么用ES做Redis监控

怎么用ES做Redis监控

Redis Assistant
Redis Assistant

Redis Assistant 是一款为Redis设计的高效可视化管理与监控工具,提供多种操作模式,高效处理服务器数据。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

立即下载
¥19
Windows/macOS/Linux 2026-08-22
正版软件 Windows macOS软件 Linux 数据库管理工具

序言图示:Redis热度排名Redis当下很流行,也很好用,无论是在业务应用系统,还是在大数据领域都有重要的地位;但Redis也很脆弱,用不好,问题多多。2012年以前都是以memcached为主,之后转到Redis阵营,经历过单实例模式、主从模式、哨兵模式、代理模式,集群模式,真正公司层面用得好的很少,对于Redis掌控都很片面,导致实际项目中问题不少。Redis要想用得好,需要整体掌握3个层面:开发层面架构层面运维层面其中架构与运维至关重要,多数中小型企业仅在开发层面满足常用功能,数据规模稍微大些,业

本文目录

    序言

    怎么用ES做Redis监控

    图示:Redis热度排名

    Redis当下很流行,也很好用,无论是在业务应用系统,还是在大数据领域都有重要的地位;但Redis也很脆弱,用不好,问题多多。2012年以前都是以memcached为主,之后转到Redis阵营,经历过单实例模式、主从模式、哨兵模式、代理模式,集群模式,真正公司层面用得好的很少,对于Redis掌控都很片面,导致实际项目中问题不少。

    Redis要想用得好,需要整体掌握3个层面:

    • 开发层面

    • 架构层面

    • 运维层面

    其中架构与运维至关重要,多数中小型企业仅在开发层面满足常用功能,数据规模稍微大些,业务复杂度高些,就容易出现各种架构与运维问题。本文主旨是探讨Redis监控体系,目前业界当然也有很多成熟的产品,但个人觉得都很常规,只做到一些粗粒度的监控,  没有依据业务需求特点因地制宜去细化,从而反向的提供架构开发优化方案。

    本文内容将围绕如下几个问题展开讨论:

    Redis监控体系有哪些方面?

    构建Redis监控体系我们做了哪些工作?

    Redis监控体系应该细化到什么程度?

    为什么使用ELK构建监控体系?

    需求背景

    项目描述

    公司业务范围属于车联网行业,有上百万级的真实车主用户,业务项目围绕车主生活服务展开,为了提高系统性能,引入了Redis作为缓存中间件,具体描述如下:

    • 部署架构采用Redis-Cluster模式;

    • 后台应用系统有几十个,应用实例数超过二百个;

    • 所有应用系统共用一套缓存集群;

    • 集群节点数几十个,加上容灾备用环境,节点数量翻倍;

    • 集群节点内存配置较高。

    怎么用ES做Redis监控

    图示:Redis集群架构与应用架构示意图

    问题描述

    系统刚开始关于Redis的一切都很正常,随着应用系统接入越来越多,应用系统子模块接入也越来越多,开始出现一些问题,应用系统有感知,集群服务端也有感知,如下描述:

    • 集群节点崩溃;

    • 集群节点假死;

    • 某些后端应用访问集群响应特别慢。

    其实问题的根源都是架构运维层面的欠缺,对于Redis集群服务端的运行监控其实很好做,本身也提供了很多直接的命令方式,但只能看到服务端的一些常用指标信息,无法深入分析,治标不治本,对于Redis的内部运行一无所知,特别是对于业务应用如何使用Redis集群一无所知:

    • Redis集群使用的热度问题?

    • 哪些应用占用的Redis内存资源多?

    • 哪些应用占用Redis访问数最高?

    • 哪些应用使用Redis类型不合理?

    • 应用系统模块使用Redis资源分布怎么样?

    • 应用使用Redis集群的热点问题?

    监控体系

    监控的目的不仅仅是监控Redis本身,而是为了更好的使用Redis。传统的监控一般比较单一化,没有系统化,但对于Redis来说,个人认为至少包括:一是服务端,二是应用端,三是服务端与应用端联合分析。

    服务端:

    • 服务端首先是操作系统层面,常用的CPU、内存、网络IO,磁盘IO,服务端运行的进程信息等;

    • Redis运行进程信息,包括服务端运行信息、客户端连接数、内存消耗、持久化信息 、键值数量、主从同步、命令统计、集群信息等;

    • Redis运行日志,日志中会记录一些重要的操作进程,如运行持久化时,可以有效帮助分析崩溃假死的程序。

    应用端:

    应用端、获取应用端使用Redis的一些行为,具体哪些应用哪些模块最占用  Redis资源、哪些应用哪些模块最消耗Redis资源、哪些应用哪些模块用法有误等。

    联合分析:

    联合分析结合服务端的运行与应用端使用的行为,如:一些造成服务端突然阻塞的原因,可能是应用端设置了一个很大的缓存键值,或者使用的键值列表,数据量超大造成阻塞。

    解决方案

    为什么会选择Elastic-Stack技术栈呢?

    多数的第三方只监控一些指标,对于明细日志还是采用ELK(Elasticsearch、Logstash、Kibana),也就是说用第三方监控指标之后,还得再搭建一个ELK集群看明细日志。

    再就是说Elastic-Stack技术栈整合的优势,指标也可以、日志文件也可以,从采集开始到存储、到最终报表面板都整合得非常好,门槛很低。

    下面详细聊聊我们具体怎么做的,做了哪些工作?

    服务端系统

    Elastic-Stack家族有Metricbeat产品,支持系统层面的信息收集,简单的配置下Elastic集群地址和系统指标模块即可上线,并且会在Kibana中创建已有的系统监控面板,非常简单快速,一般运维就可以搞定。

    怎么用ES做Redis监控

    图示:metrcibeat示意图

    系统指标信息收集配置样例如下:

    怎么用ES做Redis监控

    服务端集群

    收集Redis集群运行信息,业界通常做法都是采用Redis提供的info命令,定期收集。

    info获取的信息包括如下:

    • server:Redis服务器的一般信息

    • clients:客户端的连接部分

    • memory:内存消耗相关信息

    • persistence:RDB和AOF相关信息

    • stats:一般统计

    • replication:主/从复制信息

    • cpu:统计CPU的消耗command

    • stats:Redis命令

    • 统计cluster:Redis集群信息

    • keyspace:数据库的相关统计

    Elastic-Stack家族的Metricbeat产品也支持Redis模块,也是采用info命令获取的,但是有一些实现的局限性,如下描述:

    • Redis集群的主从关系信息,Metricbeats表达不出来;

    • Redis集群的一些统计信息,永远是累计增加的,如命令数,如果要获取命令数的波峰值,则无法得到;

    • Redis集群状态信息变化,Metricbeats是无法动态的,如集群新增节点、下线节点等。

    所以这里参考了CacheCloud产品(搜狐团队开源),我们自定义设计开发了  Agent,定时从Redis集群采集信息,并在内部做一些统计数值的简单计算,转换成Json,写入到本地文件,通过Logstash采集发送到Elasticsearch。

    怎么用ES做Redis监控

    图示:Redis服务端运行信息采集架构示意图

    服务端日志

    Redis服务端运行日志采集很简单,直接通过Elastic-Stack家族的Filebeat产品,其中有Redis模块,配置一下Elastic服务端,日志文件地址即可。

    怎么用ES做Redis监控

    图示:服务端日志采集过程

    Redis运行日志采集配置:

    怎么用ES做Redis监控

    应用端

    应用端信息采集是整个Redis监控体系最重要的部分,也是实现最麻烦、链路最长的。首先是修改jedis(技术栈Java)源码,增加埋点代码,重新编译并引用到应用项目中,应用端对于Redis集群的任何命令操作,都会被捕捉,并记录下关键信息,之后写入到本地文件。

    怎么用ES做Redis监控

    图示:Redis应用端行为采集架构图

    应用端采集的数据格式如下:

    怎么用ES做Redis监控

    图示:应用端采集的数据案例

    jedis修改:

    jedis改造记录的信息如下:

    • r_host:访问Redis集群的服务器地址与端口,其中某一台ip:port;

    • r_cmd:执行命令类型、如get、set、hget、hset等各种;

    • r_start:执行命令开始时间;

    • r_cost:时间消耗;

    • r_size:获取键值大小或者设置键值大小;

    • r_key:获取键值名称;

    • r_keys:键值的二级拆分,数组的长度不限制。这里有必要强调一下,所有应用系统共用的是一套集群,所以应用系统的键值都是有规范的,按照特殊符号分割,如:"应用名称_系统模块_动态变量_xxx“,主要便于我们区分。

    在jedis改造有几处地方,如下:

    • 类Connection.java文件,统计开始,记录命令执行开始时间;统计结束,记录命令结束时间、时间消耗等,并写入到日志流中;

    • 类JedisClusterCommand文件,获取键的地方key,方便之后分析应用键的行为。

    在类Connection.java文件中有2处:

    怎么用ES做Redis监控

    图示:类Connection.java文件埋点代码的地方

    怎么用ES做Redis监控

    图示:类Connection.java文件埋点代码的地方

    类JedisClusterCommand文件埋点代码.java文件中有1处:

    怎么用ES做Redis监控

    图示:类JedisClusterCommand文件埋点代码

    logback修改:

    应用端都会使用logback写入日志文件,同时为了更加精准,应用端写入日志时还需要获取应用端的一些信息,如下:

    自定义一个Layout,自动获取应用端的IP地址与服务器名称:

    怎么用ES做Redis监控

    图示:自定义Logback的Layout

    app配置:

    app配置属于最后收尾工作,主要是输出埋点的日志数据,配置日志logback.xml文件即可:

    怎么用ES做Redis监控

    图示:配置应用端日志文件logback.xml

    日志采集:

    应用端日志采集采用Logstash,配置日志目录,指向Elastic集群,这样整体的监控日志采集部分就结束了。

    日志分析

    Redis服务端的日志分析比较简单,常规的一些指标而已,创建好关键的图表,容易看出问题。重点讨论应用端的日志分析。

    怎么用ES做Redis监控

    图示:应用端使用Redis一些行为图表

    ELK监控体系上线之后,我们连续观察分析两周,获得了一些监控成果,如:

    • 应用端部分键值太大,居然超过1MB,这种键值访问一次消耗时间很大,会严重造成阻塞;

    • 部分应用居然使用Redis当成数据库使用;

    • 有将List类型当成消息队列使用,一次存取几十万的数据;

    • 某些应用对于集群的操作频次特别高,几乎占用了一半以上;

    • 还有很多,就不一一描述了。

    后续方案

    监控体系相当于架构师的眼睛,有了这个,Redis方面的优化改造方案就很好制定了:

    • 应用端、误用的使用全部要改掉;

    • 服务端,按照应用的数据,进行一些拆分,拆分出一些专用的集群,特定为一些应用使用或者场景;

    • 开发者,后续有新业务模块需要接入Redis需要告知架构师们评审。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 es
    相关文章 更多
    php72w redis,docker php7安装php-redis
    php72w redis,docker php7安装php-redis

    在Docker环境下为PHP安装Redis扩展:手动编译需下载源码、安装phpize、配置编译并安装,生成redis.so并在php.d目录新建redis.ini加载,重启PHP-FPM;也可直接yum安装php72w-pecl-redis,免手动编译。

    php 如何配置 redis,php 如何设置redis
    php 如何配置 redis,php 如何设置redis

    配置PHP的Redis扩展:先安装Redis服务,从GitHub下载phpredis源码,用phpize编译安装,修改php.ini添加extension=redis.so,重启php-fpm或Apache,通过phpinfo验证并连接Redis。

    c++如何将结构体序列化为Redis兼容的RESP协议格式【深度】
    c++如何将结构体序列化为Redis兼容的RESP协议格式【深度】

    C++结构体无法直接序列化为RESP协议,需手动将字段映射为*N数组嵌套$lenbulkstring形式。整数需转换为字符串并加:前缀,空字符串用$0\r\n,null用$-1\r\n。长度计算需精确到字节数,特别注意二进制安全,同时确保字段顺序与结构体定义一致。

    如何在Golang架构中部署Redict作为高能数据临时存储中转站
    如何在Golang架构中部署Redict作为高能数据临时存储中转站

    Redis作为跨服务临时状态枢纽,需按消息队列、缓存和原子状态三重角色设计。选型用List实现任务分发及延迟重试,Stream用于事件广播与位点回溯。go-redis/v8需配置MinIdleConns、MaxRetries及超时。数据写入应JSON序列化并带type标签、设合理TTL、将关键字段提至顶层。消费通过原子GET+DEL或processedkey

    TP8.0 高并发下库存超卖?Redis 原子递减结合数据库乐观锁控制
    TP8.0 高并发下库存超卖?Redis 原子递减结合数据库乐观锁控制

    在高并发秒杀场景下,利用Redis的减库存原子操作预扣减库存拦截超卖请求,再通过数据库乐观锁(版本号与库存校验)确保最终一致性,异常时回滚Redis库存并借助Lua脚本保证原子性,从而有效防止库存超卖。

    如何在 Go 中利用 go-redis 执行 Lua 脚本优化逻辑
    如何在 Go 中利用 go-redis 执行 Lua 脚本优化逻辑

    在Go中使用go-redis执行Lua脚本可借助原子性解决竞态问题,通过redis.Script封装脚本并自动处理SHA1缓存与重试。需注意KEYS必须为非空切片且所有键在Cluster模式下落在同一slot,ARGV以字符串传入并由tonumber转换。返回值需先检查错误再调用Val(),避免panic。

    TP6.0 基于 Redis SetNX 实现的简单互斥锁机制【并发】
    TP6.0 基于 Redis SetNX 实现的简单互斥锁机制【并发】

    先看一个典型场景:电商秒杀、库存扣减、定时任务重复调度——这些并发冲突在 TP6 应用里屡见不鲜。用 Redis 的 SETNX 做互斥锁,确实是轻量又直接的方案,但“能用”和“稳妥”之间,隔着三层硬功夫:原子加锁、身份校验、合理超时。这三条,差一条就翻车。 很多人第一次上手,直接写 SETNX 加

    TP6.0 如何处理高并发抢购?Redis 原子锁与队列削峰详解【秒杀】
    TP6.0 如何处理高并发抢购?Redis 原子锁与队列削峰详解【秒杀】

    高并发抢购中,Redis的DECR原子操作可安全扣库存;配合think-queue异步削峰,接口仅扣库存和推消息;分布式锁需用SETNXEX加唯一标识,释放时用Lua脚本校验;成功资格后须以数据库事务双写为准,失败时补回Redis库存。

    Golang 实现基于 Redis 的延时任务队列
    Golang 实现基于 Redis 的延时任务队列

    基于Redis的ZSET实现延时队列需解决并发重复消费、失败重试混乱、精度不足及内存爆炸等问题。通过Lua脚本保证取删原子性,使用毫秒级时间戳,对临时错误采用指数退避重试,永久错误记入独立哈希表,并限制最大延迟、定期清理过期任务、使用紧凑序列化格式。

    RedisInsight怎么修改Key的过期时间 Redis操作方法【步骤】
    RedisInsight怎么修改Key的过期时间 Redis操作方法【步骤】

    操作 Redis 的时候,改个 Key 的过期时间其实是个高频场景。特别是做运维排查或者临时调试那会儿,谁也不想反复切命令行窗口、背那些命令参数。好在 RedisInsight 这个图形工具把这事儿做得很顺手——三种方式任选,总有一种合你胃口。 在动手前,先确认一下 Key 当前的 TTL 状态是个

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    即将离开本站
    您即将前往第三方网站,请确认是否继续?