Налаштування SDK
Цей стартер Spring підтримує метадані конфігурації, що означає, що ви можете бачити та автоматично заповнювати всі доступні властивості у вашому IDE.
Загальна конфігурація
OpenTelemetry Starter підтримує всі Автоконфігурації SDK (з версії 2.2.0).
Ви можете оновити конфігурацію за допомогою властивостей у файлі application.properties або application.yaml, або за допомогою змінних середовища.
Приклад application.properties:
otel.propagators=tracecontext,b3
otel.resource.attributes.deployment.environment=dev
otel.resource.attributes.service.name=cart
otel.resource.attributes.service.namespace=shop
Приклад application.yaml:
otel:
propagators:
- tracecontext
- b3
resource:
attributes:
deployment.environment: dev
service:
name: cart
namespace: shop
Приклад змінних середовища:
export OTEL_PROPAGATORS="tracecontext,b3"
export OTEL_RESOURCE_ATTRIBUTES="deployment.environment=dev,service.name=cart,service.namespace=shop"
Перевизначення атрибутів ресурсу
Як зазвичай у Spring Boot, ви можете перевизначити властивості у файлах application.properties та application.yaml за допомогою змінних середовища.
Наприклад, ви можете встановити або перевизначити атрибут ресурсу deployment.environment (не змінюючи service.name або service.namespace) шляхом встановлення стандартної змінної середовища OTEL_RESOURCE_ATTRIBUTES:
export OTEL_RESOURCE_ATTRIBUTES="deployment.environment=prod"
Альтернативно, ви можете використовувати змінну середовища OTEL_RESOURCE_ATTRIBUTES_DEPLOYMENT_ENVIRONMENT для встановлення або перевизначення одного атрибуту ресурсу:
export OTEL_RESOURCE_ATTRIBUTES_DEPLOYMENT_ENVIRONMENT="prod"
Другий варіант підтримує SpEL вирази.
Зверніть увагу, що DEPLOYMENT_ENVIRONMENT перетворюється на deployment.environment за допомогою Relaxed Binding Spring Boot.
Вимкнення OpenTelemetry Starter
System property:
otel.sdk.disabled
Environment variable:
OTEL_SDK_DISABLEDDescription:
Встановіть значення true, щоб вимкнути стартер, наприклад, для тестування.
Програмна конфігурація
Ви можете використовувати AutoConfigurationCustomizerProvider для програмної конфігурації. Програмна конфігурація рекомендується для складних випадків, які не можна налаштувати за допомогою властивостей.
Виключення точок доступу актуатора з трасування
Наприклад, ви можете налаштувати семплер для виключення точок доступу перевірки справності з трасування:
<dependencies>
<dependency>
<groupId>io.opentelemetry.contrib</groupId>
<artifactId>opentelemetry-samplers</artifactId>
<version>1.33.0-alpha</version>
</dependency>
</dependencies>
dependencies {
implementation("io.opentelemetry.contrib:opentelemetry-samplers:1.33.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 Starter включає ті ж провайдери ресурсів, що і Java агент:
Крім того, OpenTelemetry Starter включає наступні специфічні для Spring Boot провайдери ресурсів:
Провайдер ресурсів дистрибуції
FQN: io.opentelemetry.instrumentation.spring.autoconfigure.resources.DistroVersionResourceProvider
| Атрибут | Значення |
|---|---|
telemetry.distro.name | opentelemetry-spring-boot-starter |
telemetry.distro.version | версія стартера |
Провайдер ресурсів Spring
FQN: io.opentelemetry.instrumentation.spring.autoconfigure.resources.SpringResourceProvider
| Атрибут | Значення |
|---|---|
service.name | spring.application.name або build.name з build-info.properties (див. Назва сервісу) |
service.version | build.version з build-info.properties |
Назва сервісу
Використовуючи ці провайдери ресурсів, назва сервісу визначається за наступними правилами пріоритету, відповідно специфікації OpenTelemetry:
- Властивість spring
otel.service.nameабо змінна середовищаOTEL_SERVICE_NAME(найвищий пріоритет) service.nameу системній/властивості springotel.resource.attributesабо змінна середовищаOTEL_RESOURCE_ATTRIBUTES- Властивість spring
spring.application.name build-info.propertiesImplementation-Titleз META-INF/MANIFEST.MF- Стандартне значення —
unknown_service:java(найнижчий пріоритет)
Використовуйте наступний фрагмент у вашому файлі pom.xml для генерації файлу build-info.properties:
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>build-info</goal>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
springBoot {
buildInfo {
}
}
Відгук
Чи це було корисним?
Дякуємо. Ми цінуємо ваші відгуки!
Будь ласка, дайте нам знати як ми можемо покращити цю сторінку. Ми цінуємо ваші відгуки!