MONITOR

用法
MONITOR
始于
1.0.0
ACL 类别
@admin, @dangerous, @slow

MONITOR 是一个调试命令,它会实时返回 Valkey 服务器处理的每个命令。这有助于了解数据库中正在发生的事情。此命令可以通过 valkey-clitelnet 使用。

查看服务器处理的所有请求的能力,在使用 Valkey 作为数据库和分布式缓存系统时,对于发现应用程序中的错误都非常有用。

$ valkey-cli monitor
1339518083.107412 [0 127.0.0.1:60866] "keys" "*"
1339518087.877697 [0 127.0.0.1:60866] "dbsize"
1339518090.420270 [0 127.0.0.1:60866] "set" "x" "6"
1339518096.506257 [0 127.0.0.1:60866] "get" "x"
1339518099.363765 [0 127.0.0.1:60866] "eval" "return server.call('set','x','7')" "0"
1339518100.363799 [0 lua] "set" "x" "7"
1339518100.544926 [0 127.0.0.1:60866] "del" "x"

使用 SIGINT (Ctrl-C) 停止通过 valkey-cli 运行的 MONITOR 流。

$ telnet localhost 6379
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
MONITOR
+OK
+1339518083.107412 [0 127.0.0.1:60866] "keys" "*"
+1339518087.877697 [0 127.0.0.1:60866] "dbsize"
+1339518090.420270 [0 127.0.0.1:60866] "set" "x" "6"
+1339518096.506257 [0 127.0.0.1:60866] "get" "x"
+1339518099.363765 [0 127.0.0.1:60866] "del" "x"
+1339518100.544926 [0 127.0.0.1:60866] "get" "x"
QUIT
+OK
Connection closed by foreign host.

手动执行 QUITRESET 命令以停止通过 telnet 运行的 MONITOR 流。

MONITOR 不记录的命令

出于安全考虑,MONITOR 的输出不记录任何管理命令,并且 AUTH 命令中的敏感数据会被匿名化处理。

此外,命令 QUIT 也不会被记录。

运行 MONITOR 的开销

因为 MONITOR 会回传所有命令,所以它的使用会带来一定的开销。以下(完全不科学的)基准测试数据说明了运行 MONITOR 可能产生的开销。

运行 MONITOR 时的基准测试结果

$ src/valkey-benchmark -c 10 -n 100000 -q
PING_INLINE: 101936.80 requests per second
PING_BULK: 102880.66 requests per second
SET: 95419.85 requests per second
GET: 104275.29 requests per second
INCR: 93283.58 requests per second

运行 MONITOR 时的基准测试结果 (valkey-cli monitor > /dev/null)

$ src/valkey-benchmark -c 10 -n 100000 -q
PING_INLINE: 58479.53 requests per second
PING_BULK: 59136.61 requests per second
SET: 41823.50 requests per second
GET: 45330.91 requests per second
INCR: 41771.09 requests per second

在此特定情况下,运行单个 MONITOR 客户端可以将吞吐量降低 50% 以上。运行更多 MONITOR 客户端会进一步降低吞吐量。

请注意,

  • AUTH 已从命令输出中排除。
  • 可以调用 RESET 退出监控模式。
  • AUTHHELLOEVALEVAL_ROEVALSHAEVALSHA_RO 已包含在命令输出中。

RESP2/RESP3 回复

非标准返回值。以无限流的形式倾倒(输出)接收到的命令。