Created
June 1, 2022 07:54
-
-
Save stazdx/67fc87eb3eac6622f0d03fbfc6043b12 to your computer and use it in GitHub Desktop.
SpringBootOpenTelemetryPrometheusExemplars - k8staz.com
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Enable Actuator endpoints including Prometheus | |
management: | |
endpoints: | |
web: | |
exposure: | |
include: health, info, prometheus | |
metrics: | |
# Exemplar metrics | |
distribution: | |
percentiles-histogram: | |
http.server.requests: true | |
minimum-expected-value: | |
http.server.requests: 5ms | |
maximum-expected-value: | |
http.server.requests: 1000ms | |
# Add trace_id in log. OpenTelemetry set this value using logger-mdc. | |
# https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/docs/logger-mdc-instrumentation.md | |
logging: | |
pattern: | |
level: '%prefix(%mdc{trace_id:-0}) %5p' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
plugins { | |
id 'org.springframework.boot' version '2.7.0' | |
id 'io.spring.dependency-management' version '1.0.11.RELEASE' | |
id 'java' | |
} | |
repositories { | |
maven { | |
url = uri('https://repo.spring.io/libs-snapshot') | |
} | |
mavenCentral() | |
} | |
dependencyManagement { | |
imports { | |
mavenBom 'io.micrometer:micrometer-bom:1.9.0-SNAPSHOT' | |
} | |
} | |
dependencies { | |
implementation 'org.springframework.boot:spring-boot-starter-actuator' | |
implementation 'io.micrometer:micrometer-registry-prometheus:1.9.0' | |
implementation 'org.springframework.boot:spring-boot-starter-web' | |
implementation 'io.opentelemetry:opentelemetry-api:1.12.0' | |
} | |
tasks.named('test') { | |
useJUnitPlatform() | |
} | |
group = 'com.staz' | |
version = '0.0.1-SNAPSHOT' | |
sourceCompatibility = '11' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.staz.observability; | |
import org.springframework.web.bind.annotation.GetMapping; | |
import org.springframework.web.bind.annotation.PostMapping; | |
import org.springframework.web.bind.annotation.RestController; | |
@RestController | |
public class Controller { | |
@PostMapping("/fail") | |
public String fail() { | |
return "Fail!"; | |
} | |
@GetMapping("/success") | |
public String success() { | |
return "Success!"; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Download OpenTelemetryAgent | |
FROM curlimages/curl:7.81.0 AS OTEL_AGENT | |
ARG OTEL_AGENT_VERSION="1.12.1" | |
RUN curl --silent --fail -L "https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v${OTEL_AGENT_VERSION}/opentelemetry-javaagent.jar" \ | |
-o "/tmp/opentelemetry-javaagent.jar" | |
# Build .JAR file | |
FROM gradle:7.1.1-jdk11-hotspot AS BUILD_IMAGE | |
COPY --chown=gradle:gradle . /home/gradle/src | |
WORKDIR /home/gradle/src | |
RUN gradle build -x test --no-daemon | |
# Final image copying OTEL Agent and .JAR File | |
FROM gradle:7.1.1-jdk11-hotspot | |
ENV TIME_ZONE America/Lima | |
ENV TZ=$TIME_ZONE | |
ENV JAVA_OPTS "-Dspring.config.location=src/main/resources/application.yaml" | |
COPY --from=OTEL_AGENT /tmp/opentelemetry-javaagent.jar /otel-javaagent.jar | |
COPY --from=BUILD_IMAGE home/gradle/src/build/libs/*.jar app.jar | |
ENTRYPOINT exec java -javaagent:/otel-javaagent.jar -jar app.jar |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.staz.observability; | |
import io.micrometer.core.instrument.Clock; | |
import io.micrometer.prometheus.PrometheusConfig; | |
import io.micrometer.prometheus.PrometheusMeterRegistry; | |
import io.opentelemetry.api.trace.Span; | |
import io.prometheus.client.CollectorRegistry; | |
import io.prometheus.client.exemplars.DefaultExemplarSampler; | |
import io.prometheus.client.exemplars.tracer.otel_agent.OpenTelemetryAgentSpanContextSupplier; | |
import org.springframework.context.annotation.Bean; | |
import org.springframework.context.annotation.Configuration; | |
@Configuration | |
public class PrometheusExemplarConfiguration { | |
@Bean | |
public PrometheusMeterRegistry prometheusMeterRegistryWithExemplar | |
(PrometheusConfig prometheusConfig, CollectorRegistry collectorRegistry, | |
Clock clock) { | |
return new PrometheusMeterRegistry(prometheusConfig, collectorRegistry, | |
clock, new DefaultExemplarSampler(new OpenTelemetryAgentSpanContextSupplier() { | |
@Override | |
public String getTraceId() { | |
if (!Span.current().getSpanContext().isSampled()) { | |
return null; | |
} | |
return super.getTraceId(); | |
} | |
}) | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment