gRPC Observability Example
=====================

The examples here demonstrate how to setup gRPC Python Observability with OpenTelemetry.

More details about how to use gRPC Python Observability APIs can be found in [OpenTelemetry Metrics gRFC](https://github.com/grpc/proposal/blob/master/A66-otel-stats.md#opentelemetry-metrics).

This directory contains both synchronous and asynchronous (AsyncIO) examples of gRPC observability.

### Install Requirements

1. Navigate to this directory:

```sh
cd examples/python/observability
```

2. Install requirements:

```sh
python -m pip install -r requirements.txt
```

### Synchronous Example

#### Run the Server

Start the server:

```sh
python -m observability_greeter_server
```

#### Run the Client

Note that client should start within 10 seconds of the server becoming active.

```sh
python -m observability_greeter_client
```

### AsyncIO Example

#### Run the Server

Start the server:

```sh
python -m async_observability_greeter_server
```

#### Run the Client

Note that client should start within 10 seconds of the server becoming active.

```sh
python -m async_observability_greeter_client
```

### Verifying Metrics

Both synchronous and asynchronous examples will print a list of metric names collected.

Server Side:

```
Server started, listening on 50051
Metrics exported on Server side:
grpc.server.call.started
grpc.server.call.sent_total_compressed_message_size
grpc.server.call.rcvd_total_compressed_message_size
grpc.server.call.duration
```

Client Side:

```
Greeter client received: Hello You
Metrics exported on client side:
grpc.client.call.duration
grpc.client.attempt.started
grpc.client.attempt.sent_total_compressed_message_size
grpc.client.attempt.rcvd_total_compressed_message_size
grpc.client.attempt.duration
```
