xref: /aosp_15_r20/external/grpc-grpc/src/python/grpcio_observability/README.rst (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard WorkergRPC Python Observability
2*cc02d7e2SAndroid Build Coastguard Worker=========================
3*cc02d7e2SAndroid Build Coastguard Worker
4*cc02d7e2SAndroid Build Coastguard WorkerPackage for gRPC Python Observability.
5*cc02d7e2SAndroid Build Coastguard Worker
6*cc02d7e2SAndroid Build Coastguard WorkerMore details can be found in `OpenTelemetry Metrics gRFC <https://github.com/grpc/proposal/blob/master/A66-otel-stats.md#opentelemetry-metrics>`_.
7*cc02d7e2SAndroid Build Coastguard Worker
8*cc02d7e2SAndroid Build Coastguard WorkerHow gRPC Python Observability Works
9*cc02d7e2SAndroid Build Coastguard Worker-----------------------------------
10*cc02d7e2SAndroid Build Coastguard Worker
11*cc02d7e2SAndroid Build Coastguard WorkergRPC Python is a wrapper layer built upon the gRPC Core (written in C/C++). Most of telemetry data
12*cc02d7e2SAndroid Build Coastguard Workeris collected at core layer and then exported to Python layer. To optimize performance and reduce
13*cc02d7e2SAndroid Build Coastguard Workerthe overhead of acquiring the GIL too frequently, telemetry data is initially cached at the Core layer
14*cc02d7e2SAndroid Build Coastguard Workerand then exported to the Python layer in batches.
15*cc02d7e2SAndroid Build Coastguard Worker
16*cc02d7e2SAndroid Build Coastguard WorkerNote that while this approach enhances efficiency, it will introduce a slight delay between the
17*cc02d7e2SAndroid Build Coastguard Workertime the data is collected and the time it becomes available through Python exporters.
18*cc02d7e2SAndroid Build Coastguard Worker
19*cc02d7e2SAndroid Build Coastguard Worker
20*cc02d7e2SAndroid Build Coastguard WorkerSupported Python Versions
21*cc02d7e2SAndroid Build Coastguard Worker-------------------------
22*cc02d7e2SAndroid Build Coastguard WorkerPython >= 3.7
23*cc02d7e2SAndroid Build Coastguard Worker
24*cc02d7e2SAndroid Build Coastguard WorkerInstallation
25*cc02d7e2SAndroid Build Coastguard Worker------------
26*cc02d7e2SAndroid Build Coastguard Worker
27*cc02d7e2SAndroid Build Coastguard WorkerCurrently gRPC Python Observability is **only available for Linux**.
28*cc02d7e2SAndroid Build Coastguard Worker
29*cc02d7e2SAndroid Build Coastguard WorkerInstalling From PyPI
30*cc02d7e2SAndroid Build Coastguard Worker~~~~~~~~~~~~~~~~~~~~
31*cc02d7e2SAndroid Build Coastguard Worker
32*cc02d7e2SAndroid Build Coastguard Worker::
33*cc02d7e2SAndroid Build Coastguard Worker
34*cc02d7e2SAndroid Build Coastguard Worker  $ pip install grpcio-observability
35*cc02d7e2SAndroid Build Coastguard Worker
36*cc02d7e2SAndroid Build Coastguard Worker
37*cc02d7e2SAndroid Build Coastguard WorkerInstalling From Source
38*cc02d7e2SAndroid Build Coastguard Worker~~~~~~~~~~~~~~~~~~~~~~
39*cc02d7e2SAndroid Build Coastguard Worker
40*cc02d7e2SAndroid Build Coastguard WorkerBuilding from source requires that you have the Python headers (usually a
41*cc02d7e2SAndroid Build Coastguard Workerpackage named :code:`python-dev`) and Cython installed. It further requires a
42*cc02d7e2SAndroid Build Coastguard WorkerGCC-like compiler to go smoothly; you can probably get it to work without
43*cc02d7e2SAndroid Build Coastguard WorkerGCC-like stuff, but you may end up having a bad time.
44*cc02d7e2SAndroid Build Coastguard Worker
45*cc02d7e2SAndroid Build Coastguard Worker::
46*cc02d7e2SAndroid Build Coastguard Worker
47*cc02d7e2SAndroid Build Coastguard Worker  $ export REPO_ROOT=grpc  # REPO_ROOT can be any directory of your choice
48*cc02d7e2SAndroid Build Coastguard Worker  $ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc $REPO_ROOT
49*cc02d7e2SAndroid Build Coastguard Worker  $ cd $REPO_ROOT
50*cc02d7e2SAndroid Build Coastguard Worker  $ git submodule update --init
51*cc02d7e2SAndroid Build Coastguard Worker
52*cc02d7e2SAndroid Build Coastguard Worker  $ cd src/python/grpcio_observability
53*cc02d7e2SAndroid Build Coastguard Worker  $ python -m make_grpcio_observability
54*cc02d7e2SAndroid Build Coastguard Worker
55*cc02d7e2SAndroid Build Coastguard Worker  # For the next command do `sudo pip install` if you get permission-denied errors
56*cc02d7e2SAndroid Build Coastguard Worker  $ GRPC_PYTHON_BUILD_WITH_CYTHON=1 pip install .
57*cc02d7e2SAndroid Build Coastguard Worker
58*cc02d7e2SAndroid Build Coastguard Worker
59*cc02d7e2SAndroid Build Coastguard WorkerDependencies
60*cc02d7e2SAndroid Build Coastguard Worker------------
61*cc02d7e2SAndroid Build Coastguard WorkergRPC Python Observability Depends on the following packages:
62*cc02d7e2SAndroid Build Coastguard Worker
63*cc02d7e2SAndroid Build Coastguard Worker::
64*cc02d7e2SAndroid Build Coastguard Worker
65*cc02d7e2SAndroid Build Coastguard Worker  grpcio
66*cc02d7e2SAndroid Build Coastguard Worker  opentelemetry-api==1.21.0
67*cc02d7e2SAndroid Build Coastguard Worker
68*cc02d7e2SAndroid Build Coastguard Worker
69*cc02d7e2SAndroid Build Coastguard WorkerUsage
70*cc02d7e2SAndroid Build Coastguard Worker-----
71*cc02d7e2SAndroid Build Coastguard Worker
72*cc02d7e2SAndroid Build Coastguard WorkerYou can find example usage in `Python example folder <https://github.com/grpc/grpc/tree/master/examples/python/observability>`_.
73*cc02d7e2SAndroid Build Coastguard Worker
74*cc02d7e2SAndroid Build Coastguard WorkerWe also provide several environment variables to help you optimize gRPC python observability for your particular use.
75*cc02d7e2SAndroid Build Coastguard Worker
76*cc02d7e2SAndroid Build Coastguard Worker1. GRPC_PYTHON_CENSUS_EXPORT_BATCH_INTERVAL
77*cc02d7e2SAndroid Build Coastguard Worker    * This controls how frequently telemetry data collected within gRPC Core is sent to Python layer.
78*cc02d7e2SAndroid Build Coastguard Worker    * Default value is 0.5 (Seconds).
79*cc02d7e2SAndroid Build Coastguard Worker
80*cc02d7e2SAndroid Build Coastguard Worker2. GRPC_PYTHON_CENSUS_MAX_EXPORT_BUFFER_SIZE
81*cc02d7e2SAndroid Build Coastguard Worker    * This controls the maximum number of telemetry data items that can be held in the buffer within gRPC Core before they are sent to Python.
82*cc02d7e2SAndroid Build Coastguard Worker    * Default value is 10,000.
83*cc02d7e2SAndroid Build Coastguard Worker
84*cc02d7e2SAndroid Build Coastguard Worker3. GRPC_PYTHON_CENSUS_EXPORT_THRESHOLD
85*cc02d7e2SAndroid Build Coastguard Worker    * This setting acts as a trigger: When the buffer in gRPC Core reaches a certain percentage of its capacity, the telemetry data is sent to Python.
86*cc02d7e2SAndroid Build Coastguard Worker    * Default value is 0.7 (Which means buffer will start export when it's 70% full).
87*cc02d7e2SAndroid Build Coastguard Worker
88*cc02d7e2SAndroid Build Coastguard Worker4. GRPC_PYTHON_CENSUS_EXPORT_THREAD_TIMEOUT
89*cc02d7e2SAndroid Build Coastguard Worker    * This controls the maximum time allowed for the exporting thread (responsible for sending data to Python) to complete.
90*cc02d7e2SAndroid Build Coastguard Worker    * Main thread will terminate the exporting thread after this timeout.
91*cc02d7e2SAndroid Build Coastguard Worker    * Default value is 10 (Seconds).
92