static OpenTelemetry setupOpenTelemetry()

in src/main/java/com/google/cloud/spanner/pgadapter/Server.java [215:293]


  static OpenTelemetry setupOpenTelemetry(OptionsMetadata optionsMetadata) {
    if (!optionsMetadata.isEnableOpenTelemetry()
        && !optionsMetadata.isEnableOpenTelemetryMetrics()) {
      return OpenTelemetry.noop();
    }

    if (getOpenTelemetrySetting("otel.traces.exporter") == null) {
      System.setProperty("otel.traces.exporter", "none");
    }
    if (getOpenTelemetrySetting("otel.metrics.exporter") == null) {
      System.setProperty("otel.metrics.exporter", "none");
    }
    if (getOpenTelemetrySetting("otel.logs.exporter") == null) {
      System.setProperty("otel.logs.exporter", "none");
    }
    if (getOpenTelemetrySetting("otel.service.name") == null) {
      System.setProperty("otel.service.name", "pgadapter-" + ThreadLocalRandom.current().nextInt());
    }
    String serviceName = Objects.requireNonNull(getOpenTelemetrySetting("otel.service.name"));

    try {
      String projectId = optionsMetadata.getTelemetryProjectId();
      Credentials credentials = optionsMetadata.getTelemetryCredentials();
      AutoConfiguredOpenTelemetrySdkBuilder openTelemetryBuilder =
          AutoConfiguredOpenTelemetrySdk.builder();
      if (optionsMetadata.isEnableOpenTelemetry()) {
        TraceConfiguration.Builder builder =
            TraceConfiguration.builder().setDeadline(Duration.ofSeconds(60L));
        if (projectId != null) {
          builder.setProjectId(projectId);
        }
        if (credentials != null) {
          builder.setCredentials(credentials);
        }
        builder.setFixedAttributes(
            ImmutableMap.of(
                "service.name",
                AttributeValue.newBuilder()
                    .setStringValue(TruncatableString.newBuilder().setValue(serviceName).build())
                    .build()));
        TraceConfiguration configuration = builder.build();
        SpanExporter traceExporter = TraceExporter.createWithConfiguration(configuration);
        Sampler sampler;
        if (optionsMetadata.getOpenTelemetryTraceRatio() == null) {
          sampler = Sampler.parentBased(Sampler.traceIdRatioBased(0.05d));
        } else {
          sampler =
              Sampler.parentBased(
                  Sampler.traceIdRatioBased(optionsMetadata.getOpenTelemetryTraceRatio()));
        }
        openTelemetryBuilder.addTracerProviderCustomizer(
            (sdkTracerProviderBuilder, configProperties) ->
                sdkTracerProviderBuilder
                    .setSampler(sampler)
                    .addSpanProcessor(BatchSpanProcessor.builder(traceExporter).build()));
      }
      if (optionsMetadata.isEnableOpenTelemetryMetrics()) {
        MetricExporter cloudMonitoringExporter =
            GoogleCloudMetricExporter.createWithConfiguration(
                MetricConfiguration.builder()
                    // Configure the cloud project id.
                    .setProjectId(projectId)
                    // Set the credentials to use when writing to the Cloud Monitoring API
                    .setCredentials(credentials)
                    .build());
        openTelemetryBuilder.addMeterProviderCustomizer(
            (sdkMeterProviderBuilder, configProperties) ->
                sdkMeterProviderBuilder
                    .addResource(
                        Resource.create(
                            Attributes.of(AttributeKey.stringKey("service.name"), serviceName)))
                    .registerMetricReader(
                        PeriodicMetricReader.builder(cloudMonitoringExporter).build()));
      }
      return openTelemetryBuilder.build().getOpenTelemetrySdk();
    } catch (IOException exception) {
      throw new RuntimeException(exception);
    }
  }