| # gRPC Custom Metrics Example |
| |
| You can find a complete set of instructions for building gRPC and running the |
| examples in the [C++ Quick Start][]. |
| |
| This example shows how to implement a server that provides custom metrics usable |
| by custom load balancing policies. |
| |
| Server needs to be setup with metrics recorder and Orca service for sending |
| these metrics to a client: |
| |
| ```c++ |
| GreeterServiceImpl service; |
| // Setup custom metrics recording |
| auto server_metric_recorder = |
| grpc::experimental::ServerMetricRecorder::Create(); |
| grpc::experimental::OrcaService orca_service( |
| server_metric_recorder.get(), |
| grpc::experimental::OrcaService::Options().set_min_report_duration( |
| absl::Seconds(0.1))); |
| builder.RegisterService(&orca_service); |
| grpc::ServerBuilder::experimental_type(&builder).EnableCallMetricRecording( |
| nullptr); |
| ``` |
| |
| Afterwards per-request metrics can be reported from the gRPC service |
| implementation using the metric recorder from the request context: |
| |
| ```c++ |
| auto recorder = context->ExperimentalGetCallMetricRecorder(); |
| if (recorder == nullptr) { |
| return Status(grpc::StatusCode::INTERNAL, |
| "Unable to access metrics recorder. Make sure " |
| "EnableCallMetricRecording had been called."); |
| } |
| recorder->RecordCpuUtilizationMetric(0.5); |
| ``` |
| |
| Out of band metrics can be reported using the `server_metric_recorder` |
| directly: |
| |
| ```c++ |
| server_metric_recorder->SetCpuUtilization(0.75); |
| ``` |
| |
| [C++ Quick Start]: https://grpc.io/docs/languages/cpp/quickstart |