in e2e-examples/gcs/benchmark/grpc_otel.cc [52:83]
absl::Status StartGrpcOpenTelemetry(std::string prometheus_endpoint) {
// Register a global gRPC OpenTelemetry plugin configured with a prometheus
// exporter.
opentelemetry::exporter::metrics::PrometheusExporterOptions opts;
opts.url = prometheus_endpoint;
auto prometheus_exporter =
opentelemetry::exporter::metrics::PrometheusExporterFactory::Create(opts);
auto meter_provider =
std::make_shared<opentelemetry::sdk::metrics::MeterProvider>();
// The default histogram boundaries are not granular enough for RPCs. Override
// the "grpc.client.attempt.duration" view as recommended by
// https://github.com/grpc/proposal/blob/master/A66-otel-stats.md.
AddLatencyView(meter_provider.get(), "grpc.client.attempt.duration", "s");
meter_provider->AddMetricReader(std::move(prometheus_exporter));
return grpc::OpenTelemetryPluginBuilder()
.SetMeterProvider(std::move(meter_provider))
.AddOptionalLabel("grpc.lb.locality")
.EnableMetrics(
{"grpc.lb.wrr.rr_fallback",
"grpc.lb.wrr.endpoint_weight_not_yet_usable",
"grpc.lb.wrr.endpoint_weight_stale", "grpc.lb.wrr.endpoint_weights",
"grpc.lb.pick_first.disconnections",
"grpc.lb.pick_first.connection_attempts_succeeded",
"grpc.lb.pick_first.connection_attempts_failed",
"grpc.xds_client.connected", "grpc.xds_client.server_failure",
"grpc.xds_client.resource_updates_valid",
"grpc.xds_client.resource_updates_invalid",
"grpc.xds_client.resources", "grpc.lb.rls.cache_entries",
"grpc.lb.rls.cache_size", "grpc.lb.rls.default_target_picks",
"grpc.lb.rls.target_picks", "grpc.lb.rls.failed_picks"})
.BuildAndRegisterGlobal();
}