可以通过 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
Server:当前的 Redis 服务器信息。
值得注意的指标
redis_version
process_id
config_file
uptime_in_seconds
uptime_in_days
Clients:关于连接客户端或失败连接的可用数据。
值得注意的指标
connected_clients
blocked_clients
Memory:内存使用情况和统计信息
值得注意的指标
used_memory
mem_fragmentation_ratio
Persistence:RDB 或 AOF 指标
值得注意的指标
rdb_last_save_time
rdb_changes_since_last_save
aof_rewrite_in_progress
Stats:一些常规统计信息
值得注意的指标
keyspace_hits
keyspace_misses
expired_keys
evicted_keys
instantaneous_ops_per_sec
Replication:复制数据,包括主/副本标识符和偏移量
值得注意的指标
master_link_down_since
connected_slaves
master_last_io_seconds_ago
CPU:计算消耗统计信息
值得注意的指标
used_cpu_sys
used_cpu_user
Modules:来自任何已加载模块的数据
值得注意的指标(每个模块)
ver
options
Cluster:集群是否已启用
值得注意的指标
cluster_enabled
Keyspace:键和过期数据
值得注意的指标(每个数据库)
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
如果调试会话 intended 是临时的,可以通过 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")
指标 | 警报示例 |
---|---|
| 常规命令 |
|
|
|
|
|
|
| 写入 AOF - 一个包罗万象的事件 |
| 当由 appendfsync always 策略调用时, |
| 当存在待写入操作时, |
| 由子进程执行的 |
| 由主进程执行的 |
|
|
| 完成 |
| 写入执行 |
| 主动碎片整理周期 |
| 过期周期 |
| 逐出周期 |
| 逐出周期期间的删除 |
例如,您可以使用 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 指标 - 其中一些还提供了警报功能。
其中一个例子是 Redis Data Source for Grafana。它是 Grafana 插件,允许用户连接到 Redis 数据库并构建仪表盘以轻松观察 Redis 数据。它提供了一个开箱即用的预定义仪表盘,但也允许您构建根据您的特定需求调整的自定义仪表盘。
$ redis-cli --latency
min: 1, max: 17, avg: 4.03 (927 samples)