Redis 可观测最佳实践

Redis 介绍

Redis 是一个开源的高性能键值对(key-value)数据库。它通常用作数据库、缓存和消息代理。Redis 支持多种类型的数据结构,Redis 通常用于需要快速访问的场景,如会话缓存、全页缓存、排行榜、实时分析等。由于其高性能和灵活性,Redis 在现代应用程序中非常流行。

随着项目对 Redis 依赖度逐渐提升,对于 Redis 的稳定性保障变得尤为重要,需要及时发现 Redis 性能是否够用,如连接数、QPS、缓存命中率、阻塞连接数、bigkey 、slowkey 等。及时发现问题对于系统的稳定性和性能优化会有极大的提升。

观测云

观测云具备完整的可观测能力,本文详细解读如何通过观测云采集器 DataKit,采集 Redis 各项指标,并配置监控器向用户主动报告 Redis 问题。

Redis 监控用户创建

创建监控用户(可选):redis 6.0+ 进入 redis-cli 命令行,创建用户并且授权:

CONFIG SET maxmemory-policy allkeys-lfu
ACL SETUSER username on +get +@read +@connection +@keyspace ~*
  • 采集 hotkey 数据,maxmemory-policy 策略需要设置为 volatile-lfu 或者 allkeys-lfu
  • 采集 bigkey&hotkey 主机安装模式需要安装 redis-cli , 如果部署了 redis-server ,则不需要重复安装 redis-cli 服务。

部署 DataKit

数据通过 DataKit 采集,DataKit 是一款开源、一体式的数据集成 Agent,用于采集系统运行的各种指标、日志等数据,并将这些数据汇总给观测云。DataKit 安装方式可以参考官方手册。

主机安装方式参考:主机安装 - 观测云文档

Redis 采集器

适用于虚拟机部署的 Redis 监控,使用主机安装方式安装 DataKit 后,在 /usr/local/datakit/conf.d/db 目录下,复制 redis.conf.sample 为 redis.conf 。

cp redis.conf.sample redis.conf

调整 redis.conf 内容如下:

# {"version": "1.60.0", "desc": "do NOT edit this line"}[[inputs.redis]]host = "172.31.16.153"port = 6379password = "rediszjsj"redis_cli_path = "/usr/bin/redis-cli"hotkey = truebigkey = true[inputs.redis.log]# #required, glob logfilesfiles = ["/var/log/redis/*.log"]## grok pipeline script pathpipeline = "redis.p"match = '''^\S.*'''[inputs.redis.tags]# some_tag = "some_value"# more_tag = "some_other_value"...

本配置打开了 hotkey 和 big key 采集,同时开启了 Redis 运行日志采集。

配置完成后,重启 DataKit,执行命令:

 datakit service -R 

关键核心指标

  • blocked_clients:等待阻塞调用(如 BLPOP/BRPOP 等)的客户端数量。
  • connected_clients:客户端连接数(不包括从副本的连接)。
  • connected_slaves:已连接的副本(replica)数量。
  • evicted_clients:由于 maxmemory-clients 限制而被驱逐的客户端数量。
  • evicted_keys:由于 Max-Memory 限制而被驱逐的键数量。
  • expired_keys:键过期事件的总数。
  • io_threaded_reads_processed:主线程和 I/O 线程处理的读事件数量。
  • io_threaded_writes_processed:主线程和 I/O 线程处理的写事件数量。
  • keyspace_hits:在主字典中成功查找键的次数。
  • keyspace_misses:在主字典中查找键失败的次数。
  • latency_percentiles_usec:基于命令类型的延迟百分位分布统计。
  • maxclients:maxclients 配置指令的值,是 connected_clients、connected_slaves 和 cluster_connections 之和的上限。
  • maxmemory:Max Memory 配置指令的值。
  • mem_fragmentation_bytes:used_memory_rss 和 used_memory 之间的差异。
  • mem_fragmentation_ratio:used_memory_rss 和 used_memory 之间的比率。
  • rdb_bgsave_in_progress:正在进行 RDB 保存的标志。
  • rdb_changes_since_last_save:自上次 SAVE 或 BGSAVE 调用以来数据集变化的操作数。
  • rdb_current_bgsave_time_sec:正在进行的 RDB 保存操作的持续时间。
  • rdb_last_bgsave_time_sec:上次 RDB 保存操作的持续时间。
  • rdb_last_save_time:上次成功的 RDB 保存的基于时间戳的记录。
  • rdb_saves:自启动以来执行的 RDB 快照数量。
  • rejected_connections:由于 Max-Clients 限制而被拒绝的连接数。
  • total_blocking_keys:阻塞键的数量。
  • total_net_input_bytes:从网络读取的总字节数。
  • total_net_output_bytes:写入网络的总字节数。
  • total_net_repl_input_bytes:为复制目的从网络读取的总字节数。
  • total_net_repl_output_bytes:为复制目的写入网络的总字节数。
  • uptime_in_seconds:Redis 服务器启动以来的秒数。
  • used_cpu_sys:Redis 服务器消耗的系统 CPU 时间。
  • used_cpu_user:Redis 服务器消耗的用户 CPU 时间。
  • used_memory:Redis 使用其分配器分配的总字节数。
  • used_memory_rss:操作系统看到的 Redis 分配的字节数(常驻集大小)。

仪表板

登录观测云控制台,点击「场景」 -「新建仪表板」,输入 " Redis", 选择" Redis监控视图 ",点击"确定"。

  • 性能

  • 内存

  • 持久化

日志

redis_bigkey
  • 标签
TagDescription
db_nameDB name.
hostHostname.
keyKey name.
key_typeKey type.
serverServer addr.
service_nameService name.
  • 字段列表
MetricDescriptionTypeUnit
keys_sampledSampled keys in the key space.int-
value_lengthKey length.int-
redis_hotkey
  • 标签
TagDescription
db_nameDB name.
hostHostname.
keyKey name.
serverServer addr.
service_nameService name.
  • 字段列表
MetricDescriptionTypeUnit
key_countKey count times.int-
keys_sampledSampled keys in the key space.int-
redis_slowlog

Redis 慢查询命令历史,这里我们将其以日志的形式采集。

  • 标签
TagDescription
hosthost
messagelog message
serverserver
service_nameService name
  • 字段列表
MetricDescriptionTypeUnit
commandSlow commandintμs
slowlog_95percentileSlow 95th percentile durationintμs
slowlog_avgSlow average durationfloatμs
slowlog_idSlow log unique idint-
slowlog_maxSlow maximum durationintμs
slowlog_medianSlow median durationintμs
slowlog_microsCost timeintμs

备注: Redis 实例中暂无 slow log 数据。

监控器

一键开启如下监控:

Redis 节点重启

检测 Redis 启动时间小于 10 分钟,判定为 Redis 节点发生了重启。

Redis 节点失联

总结

Redis 的监控是实现可观测性建设必不可少的一环,Redis 的可用性对于业务系统起着至关重要的作用。使用观测云可以支持采集 Redis 多种部署方式,包括单机、主从、集群、哨兵等。配合观测云丰富的告警能力,及时发现 Redis 问题,处理解决对应的问题。

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

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

相关文章

【前端】JavaScript 变量声明和函数声明的提升机制:深入探讨提升优先级与其行为

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 💯前言💯提升(Hoisting)概述💯提升机制——函数声明 vs 变量声明💯代码示例:函数与 var 的提升提升后的代码解析分析 …

fastadmin实现站内通知功能

实现效果如下 application/admin/view/common/header.html <style>#notificationMenu {display: none;position: absolute;top: 40px;right: 0;background: #fff;border-radius: 6px;padding: 10px 0;width: 300px;box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);z-inde…

Axure RP教程:创建高效用户界面和交互

Axure RP是一款广受好评的软件&#xff0c;专门用于设计精致的用户界面和交互体验。这款软件提供了众多UI控件&#xff0c;并根据它们的用途进行了分类。与此同时&#xff0c;国产的即时设计软件作为Axure的替代品&#xff0c;支持在线协作和直接在浏览器中使用&#xff0c;无需…

2024-11-25 二叉树的定义

一、基本概念 1.二叉树是n(n>0)个结点的有限集合: ① 或者为空二叉树&#xff0c;即n0。 ②或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成。左子树和右子树又分别是一棵二叉树。 特点&#xff1a; ①每个结点至多只有两棵子树。 ②左右子树不能颠倒&am…

部署实战(二)--修改jar中的文件并重新打包成jar文件

一.jar文件 JAR 文件就是 Java Archive &#xff08; Java 档案文件&#xff09;&#xff0c;它是 Java 的一种文档格式JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中&#xff0c;多出了一个META-INF/MANIFEST.MF 文件META-INF/MANIFEST.MF 文件在生成 JAR 文件的时候…

对象的大小

文章目录 一、对象大小 一、对象大小 对象是类实例化出来的&#xff0c;让我们分析一下类对象中哪些成员呢&#xff1f; 类实例化出的每个对象&#xff0c;每个都有独立的数据空间&#xff0c;所以对象中肯定包含 成员变量&#xff0c;那么成员函数是否包含呢&#xff1f; 首…

01-go入门

文章目录 Go语言学习1. 简介安装windows安装linux安装编译工具安装-goland 2. 入门2.1 Helloworld注释 2.2 变量初始化打印内存地址变量交换匿名变量作用域局部变量全局变量 2.3 常量iota 2.4 数据类型布尔整数浮点类型复数字符串定义字符串字符串拼接符定义多行字符串 map数据…

数据库的联合查询

数据库的联合查询 简介为什么要使⽤联合查询多表联合查询时MYSQL内部是如何进⾏计算的构造练习案例数据案例&#xff1a;⼀个完整的联合查询的过程 内连接语法⽰例 外连接语法 ⽰例⾃连接应⽤场景示例表连接练习 ⼦查询语法单⾏⼦查询多⾏⼦查询多列⼦查询在from⼦句中使⽤⼦查…

LeetCode-632. Smallest Range Covering Elements from K Lists [C++][Java]

目录 题目描述 解题思路 【C】 【Java】 LeetCode-632. Smallest Range Covering Elements from K Listshttps://leetcode.com/problems/smallest-range-covering-elements-from-k-lists/description/ 题目描述 You have k lists of sorted integers in non-decreasing o…

UI自动化测试中公认最佳的设计模式-POM

一、概念 什么是POM&#xff1f; POM是PageObjectModule&#xff08;页面对象模式&#xff09;的缩写&#xff0c;其目的是为了Web UI测试创建对象库。在这种模式下&#xff0c;应用涉及的每一个页面应该定义为一个单独的类。类中应该包含此页面上的页面元素对象和处理这些元…

Scala文件读写——成绩分析

根据文件解决下例问题 1.读入txt文件&#xff1a;按行读入 import scala.io.Sourceobject Test文件读写_成绩分析 {def main(args: Array[String]): Unit {//1.按行读入val source Source.fromFile("score.txt")val it source.getLines()it.next()//跳过第一行wh…

C# Winform 俄罗斯方块小游戏源码

文章目录 1.设计来源俄罗斯方块小游戏讲解1.1 主界面1.2 游戏界面1.3 游戏结束界面1.4 配置游戏界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&#xff1a;https:…

前端框架Vue3——响应式数据,v-on,v-show和v-if,v-for,v-bind

Vue的定义为渐进式的JavaScript框架。所谓渐进式&#xff0c;是指其被设计 为可以自底向上逐层应用。我们可以只使用Vue框架中提供的某层的功 能&#xff0c;也可以与其他第三方库整合使用。当然&#xff0c;Vue本身也提供了完整的 工具链&#xff0c;使用其全套功能进行项目的…

实验二 系统响应及系统稳定性

实验目的 &#xff08;1&#xff09;学会运用Matlab 求解离散时间系统的零状态响应&#xff1b; &#xff08;2&#xff09;学会运用Matlab 求解离散时间系统的单位取样响应&#xff1b; &#xff08;3&#xff09;学会运用Matlab 求解离散时间系统的卷积和。 实验原理及实…

.NET Core发布网站报错 HTTP Error 500.31

报错如图&#xff1a; 解决办法&#xff1a; 打开任务管理器》》服务》》找到这仨服务&#xff0c;右键启动即可&#xff0c;如果已经启动了就重启&#xff1a;

麒麟安全增强-kysec

DAC: 自主访问控制是linux下默认的接入控制机制,通过对资源读、写、执行操作,保证系统安全 MAC:安全接入控制机制,由操作系统约束的访问控制,默认情况下,MAC不允许任何访问,用户可以自定义策略规则制定允许什么 ,从而避免很多攻击。 MAC强制访问控制常见的实现方式:…

Otter 安装流程

优质博文&#xff1a;IT-BLOG-CN 一、背景 随着公司的发展&#xff0c;订单库的数据目前已达到千万级别&#xff0c;需要进行分表分库&#xff0c;就需要对数据进行迁移&#xff0c;我们使用了otter&#xff0c;这里简单整理下&#xff0c;otter 的安装过程&#xff0c;希望对…

如何解决Jupyter command `jupyter-contrib` not found.

目录 (base) C:\Users\hello>pip show jupyter_contrib_nbextensions Name: jupyter-contrib-nbextensions Version: 0.7.0 Summary: A collection of Jupyter nbextensions. Home-page: https://github.com/ipython-contrib/jupyter_contrib_nbextensions.git Author: ipyt…

Gitee markdown 使用方法(持续更新)

IPKISS 获取仿真器件的名称 引言正文标题换行第一种------在行末尾手动键入两个空格第二种------额外换行一次&#xff0c;即两行中间留一个空行 缩进与反缩进代码块行内代码添加图片添加超链接 加粗&#xff0c;倾斜&#xff0c;加粗倾斜 引言 有些保密性的文件或者教程&…

Adobe Illustrator 2024 安装教程与下载分享

介绍一下 下载直接看文章末尾 Adobe Illustrator 是一款由Adobe Systems开发的矢量图形编辑软件。它广泛应用于创建和编辑矢量图形、插图、徽标、图标、排版和广告等领域。以下是Adobe Illustrator的一些主要特点和功能&#xff1a; 矢量绘图&#xff1a;Illustrator使用矢量…