Програмна конфігурація

Ви можете використовувати AutoConfigurationCustomizerProvider для програмної конфігурації. Програмна конфігурація рекомендується для розширених випадків використання, які не можна налаштувати за допомогою властивостей.

Виключення точок доступу actuator з трасування

Як приклад, ви можете налаштувати механізм вибірки, щоб виключити точки перевірки стану з трасування:

<dependencies>
  <dependency>
    <groupId>io.opentelemetry.contrib</groupId>
    <artifactId>opentelemetry-samplers</artifactId>
    <version>1.54.0-alpha</version>
  </dependency>
</dependencies>
dependencies {
  implementation("io.opentelemetry.contrib:opentelemetry-samplers:1.54.0-alpha")
}
package otel;

import io.opentelemetry.api.trace.SpanKind;
import io.opentelemetry.contrib.sampler.RuleBasedRoutingSampler;
import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider;
import io.opentelemetry.semconv.UrlAttributes;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FilterPaths {

  @Bean
  public AutoConfigurationCustomizerProvider otelCustomizer() {
    return p ->
        p.addSamplerCustomizer(
            (fallback, config) ->
                RuleBasedRoutingSampler.builder(SpanKind.SERVER, fallback)
                    .drop(UrlAttributes.URL_PATH, "^/actuator")
                    .build());
  }
}

Програмна конфігурація експортера

Ви також можете налаштувати експортери OTLP програмно. Ця конфігурація замінює стандартний експортер OTLP та додає користувацький заголовок до запитів.

package otel;

import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter;
import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider;
import java.util.Collections;
import java.util.Map;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class CustomAuth {
  @Bean
  public AutoConfigurationCustomizerProvider otelCustomizer() {
    return p ->
        p.addSpanExporterCustomizer(
            (exporter, config) -> {
              if (exporter instanceof OtlpHttpSpanExporter) {
                return ((OtlpHttpSpanExporter) exporter)
                    .toBuilder().setHeaders(this::headers).build();
              }
              return exporter;
            });
  }

  private Map<String, String> headers() {
    return Collections.singletonMap("Authorization", "Bearer " + refreshToken());
  }

  private String refreshToken() {
    // наприклад, прочитати токен з секрету Kubernetes
    return "token";
  }
}

Читання конфігурації інструментування програмним способом

Модулі інструментування читають свою конфігурацію через bean ConfigProvider, незалежно від того, чи налаштували ви її через application.properties / application.yaml, чи через декларативну конфігурацію. Автоматично підключає bean ConfigProvider напряму, якщо вам потрібно прочитати значення конфігурації інструментування з власного коду:

Коли увімкнено декларативну конфігурацію, bean otelProperties (ConfigProperties) надається лише як сумісний міст. Він застарілий і буде видалений у версії 3.0; натомість використовуйте ConfigProvider.

package io.opentelemetry.examples.fileconfig;

import io.opentelemetry.api.incubator.config.ConfigProvider;
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
import org.springframework.stereotype.Component;

/** Приклад читання конфігурації інструментування з коду застосунку. */
@Component
public class ReadInstrumentationConfig {

  private final ConfigProvider configProvider;

  public ReadInstrumentationConfig(ConfigProvider configProvider) {
    this.configProvider = configProvider;
  }

  public boolean isDbQuerySanitizationEnabled() {
    DeclarativeConfigProperties dbConfig =
        configProvider
            .getInstrumentationConfig()
            .get("java")
            .get("common")
            .get("db")
            .get("query_sanitization");
    return dbConfig.getBoolean("enabled", true);
  }
}

Ключі в getInstrumentationConfig() відповідають тій самій структурі instrumentation/development.java.*, яку використовує декларативна конфігурація, незалежно від того, чи задали ви значення через властивість otel.instrumentation.*, чи через декларативний YAML — див. таблицю відповідності про те, як назви властивостей перетворюються на цю структуру.


Востаннє змінено July 12, 2026: [uk] Ukrainian documentation for OpenTelemetry (4cc17d8b)