diff --git a/exercises/manual-instrumentation-java/initial/todobackend-springboot/pom.xml b/exercises/manual-instrumentation-java/initial/todobackend-springboot/pom.xml index 90b6c98..eff4041 100644 --- a/exercises/manual-instrumentation-java/initial/todobackend-springboot/pom.xml +++ b/exercises/manual-instrumentation-java/initial/todobackend-springboot/pom.xml @@ -66,12 +66,22 @@ io.opentelemetry opentelemetry-exporter-logging + + io.opentelemetry + opentelemetry-exporter-otlp + io.opentelemetry.semconv opentelemetry-semconv 1.26.0-alpha + + org.springframework.boot + spring-boot-devtools + runtime + true + diff --git a/exercises/manual-instrumentation-java/initial/todobackend-springboot/src/main/java/io/novatec/todobackend/OpenTelemetryConfiguration.java b/exercises/manual-instrumentation-java/initial/todobackend-springboot/src/main/java/io/novatec/todobackend/OpenTelemetryConfiguration.java index 5606413..925543d 100644 --- a/exercises/manual-instrumentation-java/initial/todobackend-springboot/src/main/java/io/novatec/todobackend/OpenTelemetryConfiguration.java +++ b/exercises/manual-instrumentation-java/initial/todobackend-springboot/src/main/java/io/novatec/todobackend/OpenTelemetryConfiguration.java @@ -1,16 +1,22 @@ package io.novatec.todobackend; +import java.util.concurrent.TimeUnit; + +import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; //Basic Otel import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.exporter.logging.LoggingSpanExporter; +import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.resources.Resource; //Tracing and Spans import io.opentelemetry.sdk.trace.SdkTracerProvider; import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor; +import io.opentelemetry.sdk.trace.export.BatchSpanProcessor; import io.opentelemetry.semconv.ResourceAttributes; @@ -19,18 +25,29 @@ public class OpenTelemetryConfiguration { @Bean + @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public OpenTelemetry openTelemetry(){ Resource resource = Resource.getDefault().toBuilder().put(ResourceAttributes.SERVICE_NAME, "todobackend").put(ResourceAttributes.SERVICE_VERSION, "0.1.0").build(); + OtlpGrpcSpanExporter jaegerOtlpExporter = + OtlpGrpcSpanExporter.builder() + .setEndpoint("http://localhost:4317") + .setTimeout(30, TimeUnit.SECONDS) + .build(); + SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder() .addSpanProcessor(SimpleSpanProcessor.create(LoggingSpanExporter.create())) + .addSpanProcessor(SimpleSpanProcessor.create(jaegerOtlpExporter)) + // .addSpanProcessor(BatchSpanProcessor.builder(LoggingSpanExporter.create()).build()) // same results for now .setResource(resource) - .build(); + .build(); + // .buildAndRegisterGlobal(); + OpenTelemetry openTelemetry = OpenTelemetrySdk.builder() .setTracerProvider(sdkTracerProvider) - .buildAndRegisterGlobal(); + .build(); return openTelemetry; } diff --git a/exercises/manual-instrumentation-java/initial/todobackend-springboot/src/main/java/io/novatec/todobackend/TodobackendApplication.java b/exercises/manual-instrumentation-java/initial/todobackend-springboot/src/main/java/io/novatec/todobackend/TodobackendApplication.java index 433bedf..a23a9ec 100644 --- a/exercises/manual-instrumentation-java/initial/todobackend-springboot/src/main/java/io/novatec/todobackend/TodobackendApplication.java +++ b/exercises/manual-instrumentation-java/initial/todobackend-springboot/src/main/java/io/novatec/todobackend/TodobackendApplication.java @@ -21,6 +21,7 @@ import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.api.trace.Span; +import io.opentelemetry.api.trace.StatusCode; import io.opentelemetry.context.Scope; import jakarta.persistence.Entity; @@ -86,21 +87,29 @@ String addTodo(@PathVariable String todo) { Span span = tracer.spanBuilder("addTodo").startSpan(); + System.out.println("Span initial:"+span.toString()); + + span.setAttribute("http.method", "POST"); + span.setAttribute("http.url", "/todos/{todo}"); + + System.out.println("Span with attribute:"+span.toString()); + try (Scope scope = span.makeCurrent()) { this.someInternalMethod(todo); - // todoRepository.save(new Todo(todo)); logger.info("POST /todos/ " + todo.toString()); - return todo; } catch (Throwable t) { + span.setStatus(StatusCode.ERROR, "Something bad happened!"); span.recordException(t); - throw t; } finally { + System.out.println("Span before completion:"+span.toString()); span.end(); } + return ""; + } String someInternalMethod(String todo) {