diff --git a/build.gradle b/build.gradle index b3705ce906a..1b8a38e9b97 100644 --- a/build.gradle +++ b/build.gradle @@ -123,6 +123,7 @@ allprojects { micronaut "io.micronaut.micrometer:micronaut-micrometer-registry-prometheus" micronaut "io.micronaut:micronaut-http-client" micronaut "io.micronaut.reactor:micronaut-reactor-http-client" + micronaut "io.micronaut.tracing:micronaut-tracing-opentelemetry-http" // logs implementation "org.slf4j:slf4j-api" @@ -133,6 +134,9 @@ allprojects { implementation group: 'org.slf4j', name: 'jcl-over-slf4j' implementation group: 'org.fusesource.jansi', name: 'jansi' + // OTEL + implementation "io.opentelemetry:opentelemetry-exporter-otlp" + // jackson implementation group: 'com.fasterxml.jackson.core', name: 'jackson-core' implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind' diff --git a/cli/src/main/resources/application.yml b/cli/src/main/resources/application.yml index 55b5a784bf6..37d7ea34f17 100644 --- a/cli/src/main/resources/application.yml +++ b/cli/src/main/resources/application.yml @@ -160,6 +160,9 @@ kestra: metrics: prefix: kestra + traces: + root: DISABLED + server: basic-auth: enabled: false @@ -194,3 +197,12 @@ kestra: prefixes: - system. - internal. + +otel: + exclusions: + - /ping + - /metrics + - /health + - /env + - /prometheus + propagators: tracecontext, baggage \ No newline at end of file diff --git a/core/src/main/java/io/kestra/core/http/HttpRequest.java b/core/src/main/java/io/kestra/core/http/HttpRequest.java index c9bc221e75c..0518e0dec84 100644 --- a/core/src/main/java/io/kestra/core/http/HttpRequest.java +++ b/core/src/main/java/io/kestra/core/http/HttpRequest.java @@ -1,6 +1,7 @@ package io.kestra.core.http; import com.fasterxml.jackson.core.JsonProcessingException; +import io.kestra.core.runners.RunContext; import io.kestra.core.serializers.JacksonMapper; import lombok.*; import lombok.experimental.SuperBuilder; @@ -93,7 +94,7 @@ public static HttpRequest of(URI uri, String method, RequestBody body, Map HttpResponse request( HttpClientResponseHandler> responseHandler ) throws HttpClientException { try { - return this.client.execute(request.to(), httpClientContext, responseHandler); + return this.client.execute(request.to(runContext), httpClientContext, responseHandler); } catch (SocketException e) { throw new HttpClientRequestException(e.getMessage(), request, e); } catch (IOException e) { diff --git a/core/src/main/java/io/kestra/core/models/executions/Execution.java b/core/src/main/java/io/kestra/core/models/executions/Execution.java index 13644779953..ec5ad75f17f 100644 --- a/core/src/main/java/io/kestra/core/models/executions/Execution.java +++ b/core/src/main/java/io/kestra/core/models/executions/Execution.java @@ -29,6 +29,7 @@ import jakarta.validation.constraints.Pattern; import lombok.*; import lombok.experimental.FieldDefaults; +import lombok.experimental.NonFinal; import lombok.extern.slf4j.Slf4j; import java.time.Instant; @@ -106,6 +107,10 @@ public class Execution implements DeletedInterface, TenantInterface { @Nullable Instant scheduleDate; + @NonFinal + @Setter + String traceParent; + /** * Factory method for constructing a new {@link Execution} object for the given {@link Flow}. * @@ -199,7 +204,8 @@ public Execution withState(State.Type state) { this.trigger, this.deleted, this.metadata, - this.scheduleDate + this.scheduleDate, + this.traceParent ); } @@ -222,7 +228,8 @@ public Execution withLabels(List