diff --git a/pom.xml b/pom.xml
index 7dc98193..e8ed8868 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
dev.vality
service-parent-pom
- 3.1.7
+ 3.1.8
org-manager
@@ -29,6 +29,7 @@
1.38-8c9b968
2.32.0
1.685-5c25c2e
+ 3.0.1
@@ -36,7 +37,6 @@
dev.vality.woody
woody-thrift
- 2.1.0
dev.vality
@@ -169,6 +169,11 @@
2.0
+
+ io.opentelemetry
+ opentelemetry-semconv
+ 1.29.0-alpha
+
diff --git a/src/main/java/dev/vality/orgmanager/config/OtelConfig.java b/src/main/java/dev/vality/orgmanager/config/OtelConfig.java
new file mode 100644
index 00000000..630c3aa8
--- /dev/null
+++ b/src/main/java/dev/vality/orgmanager/config/OtelConfig.java
@@ -0,0 +1,70 @@
+package dev.vality.orgmanager.config;
+
+import dev.vality.orgmanager.config.properties.OtelProperties;
+import io.opentelemetry.api.GlobalOpenTelemetry;
+import io.opentelemetry.api.OpenTelemetry;
+import io.opentelemetry.api.common.Attributes;
+import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
+import io.opentelemetry.context.propagation.ContextPropagators;
+import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter;
+import io.opentelemetry.sdk.OpenTelemetrySdk;
+import io.opentelemetry.sdk.resources.Resource;
+import io.opentelemetry.sdk.trace.SdkTracerProvider;
+import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
+import io.opentelemetry.sdk.trace.samplers.Sampler;
+import io.opentelemetry.semconv.resource.attributes.ResourceAttributes;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.time.Duration;
+
+@Slf4j
+@Configuration
+@ConditionalOnProperty(value = "otel.enabled", havingValue = "true", matchIfMissing = true)
+@RequiredArgsConstructor
+public class OtelConfig {
+
+ private final OtelProperties otelProperties;
+
+ @Value("${spring.application.name}")
+ private String applicationName;
+
+ @Bean
+ public OpenTelemetry openTelemetryConfig() {
+ var resource = Resource.getDefault()
+ .merge(Resource.create(Attributes.of(ResourceAttributes.SERVICE_NAME, applicationName)));
+ var sdkTracerProvider = SdkTracerProvider.builder()
+ .addSpanProcessor(BatchSpanProcessor.builder(OtlpHttpSpanExporter.builder()
+ .setEndpoint(otelProperties.getResource())
+ .setTimeout(Duration.ofMillis(otelProperties.getTimeout()))
+ .build())
+ .build())
+ .setSampler(Sampler.alwaysOn())
+ .setResource(resource)
+ .build();
+ var openTelemetrySdk = OpenTelemetrySdk.builder()
+ .setTracerProvider(sdkTracerProvider)
+ .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
+ .build();
+ registerGlobalOpenTelemetry(openTelemetrySdk);
+ return openTelemetrySdk;
+ }
+
+ private static void registerGlobalOpenTelemetry(OpenTelemetry openTelemetry) {
+ try {
+ GlobalOpenTelemetry.set(openTelemetry);
+ } catch (Throwable ex) {
+ log.warn("Please initialize the ObservabilitySdk before starting the application", ex);
+ GlobalOpenTelemetry.resetForTest();
+ try {
+ GlobalOpenTelemetry.set(openTelemetry);
+ } catch (Throwable ex1) {
+ log.warn("Unable to set GlobalOpenTelemetry", ex1);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/dev/vality/orgmanager/config/properties/OtelProperties.java b/src/main/java/dev/vality/orgmanager/config/properties/OtelProperties.java
new file mode 100644
index 00000000..ff18b2d3
--- /dev/null
+++ b/src/main/java/dev/vality/orgmanager/config/properties/OtelProperties.java
@@ -0,0 +1,17 @@
+package dev.vality.orgmanager.config.properties;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Getter
+@Setter
+@Component
+@ConfigurationProperties(prefix = "otel")
+public class OtelProperties {
+
+ private String resource;
+ private Long timeout;
+
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index c7941c52..a318fdad 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -92,3 +92,8 @@ bouncer:
access-check:
enabled: false
+
+otel:
+ resource: http://localhost:4318/v1/traces
+ timeout: 60000
+ enabled: false