使用 web 工具调试 grpc channelz 失败

问题描述

在此文档 A short introduction to Channelz 中,有一个名为 grpc-zpages 的网络工具可以方便地通过网页提供 channelz 数据。

但是,我们无法从此网络工具中找到任何 <script src="https://cdn.plot.ly/plotly-2.1.0.min.js"></script> <!--this is dummy table....to replicate your datatable..--> <table class="cell-border stripe dataTable no-footer" id="DataTables_Table_1" role="grid" aria-describedby="DataTables_Table_1_info"> <thead> <tr role="row"> <th class="sorting_disabled" rowspan="1" colspan="1"> </th> <th class="dt-right sorting" rowspan="1" colspan="1" aria->ID</th> <th class="dt-right sorting" rowspan="1" colspan="1" aria->Name1</th> <th class="dt-right sorting" rowspan="1" colspan="1" aria->Name2</th> <th class="dt-right sorting" rowspan="1" colspan="1" aria-label="Petal.Width: activate to sort column ascending">Value1</th> <th class="sorting" rowspan="1" colspan="1" aria>Value2</th> <th> Lat</th> <th> Lon </th> <th>lab_DB</th> </tr> </thead> <tbody> <tr role="row" class="odd"> <td>1</td> <td class="dt-right">1</td> <td class="dt-right">A</td> <td class="dt-right">b</td> <td class="dt-right">10</td> <td>20</td> <td>23.6</td> <td>23.6</td> <td>blue</td> </tr> <tr role="row" class="even"> <td>2</td> <td class=" dt-right">2</td> <td class=" dt-right">A</td> <td class=" dt-right">b</td> <td class=" dt-right">2</td> <td>7</td> <td>23.6</td> <td>23.6</td> <td>blue</td> </tr> <tr role="row" class="odd"> <td>3</td> <td class=" dt-right">3</td> <td class=" dt-right">B</td> <td class=" dt-right">b</td> <td class=" dt-right">5</td> <td>2</td> <td>23.6</td> <td>23.6</td> <td>red</td> </tr> <tr role="row" class="even"> <td>4</td> <td class=" dt-right">4</td> <td class=" dt-right">M</td> <td class=" dt-right">m</td> <td class=" dt-right">1</td> <td>2</td> <td>3.6</td> <td>23.4</td> <td>red</td> </tr> </tbody> </table> <div id="tester" style="width:600px;height:250px;"></div> 数据。有人遇到同样的问题吗?

为了运行这个网络工具,需要对代码进行一些更改

  1. 将以下代码添加TopChannelshttp_filters
zprox.sh

解决错误 function envoy_on_response(response_handle) filter_name = "ENVOY" response_handle:headers():add("my_Filter",filter_name) end

  1. 注释 envoy_on_response() function not found. lua filter will not hook responsesnetwork_mode: 'host'解决错误 start_docker.sh

  2. 替换docker.errors.InvalidArgument: "host" network_mode is incompatible with port_bindings
manual.GenerateAndRegisterManualResolver()

r := manual.NewBuilderWithScheme("whatever") r.InitialState(resolver.State{Addresses: []resolver.Address{{Addr: ":10001"},{Addr: ":10002"},{Addr: ":10003"}}}) // Set up a connection to the server. conn,err := grpc.Dial(r.Scheme()+":///test.server",grpc.WithInsecure(),grpc.WithResolvers(r),grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy":"round_robin"}`),)

解决方法

请确保您已将 channelz 服务和反射服务添加到服务器。如果你的服务是一个客户端,你需要让客户端也有一个 grpc 服务器。调用服务器与通道连接后,即可获取相关数据。

grpc-zpages 不维护了,用起来很不方便。我建议使用 channelzcli 替换。