除了上面部分中来自数据点的指标、内存和延迟框架之外,您可能还需要从其他来源提取数据进行故障排除。
Redis服务器将在正常运行时响应 PING 命令:
$ redis-cli -h redis.example.com -p 6379 PING
PONG
Redis慢速日志是一个系统,用于记录超过特定执行时间的查询,不包括I/O操作(如客户端通信)。默认情况下,它启用两个配置参数。
slowlog-log-slower-than 1000000
这表明如果执行时间超过以微秒为单位的时间(在本例中为一秒),它将被记录。慢速日志可以使用 -1 值禁用。它也可以设置为使用 0 值记录每个命令。
slowlog-max-len 128
这设置了慢速日志的长度。当记录新的命令时,最旧的命令将从队列中删除。
这些值也可以使用 CONFIG SET
命令在运行时更改。
您可以使用 LEN
子命令查看慢速日志的当前长度
redis.cloud:6379> slowlog len
(integer) 11
可以使用 GET
子命令从慢速日志中提取条目。
redis.cloud:6379> slowlog get 2
1) 1) (integer) 10
2) (integer) 1616372606
3) (integer) 600406
4) 1) "debug"
2) "sleep"
3) ".6"
5) "172.17.0.1:60546"
6) ""
2) 1) (integer) 9
2) (integer) 1616372602
3) (integer) 600565
4) 1) "debug"
2) "sleep"
3) ".6"
5) "172.17.0.1:60546"
6) ""
可以使用 RESET
子命令重置慢速日志。
redis.cloud:6379> slowlog reset
OK
redis.cloud:6379> slowlog len
(integer) 0
有一些选项可以传递给redis-cli,这些选项将触发键空间分析。它们使用 SCAN
命令,因此它们应该可以安全地运行,而不会影响操作。您可以在它们所有输出中看到如果需要,有一个节流选项。
大键: 此选项将扫描数据集以查找大键,并提供有关它们的信息。
$ redis-cli --bigkeys
# Scanning the entire keyspace to find biggest keys as well as
# average sizes per key type. You can use -i 0.1 to sleep 0.1 sec
# per 100 SCAN commands (not usually needed).
[00.00%] Biggest string found so far '"counter:__rand_int__"' with 6 bytes
[00.00%] Biggest hash found so far '"myhash"' with 1 fields
[00.00%] Biggest list found so far '"mylist"' with 200000 items
-------- summary -------
Sampled 4 keys in the keyspace!
Total key length in bytes is 48 (avg len 12.00)
Biggest list found '"mylist"' has 200000 items
Biggest hash found '"myhash"' has 1 fields
Biggest string found '"counter:__rand_int__"' has 6 bytes
1 lists with 200000 items (25.00% of keys, avg size 200000.00)
1 hashs with 1 fields (25.00% of keys, avg size 1.00)
2 strings with 9 bytes (50.00% of keys, avg size 4.50)
0 streams with 0 entries (00.00% of keys, avg size 0.00)
0 sets with 0 members (00.00% of keys, avg size 0.00)
0 zsets with 0 members (00.00% of keys, avg size 0.00)
内存键: 与大键类似,内存键将查找最大的键,但也报告平均大小。
$ redis-cli --memkeys
# Scanning the entire keyspace to find biggest keys as well as
# average sizes per key type. You can use -i 0.1 to sleep 0.1 sec
# per 100 SCAN commands (not usually needed).
[00.00%] Biggest string found so far '"counter:__rand_int__"' with 62 bytes
[00.00%] Biggest string found so far '"key:__rand_int__"' with 63 bytes
[00.00%] Biggest hash found so far '"myhash"' with 86 bytes
[00.00%] Biggest list found so far '"mylist"' with 860473 bytes
-------- summary -------
Sampled 4 keys in the keyspace!
Total key length in bytes is 48 (avg len 12.00)
Biggest list found '"mylist"' has 860473 bytes
Biggest hash found '"myhash"' has 86 bytes
Biggest string found '"key:__rand_int__"' has 63 bytes
1 lists with 860473 bytes (25.00% of keys, avg size 860473.00)
1 hashs with 86 bytes (25.00% of keys, avg size 86.00)
2 strings with 125 bytes (50.00% of keys, avg size 62.50)
0 streams with 0 bytes (00.00% of keys, avg size 0.00)
0 sets with 0 bytes (00.00% of keys, avg size 0.00)
0 zsets with 0 bytes (00.00% of keys, avg size 0.00)
热键: 热键扫描仅在 maxmemory-policy
设置为 volatile-lfu
或 allkeys-lfu
时可用。如果您需要识别热键,可以将此参数添加到redis-cli。
$ redis-cli --hotkeys
# Scanning the entire keyspace to find hot keys as well as
# average sizes per key type. You can use -i 0.1 to sleep 0.1 sec
# per 100 SCAN commands (not usually needed).
[00.00%] Hot key '"key:__rand_int__"' found so far with counter 37
-------- summary -------
Sampled 5 keys in the keyspace!
hot key found with counter: 37 keyname: "key:__rand_int__"
监控: 该 MONITOR
命令允许您查看针对Redis实例运行的每个命令的流。
127.0.0.1:6379 > monitor
OK
1616541192.039933 [0 127.0.0.1:57070] "PING"
1616541276.052331 [0 127.0.0.1:57098] "set" "user:2398423hu" "KutMo"
由于 MONITOR
会将所有命令流回,因此使用它会付出代价。已知它会将性能降低多达 50%,因此请谨慎使用!
Redis日志文件是您需要了解的另一个重要日志。它包含有关配置和部署错误的故障排除的有用信息。如果您没有配置Redis日志记录,故障排除将变得更加困难。
Redis有四个日志级别,您可以在 redis.conf
文件中直接配置它们。
日志级别
WARNING
NOTICE
VERBOSE
DEBUG
Redis还支持通过使用syslog将日志文件发送到远程日志服务器。
远程日志记录对许多安全专业人员很重要。这些远程日志服务器经常用于监控安全事件和管理事件。这些集中式日志服务器执行三个常见功能:确保日志文件的完整性,确保日志保留特定时间段,并将日志与其他系统日志相关联以发现对基础设施的潜在攻击。
让我们在Redis部署上设置日志记录。首先,我们将打开我们的 redis.conf
文件
$ sudo vi /etc/redis/redis.conf
该 redis.conf
文件有一个专门用于日志记录的完整部分。
首先,在 redis.conf
文件中找到logfile指令。这将允许您定义日志记录目录。对于此示例,让我们使用 /var/log/redis/redis.log
。
如果您想使用远程日志服务器,那么您需要取消注释 syslog-enabled
, syslog-ident
和 syslog-facility
行,并确保 syslog-enabled
设置为yes。
接下来,我们将重新启动Redis服务器。
您应该看到指示Redis正在启动的日志事件。
$ sudo tail -f /var/log/redis/redis.log
接下来,让我们检查我们是否正确地写入syslog。您应该看到这些相同的日志。
$ less /var/log/syslog | grep redis
最后,您需要将日志发送到您的远程日志服务器,以确保您的日志将备份到此服务器。为此,您还需要修改rsyslog配置。此配置因您的远程日志服务器提供商而异。