Програмна конфігурація
Ви можете використовувати AutoConfigurationCustomizerProvider для програмної конфігурації. Програмна конфігурація рекомендується для розширених випадків використання, які не можна налаштувати за допомогою властивостей.
AutoConfigurationCustomizerProvider не працює з декларативною конфігурацією. Для декларативної конфігурації використовуйте DeclarativeConfigurationCustomizerProvider — див. розділ Розширення API для агента для деталей та прикладів.
Виключення точок доступу 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";
}
}
Читання конфігурації інструментування програмним способом
Потребує OpenTelemetry Spring Boot стартера версії 2.30.0 або новішої.
Модулі інструментування читають свою конфігурацію через 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 — див. таблицю відповідності про те, як назви властивостей перетворюються на цю структуру.
Зворотний зв’язок
Чи була ця сторінка корисною?
Дякуємо. Ми цінуємо ваші відгуки!
Будь ласка, дайте нам знати як ми можемо покращити цю сторінку. Ми цінуємо ваші відгуки!