Files
Craig Tiller 339906443b [clang-format] Match include file ordering to internal clang-format (#40905)
gRPC is currently getting formatted with two different clang-format implementations, and due to some weirdness they have different include file orderings. This change introduces clang-format configuration to ensure that the two systems align - it's *highly* expected that this will need some maintenance going forward as the two systems evolve.

Closes #40905

PiperOrigin-RevId: 819606209
2025-10-15 00:24:11 -07:00
..
2025-03-27 18:49:43 -07:00

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:

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:

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:

server_metric_recorder->SetCpuUtilization(0.75);