Redis 可观测最佳实践

server/2024/11/26 13:15:59/

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.ppmy.cn/server/145068.html

相关文章

40分钟学 Go 语言高并发:【实战】并发安全的配置管理器

【实战】并发安全的配置管理器 一、课程概述 学习要点重要程度掌握目标配置热更新★★★★★理解配置热更新原理,实现动态加载配置并发读写控制★★★★★掌握并发安全的读写控制机制观察者模式★★★★☆理解并实现配置变更通知机制版本管理★★★★☆实现配置版…

djinn:1 靶场学习小记

一、测试环境: kail攻击机:Get Kali | Kali Linux 靶场镜像:https://download.vulnhub.com/djinn/djinn.ova 描述: 该机器与 VirtualBox 和 VMWare 兼容。DHCP 将自动分配一个 IP。您将在登录屏幕上看到 IP。您必须找到并读取分…

华为FusionCube 500-8.2.0SPC100 实施部署文档

环境: 产品:FusionCube 500版本:8.2.0.SPC100场景:虚拟化基础设施平台:FusionCompute两节点 MCNA * 2硬件部署(塔式交付场景)免交换组网(配置AR卡) 前置准备 组网规划 节…

2024年11月25日Github流行趋势

项目名称:flux 项目维护者:timudk jenuk apolinario zeke thibautRe项目介绍:FLUX.1模型的官方推理仓库。项目star数:17,381项目fork数:1,229 项目名称:screenshot-to-code 项目维护者:abi cle…

Vue3新特性 - Composition Api

前言 那我们回到 Vue&#xff0c;在 Vue2 我们定义一个组件&#xff0c;基本模板应该是&#xff1a; <script> export default {// data() 返回的属性将会成为响应式的状态// 并且暴露在 this 上data() {return {count: 0}},// methods 是一些用来更改状态与触发更新的…

消息队列场景下的前端设计:如何优化用户体验

在现代分布式系统中&#xff0c;消息队列被广泛用于解耦服务和异步处理。但由于消息队列的异步特性&#xff0c;任务提交后无法立即获得处理结果&#xff0c;这给前端的交互设计带来了新的挑战。本文将探讨如何在这种场景下优化前端用户体验。 一、问题分析 在使用消息队列后&…

node.js第三方Express 框架

文章目录 1、Express 简介2、Express 安装及使用1.Express 安装2.Nodemon‌的使用3.Express 的使用 1、Express 简介 Express是基于Node.js平台&#xff0c;快速、开发、极简的Web开发框架。 在express中路由指的是客户端请求和服务器处理函数的映射关系&#xff0c; 路由有三…

docker-mysql

一、创建mysql 1、docker run --name mysql8.0-container -e MYSQL_ROOT_PASSWORDmy-secret-pw -d -p 3306:3306 mysql:8.0 参数解释&#xff1a; --name mysql8.0-container&#xff1a;指定容器的名称为mysql8.0-container。 -e MYSQL_ROOT_PASSWORDmy-secret-pw&#xff1a…