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 = 6379
  password = "rediszjsj"
  redis_cli_path = "/usr/bin/redis-cli"
  hotkey = true
  bigkey = true

  [inputs.redis.log]
  # #required, glob logfiles
  files = ["/var/log/redis/*.log"]

  ## grok pipeline script path
  pipeline = "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 问题,处理解决对应的问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOs鸿蒙开发实战(21)=>组件间通信@ohos/liveeventbus

1.简介 LiveEventBus是一款消息总线,具有生命周期感知能力,支持Sticky,支持跨进程,支持跨APP发送消息。 2.下载安装 ohpm install ohos/liveeventbus 3.订阅,注册监听 4.发送事件 5. 完成 > 记得关注博主&#xff…

深度学习使用LSTM实现时间序列预测

大家好,LSTM是一种特殊的循环神经网络(RNN)架构,它被设计用来解决传统RNN在处理长序列数据时的梯度消失和梯度爆炸问题,特别是在时间序列预测、自然语言处理和语音识别等领域中表现出色。LSTM的核心在于其独特的门控机…

用Tauri框架构建跨平台桌面应用:1、Tauri快速开始

Tauri 是一个构建适用于所有主流桌面和移动平台的轻快二进制文件的框架。开发者们可以集成任何用于创建用户界面的可以被编译成 HTML、JavaScript 和 CSS 的前端框架,同时可以在必要时使用 Rust、Swift 和 Kotlin 等语言编写后端逻辑。 Tauri 是什么? |…

Elasticsearch对于大数据量(上亿量级)的聚合如何实现?

大家好,我是锋哥。今天分享关于【Elasticsearch对于大数据量(上亿量级)的聚合如何实现?】面试题。希望对大家有帮助; Elasticsearch对于大数据量(上亿量级)的聚合如何实现? 1000道 …

C语言:C语言实现对MySQL数据库表增删改查功能

基础DOME可以用于学习借鉴&#xff1b; 具体代码 #include <stdio.h> #include <mysql.h> // mysql 文件&#xff0c;如果配置ok就可以直接包含这个文件//宏定义 连接MySQL必要参数 #define SERVER "localhost" //或 127.0.0.1 #define USER "roo…

Learn Git Branching 学习笔记

网址&#xff1a;Learn Git Branching 一、基础篇 1.1 git commit 1.1.1 示例&#xff08;git commit&#xff09; git commit 1.1.2 题目&#xff08;两次提交记录&#xff09; git commit git commit 前 后 1.2 git branch 1.2.1 示例&#xff08;git branch <>、git …

设计模式:责任链实现数据流风格的数据处理

数据流风格 数据流风格是软件架构中的一种风格&#xff0c;主要是面向数据&#xff0c;用于进行流式的数据处理&#xff1b;数据流风格的代表有管道-过滤器风格和批处理序列风格&#xff0c;这里主要是指管道-过滤器风格。 管道-过滤器风格就像其名字一样&#xff0c;是以一个…

BERT简单理解;双向编码器优势

目录 BERT简单理解 一、BERT模型简单理解 二、BERT模型使用举例 三、BERT模型的优势 双向编码器优势 BERT简单理解 (Bidirectional Encoder Representations from Transformers)模型是一种预训练的自然语言处理(NLP)模型,由Google于2018年推出。以下是对BERT模型的简…

摄像头原始数据读取——V4L2(mmap模式,V4L2_MEMORY_MMAP)

摄像头原始数据读取——V4L2(mmap模式,V4L2_MEMORY_MMAP) 内存映射模式&#xff0c;是将设备在内核态申请的用于存储视频数据的物理内存映射到用户空间&#xff0c;使得用户应用程序可以直接访问和操作设备数据物理内存&#xff0c;避免了数据的拷贝。因此采集速度较快&#x…

SpringCloud框架学习(第五部分:SpringCloud Alibaba入门和 nacos)

目录 十二、SpringCloud Alibaba入门简介 1. 基本介绍 2.作用 3.版本选型 十三、 SpringCloud Alibaba Nacos服务注册和配置中心 1.简介 2.各种注册中心比较 3.下载安装 4.Nacos Discovery服务注册中心 &#xff08;1&#xff09; 基于 Nacos 的服务提供者 &#xf…

Ubuntu下用Docker部署群晖系统---Virtual DSM --zerotier实现连接

Ubuntu下用Docker部署群晖系统—Virtual DSM --zerotier实现连接 1. Docker 安装 安装最新docker curl -fsSL get.docker.com -o get-docker.sh sudo sh get-docker.sh sudo docker run hello-world2.docker-compose 安装 sudo pip install docker-compose测试安装是否成功…

【排版教程】Word、WPS 分节符(奇数页等) 自动变成 分节符(下一页) 解决办法

毕业设计排版时&#xff0c;一般要求每章节的起始页为奇数页&#xff0c;空白页不显示页眉和页脚。具体做法如下&#xff1a; 1 Word 在一个章节的内容完成后&#xff0c;在【布局】中&#xff0c;点击【分隔符】&#xff0c;然后选择【奇数页】 这样在下一章节开始的时&…

241125学习日志——[CSDIY] [InternStudio] 大模型训练营 [17]

CSDIY&#xff1a;这是一个非科班学生的努力之路&#xff0c;从今天开始这个系列会长期更新&#xff0c;&#xff08;最好做到日更&#xff09;&#xff0c;我会慢慢把自己目前对CS的努力逐一上传&#xff0c;帮助那些和我一样有着梦想的玩家取得胜利&#xff01;&#xff01;&…

JVM类加载和垃圾回收算法详解

文章目录 JVM一、JVM运行流程1. JVM执行流程 二、JVM运行时数据区1. 程序计数器&#xff08;线程私有&#xff09;2. 虚拟机栈 &#xff08;线程私有&#xff09;3. 本地方法栈&#xff08;线程私有&#xff09;4. 堆&#xff08;线程共享&#xff09;5. 元空间&#xff08;线程…

1、正则表达式

grep匹配 grep用来过滤文本内容&#xff0c;以匹配要查询的结果。 grep root /etc/passwd&#xff1a;匹配包含root的行 -m 数字&#xff1a;匹配几次后停止 -v&#xff1a;取反-i&#xff1a;忽略字符的大小写&#xff0c;默认的&#xff0c;可以不加-n&#xff1a…

Java学习笔记--继承的介绍,基本使用,成员变量和成员方法访问特点

目录 一&#xff0c;继承 1.什么是继承 2.怎么去继承: 3.注意: 4.继承怎么学 二&#xff0c;继承基本使用 三&#xff0c;成员变量和成员方法访问特点 1.成员变量访问特点 1&#xff0c;子类和父类中的成员变量不重名: 总结: 2&#xff0c;子类和父类中的成员变量重…

初级数据结构——二叉树题库(c++)

这里写目录标题 前言[1.——965. 单值二叉树](https://leetcode.cn/problems/univalued-binary-tree/)[2.——222. 完全二叉树的节点个数](https://leetcode.cn/problems/count-complete-tree-nodes/)[3.——144. 二叉树的前序遍历](https://leetcode.cn/problems/binary-tree-…

redmi 12c 刷机

刷机历程 一个多月前网购了redmi 12c这款手机, 价格只有550,用来搞机再适合不过了, 拆快递后就开始倒腾,网上有人说需要等7天才能解锁,我绑定了账号过了几天又忍不住倒腾,最后发现这块手机不用等7天解锁成功了,开始我为了获取root权限, 刷入了很火的magisk,但是某一天仍然发现/…

Python 爬虫入门教程:从零构建你的第一个网络爬虫

网络爬虫是一种自动化程序&#xff0c;用于从网站抓取数据。Python 凭借其丰富的库和简单的语法&#xff0c;是构建网络爬虫的理想语言。本文将带你从零开始学习 Python 爬虫的基本知识&#xff0c;并实现一个简单的爬虫项目。 1. 什么是网络爬虫&#xff1f; 网络爬虫&#x…

计算机毕业设计Hadoop+Spark音乐推荐系统 音乐预测系统 音乐可视化大屏 音乐爬虫 HDFS hive数据仓库 机器学习 深度学习 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…