From d68cc83f614e1a45168dca7295c40168927d0ab6 Mon Sep 17 00:00:00 2001 From: jcarranzan Date: Tue, 22 Oct 2024 11:23:17 +0200 Subject: [PATCH] Add use of Dev Services wgth Grafana LGTM and Opentelemetry metrics --- opentelemetry-quickstart/pom.xml | 9 +++++ .../acme/opentelemetry/TracedResource.java | 33 +++++++++++++++++++ .../src/main/resources/application.properties | 8 +++-- .../opentelemetry/TracedResourceTest.java | 13 ++++++++ 4 files changed, 60 insertions(+), 3 deletions(-) diff --git a/opentelemetry-quickstart/pom.xml b/opentelemetry-quickstart/pom.xml index 670080ebd3..6eb29347d0 100644 --- a/opentelemetry-quickstart/pom.xml +++ b/opentelemetry-quickstart/pom.xml @@ -48,6 +48,15 @@ io.quarkus quarkus-rest-client + + io.quarkus + quarkus-observability-devservices-lgtm + + + io.quarkus + quarkus-opentelemetry-exporter-otlp + 3.9.5 + diff --git a/opentelemetry-quickstart/src/main/java/org/acme/opentelemetry/TracedResource.java b/opentelemetry-quickstart/src/main/java/org/acme/opentelemetry/TracedResource.java index a59eb3a65b..ff775ee8f7 100644 --- a/opentelemetry-quickstart/src/main/java/org/acme/opentelemetry/TracedResource.java +++ b/opentelemetry-quickstart/src/main/java/org/acme/opentelemetry/TracedResource.java @@ -1,8 +1,14 @@ package org.acme.opentelemetry; +import com.google.common.util.concurrent.AtomicDouble; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.metrics.Meter; +import jakarta.annotation.PostConstruct; +import jakarta.inject.Inject; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; import jakarta.ws.rs.core.Context; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.UriInfo; @@ -18,6 +24,20 @@ public class TracedResource { @Context UriInfo uriInfo; + private Meter meter; + + private AtomicDouble xValue = new AtomicDouble(0.0); + + @PostConstruct + public void init() { + meter = GlobalOpenTelemetry.getMeter("myservice"); + + meter.gaugeBuilder("service.xvalue") + .setDescription("Current value of X in the service") + .setUnit("units") + .buildWithCallback(measurement -> measurement.record(xValue.get())); + } + @GET @Path("/hello") @Produces(MediaType.TEXT_PLAIN) @@ -35,4 +55,17 @@ public String chain() { .build(ResourceClient.class); return "chain -> " + resourceClient.hello(); } + + @GET + @Path("/metrics/set") + @Produces(MediaType.APPLICATION_JSON) + public String setMetric(@QueryParam("value") Double value) { + if (value == null) { + LOG.warn("Attempted to set metric without providing a value."); + return "{\"status\":\"failure\", \"message\":\"Value parameter is missing\"}"; + } + xValue.set(value); + LOG.infof("Metric 'xvalue' set to: %f", value); + return "{\"status\":\"success\", \"xvalue\":" + value + "}"; + } } diff --git a/opentelemetry-quickstart/src/main/resources/application.properties b/opentelemetry-quickstart/src/main/resources/application.properties index 9e25685f64..2e6a52b49a 100644 --- a/opentelemetry-quickstart/src/main/resources/application.properties +++ b/opentelemetry-quickstart/src/main/resources/application.properties @@ -1,5 +1,7 @@ quarkus.application.name=myservice -quarkus.otel.exporter.otlp.traces.endpoint=http://localhost:4317 +quarkus.opentelemetry.enabled=true +quarkus.opentelemetry.tracer.enabled=true +quarkus.opentelemetry.metrics.enabled=true +quarkus.opentelemetry.exporter.otlp.endpoint=http://localhost:4317 quarkus.otel.exporter.otlp.traces.headers=Authorization=Bearer my_secret -quarkus.log.console.format=%d{HH:mm:ss} %-5p traceId=%X{traceId}, parentId=%X{parentId}, spanId=%X{spanId}, sampled=%X{sampled} [%c{2.}] (%t) %s%e%n - +quarkus.log.console.format=%d{HH:mm:ss} %-5p traceId=%X{traceId}, parentId=%X{parentId}, spanId=%X{spanId}, sampled=%X{sampled} [%c{2.}] (%t) %s%e%n \ No newline at end of file diff --git a/opentelemetry-quickstart/src/test/java/org/acme/opentelemetry/TracedResourceTest.java b/opentelemetry-quickstart/src/test/java/org/acme/opentelemetry/TracedResourceTest.java index 9031c4ecb2..423e6e302e 100644 --- a/opentelemetry-quickstart/src/test/java/org/acme/opentelemetry/TracedResourceTest.java +++ b/opentelemetry-quickstart/src/test/java/org/acme/opentelemetry/TracedResourceTest.java @@ -28,4 +28,17 @@ public void testChainEndpoint() { .body(is("chain -> hello")); } + @Test + public void testSetMetricEndpoint() { + Double testValue = 42.0; + + given() + .queryParam("value", testValue) + .when().get("/metrics/set") + .then() + .statusCode(200) + .body("status", is("success")) + .body("xvalue", is(testValue.floatValue())); + } + }