一個小技巧讓調(diào)試 grpc 不再困難
以前用 wireshark 分析過 GRPC 流量,非常方便,年初用同樣方法分析了HOL blocking 問題,感興趣的可以看看。今天記錄下全過程,分享給大家,賊好用^^
tcpdump
tcpdump -i eth0 -w tcpdump.log
上面是直接 dump 整個網(wǎng)卡的流量,如果太大的話,可以只 dump 固定 ip 或端口的
我們線上有腳本,可以全天 dump 數(shù)據(jù),然后按文件大小進行切割。大家可以自己寫,還蠻方便的,注意切割不要把磁盤打滿哦
ssh [email protected] 'tcpdump -i eth0 port 80 -s 0 -l -w -' | wireshark -k -i -還有一種騷操作是 ssh 實時 wireshark 解析,好處是不占用磁盤空間,但不是所有人都有權(quán)限
配置 wireshark
因為 GRPC 是在 http2 之上運行的,協(xié)議是 protobuf, 所以需要加載 pb 文件,否則 wireshark 無法識別自定義內(nèi)容
另外,如果走了 tls 加密,還需要在 wireshark 上加載配置解密流量
打開 Wireshark->Preference->Protocols->Protobuf

然后打開 Edit, 輸入本次測試用的 proto 文件路徑

proto 文件可能引用其它 pb 文件,所以也需要填寫搜索路徑,然后確定 這就配置完成
解析 GRPC
打開 tcpdump.log 數(shù)據(jù)文件以后,打開 Wireshark->Analyze->Decode As

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

這時會發(fā)現(xiàn),己經(jīng)能看到 http2 包數(shù)據(jù)了。如果你的數(shù)據(jù)是加密的,記得配置 tls
過濾
Wireshark 非常強大,可以根據(jù) http2 header 來過濾,也可以根據(jù) body 來過濾,很方便

如上圖,可以看到解析出了業(yè)務 endpoints, header 以及 request 內(nèi)容。比如我過濾了 http2.header.value 找到某個固定 client 的所有請求
方不方便?好不好用?撒花 ~
Wireshark 還有很多高級功能,用的時候再搜索就行。 寫文章不容易,如果對大家有所幫助和啟發(fā),請大家?guī)兔c擊在看,點贊,分享 三連
關(guān)于 調(diào)試 GRPC 大家有什么看法,歡迎留言一起討論,大牛多留言 ^_^

???
