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