vlambda博客
学习文章列表

一个小技巧让调试 grpc 不再困难

以前用 wireshark 分析过 GRPC 流量,非常方便,年初用同样方法分析了,感兴趣的可以看看。今天记录下全过程,分享给大家,贼好用^^

tcpdump

tcpdump -i eth0 -w tcpdump.log

上面是直接 dump 整个网卡的流量,如果太大的话,可以只 dump 固定 ip 或端口的

我们线上有脚本,可以全天 dump 数据,然后按文件大小进行切割。大家可以自己写,还蛮方便的,注意切割不要把磁盘打满哦

ssh [email protected] 'tcpdump -i eth0 port 80 -s 0 -l -w -' | wireshark -k -i -


还有一种骚操作是 ssh 实时 wireshark 解析,好处是不占用磁盘空间,但不是所有人都有权限

配置 wireshark

因为 GRPC 是在 http2 之上运行的,协议是 protobuf, 所以需要加载 pb 文件,否则 wireshark 无法识别自定义内容

另外,如果走了 tls 加密,还需要在 wireshark 上加载配置解密流量

打开 Wireshark->Preference->Protocols->Protobuf

然后打开 Edit, 输入本次测试用的 proto 文件路径

一个小技巧让调试 grpc 不再困难

proto 文件可能引用其它 pb 文件,所以也需要填写搜索路径,然后确定 这就配置完成

解析 GRPC

打开 tcpdump.log 数据文件以后,打开 Wireshark->Analyze->Decode As

一个小技巧让调试 grpc 不再困难

如上所示,因为我要解析 10177 http2, 添加后确定

一个小技巧让调试 grpc 不再困难

这时会发现,己经能看到 http2 包数据了。如果你的数据是加密的,记得配置 tls

过滤

Wireshark 非常强大,可以根据 http2 header 来过滤,也可以根据 body 来过滤,很方便

一个小技巧让调试 grpc 不再困难

如上图,可以看到解析出了业务 endpoints, header 以及 request 内容。比如我过滤了 http2.header.value 找到某个固定 client 的所有请求

方不方便?好不好用?撒花 ~

Wireshark 还有很多高级功能,用的时候再搜索就行。 写文章不容易,如果对大家有所帮助和启发,请大家帮忙点击在看点赞分享 三连

关于 调试 GRPC 大家有什么看法,欢迎留言一起讨论,大牛多留言 ^_^


   


喜欢明哥文章的同学
欢迎长按下图订阅!

⬇⬇⬇