Redis 可观测最佳实践
本实践介绍如何通过观测云采集器 DataKit,采集 Redis 各项指标,并配置监控器向用户主动报告 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 安装方式可以参考官方手册。
主机安装方式参考:https://docs.guance.com/datakit/datakit-install/
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
- 标签
| Tag | Description |
|---|---|
| db_name | DB name. |
| host | Hostname. |
| key | Key name. |
| key_type | Key type. |
| server | Server addr. |
| service_name | Service name. |
- 字段列表
| Metric | Description | Type | Unit |
|---|---|---|---|
| keys_sampled | Sampled keys in the key space. | int | - |
| value_length | Key length. | int | - |
redis_hotkey
- 标签
| Tag | Description |
|---|---|
| db_name | DB name. |
| host | Hostname. |
| key | Key name. |
| server | Server addr. |
| service_name | Service name. |
- 字段列表
| Metric | Description | Type | Unit |
|---|---|---|---|
| key_count | Key count times. | int | - |
| keys_sampled | Sampled keys in the key space. | int | - |
redis_slowlog
Redis 慢查询命令历史,这里我们将其以日志的形式采集。
- 标签
| Tag | Description |
|---|---|
| host | host |
| message | log message |
| server | server |
| service_name | Service name |
- 字段列表
| Metric | Description | Type | Unit |
|---|---|---|---|
| command | Slow command | int | μs |
| slowlog_95percentile | Slow 95th percentile duration | int | μs |
| slowlog_avg | Slow average duration | float | μs |
| slowlog_id | Slow log unique id | int | - |
| slowlog_max | Slow maximum duration | int | μs |
| slowlog_median | Slow median duration | int | μs |
| slowlog_micros | Cost time | int | μs |
备注: Redis 实例中暂无 slow log 数据。

监控器
一键开启如下监控:

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

Redis 节点失联

总结
Redis 的监控是实现可观测性建设必不可少的一环,Redis 的可用性对于业务系统起着至关重要的作用。使用观测云可以支持采集 Redis 多种部署方式,包括单机、主从、集群、哨兵等。配合观测云丰富的告警能力,及时发现 Redis 问题,处理解决对应的问题。
Contact us
Join the community
to join the community
Try Guance
Start online and pay only for what you use.
Get startedChoose a Guance plan