From d8b068917fac0e91ce4c41f029a587038deb71ff Mon Sep 17 00:00:00 2001 From: Denis Savosin Date: Thu, 10 Oct 2024 11:57:52 +0700 Subject: [PATCH] enable distribution otlp tracing --- .env.example | 4 +++- build.gradle.kts | 3 +++ checklist.md | 2 +- docker-compose.yml | 1 + .../kotlin/com/example/demo/config/AppConfig.kt | 16 ++++++++++++++++ src/main/resources/application.yml | 8 +++++++- 6 files changed, 31 insertions(+), 3 deletions(-) diff --git a/.env.example b/.env.example index 37c170c..a067c0e 100644 --- a/.env.example +++ b/.env.example @@ -7,4 +7,6 @@ DB_SCHEMA=public DB_USERNAME=postgres DB_PASSWORD=postgres -KAFKA_SERVERS=localhost:9095 \ No newline at end of file +KAFKA_SERVERS=localhost:9095 + +OTLP_TRACING_HTTP_URL=http://localhost:4318/v1/traces \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index ae4c913..9e1b509 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -27,12 +27,15 @@ dependencies { implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.15.4") implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.4") implementation("io.github.optimumcode:json-schema-validator:0.2.3") + implementation("io.micrometer:micrometer-tracing-bridge-otel") + implementation("io.opentelemetry:opentelemetry-exporter-otlp") implementation("net.logstash.logback:logstash-logback-encoder:8.0") implementation("org.flywaydb:flyway-core:9.22.3") implementation("org.jetbrains.kotlin:kotlin-reflect:2.0.20") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3") implementation("org.postgresql:postgresql:42.6.2") implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.6.0") + implementation("org.springframework:spring-aspects") implementation("org.springframework.boot:spring-boot-starter-actuator:3.2.10") implementation("org.springframework.boot:spring-boot-starter-mustache:3.2.10") implementation("org.springframework.boot:spring-boot-starter-validation:3.2.10") diff --git a/checklist.md b/checklist.md index 9c0c52e..8560f2e 100644 --- a/checklist.md +++ b/checklist.md @@ -8,4 +8,4 @@ Some simple checklist for this demo repo: - [x] make kafka consumer - [x] register prometheus metrics - [x] expose prometheus metrics -- [ ] add otel collector +- [x] add otel collector diff --git a/docker-compose.yml b/docker-compose.yml index 24d44d4..1c3165f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,6 +14,7 @@ services: DB_USERNAME: $DB_USERNAME DB_PASSWORD: $DB_PASSWORD KAFKA_SERVERS: $KAFKA_SERVERS + OTLP_TRACING_HTTP_URL: $OTLP_TRACING_HTTP_URL expose: - 8080 - 8081 diff --git a/src/main/kotlin/com/example/demo/config/AppConfig.kt b/src/main/kotlin/com/example/demo/config/AppConfig.kt index 23bbe3c..a708e05 100644 --- a/src/main/kotlin/com/example/demo/config/AppConfig.kt +++ b/src/main/kotlin/com/example/demo/config/AppConfig.kt @@ -13,7 +13,11 @@ import com.example.demo.services.validation.SchemaValidator import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.SerializationFeature import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule +import io.micrometer.observation.ObservationRegistry +import io.micrometer.observation.aop.ObservedAspect +import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter import org.springframework.beans.factory.annotation.Autowired +import org.springframework.beans.factory.annotation.Value import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration @@ -50,5 +54,17 @@ class AppConfig( @Bean fun schemaValidator(): SchemaValidator = SchemaValidator(kafkaProperties.validation.schema) + + @Bean + fun otlpHttpSpanExporter(@Value("\${tracing.url}") url: String): OtlpHttpSpanExporter { + return OtlpHttpSpanExporter.builder() + .setEndpoint(url) + .build() + } + + @Bean + fun observedAspect(@Autowired observationRegistry: ObservationRegistry): ObservedAspect { + return ObservedAspect(observationRegistry) + } } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 0065edf..9669f0f 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -59,4 +59,10 @@ management: metrics: distribution: percentiles-histogram: - "[http.server.requests]": true \ No newline at end of file + "[http.server.requests]": true + tracing: + sampling: + probability: 1.0 + +tracing: + url: ${OTLP_TRACING_HTTP_URL:http://localhost:4318/v1/traces}