可以通过 redis-cli
查看几个 Redis 指标。
运行 INFO
命令提供单个视图中可用的许多指标。
127.0.0.1:6379> INFO
# Server
redis_version:6.0.1
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:e02d1d807e41d65
redis_mode:standalone
os:Linux 4.19.121-linuxkit x86_64
…
可以单独提取几个部分。例如,如果您只想获取 CLIENTS 部分,您可以将该部分作为参数传递给 INFO
命令。
127.0.0.1:6379> INFO CLIENTS
# Clients
connected_clients:1
client_recent_max_input_buffer:2
client_recent_max_output_buffer:0
blocked_clients:0
tracking_clients:0
clients_in_timeout_table:0
服务器: 当前 Redis 服务器信息。
值得注意的指标
redis_version
process_id
config_file
uptime_in_seconds
uptime_in_days
客户端: 有关已连接客户端或连接失败的可用数据。
值得注意的指标
connected_clients
blocked_clients
内存: 内存使用情况和统计信息
值得注意的指标
used_memory
mem_fragmentation_ratio
持久性: RDB 或 AOF 指标
值得注意的指标
rdb_last_save_time
rdb_changes_since_last_save
aof_rewrite_in_progress
统计信息: 一些常规统计信息
值得注意的指标
keyspace_hits
keyspace_misses
expired_keys
evicted_keys
instantaneous_ops_per_sec
复制: 包括主/从标识符和偏移量的复制数据
值得注意的指标
master_link_down_since
connected_slaves
master_last_io_seconds_ago
CPU: 计算消耗统计信息
值得注意的指标
used_cpu_sys
used_cpu_user
模块: 来自任何已加载模块的数据
值得注意的指标(每个模块)
ver
options
集群: 是否启用集群
值得注意的指标
cluster_enabled
键空间: 键和过期数据
值得注意的指标(每个 db)
keys
expires
avg_ttl
可以从结果中读取输出或将其管道传输到文件中。
127.0.0.1:6379> redis-cli INFO STATS > redis-info-stats
这可以在间隔时间内完成,并由本地或第三方监控服务使用。
由 INFO
返回的一些数据将是静态的。例如 Redis 版本,它在进行更新之前不会更改。其他数据是动态的,例如 keyspace_hits ÷ keyspace_misses
。后者可以用来计算命中率,并作为长期指标进行观察。复制部分字段 master_link_down_since
可以作为连接警报的指标。
一些可能为给定指标设置的警报示例
指标 | 示例警报 |
---|---|
| < 300 秒:以确保服务器保持启动状态 |
| < 预期应用程序连接的最小数量 |
| > 30 秒:复制应处于运行状态 |
| > 没有进行快照的最大可接受间隔 |
这不是一个详尽的列表,只是为了让您了解 INFO 中的指标如何使用。
redis-cli 客户端有一些内置选项,允许您提取一些实时延迟和统计信息数据。
这些不能作为 Redis 的命令使用,而是作为 redis-cli 中的选项使用。
延迟选项
连续采样延迟
$ redis-cli --latency
min: 1, max: 17, avg: 4.03 (927 samples)
可以添加 raw
或 csv
输出标志
$ redis-cli --latency --csv
1,4,1.94,78
为了对超过一秒的时间进行采样,可以使用 latency-history
,它的默认间隔为 15 秒,但可以使用 -i
参数指定。
$ redis-cli --latency-history -i 60
min: 1, max: 30, avg: 4.84 (328 samples)
这也可以与 csv
或 raw
输出格式标志结合使用。
$ redis-cli --latency-history -i 60 --csv
13,13,13.00,1
5,13,9.00,2
3,13,7.00,3
3,13,6.00,4
3,13,5.60,5
2,13,5.00,6
2,13,5.43,7
2,13,5.62,8
2,13,5.22,9
2,13,5.00,10
1,13,4.64,11
…
这两个都可以管道传输到文件。
该 latency-dist
选项将延迟显示为光谱。默认间隔为一秒,但可以使用 -i
参数进行更改。
统计信息选项
使用 stat
标志从服务器获取滚动统计信息。
$ redis-cli --stat
------- data ------ --------------------- load -------------------- - child -
keys mem clients blocked requests connections
4 9.98M 51 0 8168035 (+0) 4132
4 9.98M 51 0 8181542 (+13507) 4132
4 9.98M 51 0 8196100 (+14558) 4132
4 9.98M 51 0 8209794 (+13694) 4132
4 9.98M 51 0 8223420 (+13626) 4132
4 9.98M 51 0 8236624 (+13204) 4132
4 9.98M 51 0 8251376 (+14752) 4132
4 9.98M 51 0 8263417 (+12041) 4182
4 9.98M 51 0 8276781 (+13364) 4182
4 9.90M 51 0 8289693 (+12912) 4182
Redis 包含一个 MEMORY
命令,其中包含一个用于获取统计信息的子命令。
127.0.0.1:6379> memory stats
1) "peak.allocated"
2) (integer) 11912984
3) "total.allocated"
4) (integer) 8379168
5) "startup.allocated"
6) (integer) 5292168
7) "replication.backlog"
8) (integer) 0
9) "clients.slaves"
10) (integer) 0
11) "clients.normal"
12) (integer) 16986
13) "aof.buffer"
14) (integer) 0
这些值也存在于 INFO MEMORY
命令中,但这里它们以典型的 Redis RESP
数组回复形式返回。
还有一个 LATENCY DOCTOR
子命令,其中包含当前内存指标的分析报告。
众所周知,Redis 速度很快,因此经常被用于对延迟要求极高的场景。Redis 提供了延迟监控功能,可以帮助您深入了解潜在的延迟问题。延迟监控包含以下几个关键部分:
默认情况下,此功能处于禁用状态,因为大多数情况下并不需要它。为了启用它,您可以在 Redis 配置文件中更新要监控的阈值时间(毫秒)。超过阈值的事件将被记录为延迟峰值。如果需要识别所有阻塞服务器时间超过 10 毫秒的事件,则应相应地设置阈值配置。
latency-monitor-threshold 10
如果调试会话是临时的,可以通过 redis-cli 设置阈值。
127.0.0.1:6379> CONFIG SET latency-monitor-threshold 10
要禁用延迟框架,应将阈值重新设置为 0。
127.0.0.1:6379> CONFIG SET latency-monitor-threshold 0
可以使用 LATENCY 命令及其子命令来查看延迟数据。
LATENCY LATEST
- 所有事件的最新样本LATENCY HISTORY
- 给定事件的最新时间序列LATENCY RESET
- 重置时间序列数据LATENCY GRAPH
- 渲染一个 ASCII 艺术图LATENCY DOCTOR
- 分析报告为了使用这些命令,您需要熟悉延迟监控框架跟踪的不同事件。(摘自 https://redis.ac.cn/topics/latency-monitor")
指标 | 示例警报 |
---|---|
| 常规命令 |
|
|
| the |
| the |
| 写入 AOF - 一个包含所有事件的事件 |
| the |
| the |
| the |
| the |
| the |
| the |
| 在执行 |
| 活动碎片整理周期 |
| 过期周期 |
| 驱逐周期 |
| 驱逐周期中的删除 |
例如,您可以使用 LATENCY LATEST
子命令,您可能会看到类似以下数据:
127.0.0.1:6379> latency latest
1) 1) "command"
2) (integer) 1616372606
3) (integer) 600
4) (integer) 600
2) 1) "fast-command"
2) (integer) 1616372434
3) (integer) 12
4) (integer) 12
此命令的结果提供了此事件的时间戳、延迟和最大延迟。利用上面的事件表,我可以看到常规命令的最新延迟和最大延迟为 600 毫秒,而 O(1) 或 O(log N) 命令的延迟峰值为 12 毫秒。
一些延迟命令需要传递特定的事件。
127.0.0.1:6379> latency graph command
command - high 600 ms, low 100 ms (all time high 600 ms)
--------------------------------------------------------------------------------
_##
o|||
o||||
_#|||||
3222184
05308ss
sssss
虽然启用延迟监控的成本几乎为零,内存需求也很小,但它会提高您的基线内存使用量,因此,如果您从 Redis 获得了所需的性能,则无需保持启用状态。
有很多开源监控工具和服务可以用来可视化您的 Redis 指标,其中一些还提供警报功能。
一个例子是 Grafana 的 Redis 数据源。它是一个 Grafana 插件,允许用户连接到 Redis 数据库并构建仪表板,以便轻松观察 Redis 数据。它提供了一个开箱即用的预定义仪表板,但也允许您构建针对您的特定需求定制的仪表板。
$ redis-cli --latency
min: 1, max: 17, avg: 4.03 (927 samples)