如何调试grpc调用?

jer*_*jou 23 grpc

我试图找出为什么我的grpc调用不起作用,但我无法弄清楚如何打开调试,所以我可以看到通过grpc连接发送和接收的数据.

你如何打开grpc调用的调试?

jer*_*jou 38

您可以将GRPC_TRACE环境变量设置all为让grpc转储有关连接正在执行的操作的大量数据:

export GRPC_TRACE=all
Run Code Online (Sandbox Code Playgroud)

从评论中编辑:显然你还需要设置:

export GRPC_VERBOSITY=DEBUG
Run Code Online (Sandbox Code Playgroud)

  • 啊,发现它https://github.com/grpc/grpc/issues/7960#issuecomment-250801871 (3认同)
  • 我试过这个并没有在控制台中看到任何东西.你的应用程序中有没有其他东西可以获得输出? (2认同)
  • 看起来只有“基于C核心的实现”支持这些环境变量(例如Go不是其中之一)。对于grpc-go,请参见`EnableGRPCTracing`。https://godoc.org/cloud.google.com/go/trace#pkg-variables (2认同)

Fuz*_*Ami 6

在Golang中,您需要设置GODEBUG环境变量以查看HTTP2跟踪,即gRPC设置的标头:

GODEBUG=http2debug=1   # enable verbose HTTP/2 debug logs
GODEBUG=http2debug=2   # ... even more verbose, with frame dumps
Run Code Online (Sandbox Code Playgroud)

然后将输出发送到stdout。这是一个例子:

{"level":"info","msg":"2017/06/11 08:52:20 http2: Framer 0xc42009c0e0: wrote SETTINGS len=0","time":"2017-06-11T08:52:20Z"}
{"level":"info","msg":"2017/06/11 08:52:20 http2: Framer 0xc42009c0e0: wrote WINDOW_UPDATE len=4 (conn) incr=983025","time":"2017-06-11T08:52:20Z"}
{"level":"info","msg":"2017/06/11 08:52:20 http2: Framer 0xc42009c0e0: read SETTINGS len=18, settings: ENABLE_PUSH=0, MAX_CONCURRENT_STREAMS=0, INITIAL_WINDOW_SIZE=1048576","time":"2017-06-11T08:52:20Z"}
{"level":"info","msg":"2017/06/11 08:52:20 http2: Framer 0xc42009c0e0: read WINDOW_UPDATE len=4 (conn) incr=983041","time":"2017-06-11T08:52:20Z"}
{"level":"info","msg":"2017/06/11 08:52:20 http2: Framer 0xc42009c0e0: wrote SETTINGS flags=ACK len=0","time":"2017-06-11T08:52:20Z"}
{"level":"info","msg":"2017/06/11 08:52:20 http2: Framer 0xc42009c0e0: read SETTINGS flags=ACK len=0","time":"2017-06-11T08:52:20Z"}
{"level":"info","msg":"2017/06/11 08:52:20 http2: Framer 0xc42009c0e0: read HEADERS flags=END_HEADERS|PRIORITY stream=3 len=249","time":"2017-06-11T08:52:20Z"}
{"level":"info","msg":"2017/06/11 08:52:20 http2: decoded hpack field header field \":authority\" = \"\"","time":"2017-06-11T08:52:20Z"}
{"level":"info","msg":"2017/06/11 08:52:20 http2: decoded hpack field header field \":path\" = \"/internal.push.v1.UnifiedDevicePush/SendMessage\"","time":"2017-06-11T08:52:20Z"}
{"level":"info","msg":"2017/06/11 08:52:20 http2: decoded hpack field header field \":method\" = \"POST\"","time":"2017-06-11T08:52:20Z"}
{"level":"info","msg":"2017/06/11 08:52:20 http2: decoded hpack field header field \":scheme\" = \"http\"","time":"2017-06-11T08:52:20Z"}
{"level":"info","msg":"2017/06/11 08:52:20 http2: decoded hpack field header field \"content-type\" = \"application/grpc\"","time":"2017-06-11T08:52:20Z"}
{"level":"info","msg":"2017/06/11 08:52:20 http2: decoded hpack field header field \"te\" = \"trailers\"","time":"2017-06-11T08:52:20Z"}
{"level":"info","msg":"2017/06/11 08:52:20 http2: decoded hpack field header field \"user-agent\" = \"grpc-java-netty/1.0.3\"","time":"2017-06-11T08:52:20Z"}
{"level":"info","msg":"2017/06/11 08:52:20 http2: decoded hpack field header field \"root-common.xirequestid-bin\" = \"ChIJzE6lBfCTCsYRoIIJujc92JY=\"","time":"2017-06-11T08:52:20Z"}
{"level":"info","msg":"2017/06/11 08:52:20 http2: decoded hpack field header field \"te\" = \"trailers\"","time":"2017-06-11T08:52:20Z"}
Run Code Online (Sandbox Code Playgroud)

  • @Dominik-感谢您的编辑。我写这个答案的时候一定很高兴:/ (2认同)

Moz*_*zhi 6

导出 GRPC_GO_LOG_VERBOSITY_LEVEL=99
导出 GRPC_GO_LOG_SEVERITY_LEVEL=信息

用最新的 grpc go 版本试试这个。


Pha*_*vij 6

来自文档

GRPC_VERBOSITY用于设置 gRPC 打印的日志消息的最低级别(支持的值为DEBUGINFOERROR)。如果未设置该环境变量,则仅ERROR打印日志。

另外,检查GRPC_TRACE

grpc环境变量有15+个

Windows 用户注意事项,引用自文档

已知限制:GPRC_TRACE=tcp目前尚未针对 Windows 实现(您不会看到任何 TCP 跟踪)。