xref: /aosp_15_r20/external/grpc-grpc/examples/python/debug/README.md (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker# gRPC Python Debug Example
2*cc02d7e2SAndroid Build Coastguard Worker
3*cc02d7e2SAndroid Build Coastguard WorkerThis example demonstrate the usage of Channelz. For a better looking website,
4*cc02d7e2SAndroid Build Coastguard Workerthe [gdebug](https://github.com/grpc/grpc-experiments/tree/master/gdebug) uses
5*cc02d7e2SAndroid Build Coastguard WorkergRPC-Web protocol and will serve all useful information in web pages.
6*cc02d7e2SAndroid Build Coastguard Worker
7*cc02d7e2SAndroid Build Coastguard Worker## Channelz: Live Channel Tracing
8*cc02d7e2SAndroid Build Coastguard Worker
9*cc02d7e2SAndroid Build Coastguard WorkerChannelz is a channel tracing feature. It will track statistics like how many
10*cc02d7e2SAndroid Build Coastguard Workermessages have been sent, how many of them failed, what are the connected
11*cc02d7e2SAndroid Build Coastguard Workersockets. Since it is implemented in C-Core and has low-overhead, it is
12*cc02d7e2SAndroid Build Coastguard Workerrecommended to turn on for production services. See [Channelz design
13*cc02d7e2SAndroid Build Coastguard Workerdoc](https://github.com/grpc/proposal/blob/master/A14-channelz.md).
14*cc02d7e2SAndroid Build Coastguard Worker
15*cc02d7e2SAndroid Build Coastguard Worker## How to enable tracing log
16*cc02d7e2SAndroid Build Coastguard WorkerThe tracing log generation might have larger overhead, especially when you try
17*cc02d7e2SAndroid Build Coastguard Workerto trace transport. It would result in replicating the traffic loads. However,
18*cc02d7e2SAndroid Build Coastguard Workerit is still the most powerful tool when you need to dive in.
19*cc02d7e2SAndroid Build Coastguard Worker
20*cc02d7e2SAndroid Build Coastguard Worker### The Most Verbose Tracing Log
21*cc02d7e2SAndroid Build Coastguard Worker
22*cc02d7e2SAndroid Build Coastguard WorkerSpecify environment variables, then run your application:
23*cc02d7e2SAndroid Build Coastguard Worker
24*cc02d7e2SAndroid Build Coastguard Worker```
25*cc02d7e2SAndroid Build Coastguard WorkerGRPC_VERBOSITY=debug
26*cc02d7e2SAndroid Build Coastguard WorkerGRPC_TRACE=all
27*cc02d7e2SAndroid Build Coastguard Worker```
28*cc02d7e2SAndroid Build Coastguard Worker
29*cc02d7e2SAndroid Build Coastguard WorkerFor more granularity, please see
30*cc02d7e2SAndroid Build Coastguard Worker[environment_variables](https://github.com/grpc/grpc/blob/master/doc/environment_variables.md).
31*cc02d7e2SAndroid Build Coastguard Worker
32*cc02d7e2SAndroid Build Coastguard Worker### Debug Transport Protocol
33*cc02d7e2SAndroid Build Coastguard Worker
34*cc02d7e2SAndroid Build Coastguard Worker```
35*cc02d7e2SAndroid Build Coastguard WorkerGRPC_VERBOSITY=debug
36*cc02d7e2SAndroid Build Coastguard WorkerGRPC_TRACE=tcp,http,secure_endpoint,transport_security
37*cc02d7e2SAndroid Build Coastguard Worker```
38*cc02d7e2SAndroid Build Coastguard Worker
39*cc02d7e2SAndroid Build Coastguard Worker### Debug Connection Behavior
40*cc02d7e2SAndroid Build Coastguard Worker
41*cc02d7e2SAndroid Build Coastguard Worker```
42*cc02d7e2SAndroid Build Coastguard WorkerGRPC_VERBOSITY=debug
43*cc02d7e2SAndroid Build Coastguard WorkerGRPC_TRACE=call_error,connectivity_state,pick_first,round_robin,glb
44*cc02d7e2SAndroid Build Coastguard Worker```
45*cc02d7e2SAndroid Build Coastguard Worker
46*cc02d7e2SAndroid Build Coastguard Worker## How to debug your application?
47*cc02d7e2SAndroid Build Coastguard Worker
48*cc02d7e2SAndroid Build Coastguard Worker`pdb` is a debugging tool that is available for Python interpreters natively.
49*cc02d7e2SAndroid Build Coastguard WorkerYou can set breakpoint, and execute commands while the application is stopped.
50*cc02d7e2SAndroid Build Coastguard Worker
51*cc02d7e2SAndroid Build Coastguard WorkerThe simplest usage is add a single line in the place you want to inspect:
52*cc02d7e2SAndroid Build Coastguard Worker`import pdb; pdb.set_trace()`. When interpreter see this line, it would pop out
53*cc02d7e2SAndroid Build Coastguard Workera interactive command line interface for you to inspect the application state.
54*cc02d7e2SAndroid Build Coastguard Worker
55*cc02d7e2SAndroid Build Coastguard WorkerFor more detailed usage, see https://docs.python.org/3/library/pdb.html.
56*cc02d7e2SAndroid Build Coastguard Worker
57*cc02d7e2SAndroid Build Coastguard Worker**Caveat**: gRPC Python uses C-Extension under-the-hood, so `pdb` may not be
58*cc02d7e2SAndroid Build Coastguard Workerable to trace through the whole stack.
59*cc02d7e2SAndroid Build Coastguard Worker
60*cc02d7e2SAndroid Build Coastguard Worker## gRPC Command Line Tool
61*cc02d7e2SAndroid Build Coastguard Worker
62*cc02d7e2SAndroid Build Coastguard Worker`grpc_cli` is a handy tool to interact with gRPC backend easily. Imageine you can
63*cc02d7e2SAndroid Build Coastguard Workerinspect what service does a server provide without writing any code, and make
64*cc02d7e2SAndroid Build Coastguard WorkergRPC calls just like `curl`.
65*cc02d7e2SAndroid Build Coastguard Worker
66*cc02d7e2SAndroid Build Coastguard WorkerThe installation guide: https://github.com/grpc/grpc/blob/master/doc/command_line_tool.md#code-location
67*cc02d7e2SAndroid Build Coastguard WorkerThe usage guide: https://github.com/grpc/grpc/blob/master/doc/command_line_tool.md#usage
68*cc02d7e2SAndroid Build Coastguard WorkerThe source code: https://github.com/grpc/grpc/blob/master/test/cpp/util/grpc_cli.cc
69