absl::Status StartGrpcOpenTelemetry()

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();
}