RED-9157 - Open Telemetry Config

This commit is contained in:
Andrei Isvoran 2024-05-14 15:18:19 +03:00
parent 3fbe3f2590
commit 551f0f265f
3 changed files with 119 additions and 0 deletions

View File

@ -0,0 +1,55 @@
package com.knecon.fforesight.service.ocr.v1.server.tracing;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
import io.opentelemetry.sdk.trace.export.SpanExporter;
import io.opentelemetry.sdk.trace.samplers.Sampler;
@Configuration
public class OpenTelemetryConfig {
@Value("${management.otlp.tracing.endpoint}")
private String otlpEndpoint;
@Value("${management.tracing.sampling.probability}")
private double samplingProbability;
@Value("${management.tracing.enabled}")
private boolean tracingEnabled;
@Bean
public OpenTelemetry openTelemetry() {
if (!tracingEnabled) {
return OpenTelemetry.noop();
}
SpanExporter otlpExporter = OtlpGrpcSpanExporter.builder().setEndpoint(otlpEndpoint).build();
SpanExporter safeExporter = new SafeSpanExporter(otlpExporter);
SdkTracerProvider tracerProvider = SdkTracerProvider.builder()
.setSampler(Sampler.traceIdRatioBased(samplingProbability))
.addSpanProcessor(BatchSpanProcessor.builder(safeExporter).build())
.build();
return OpenTelemetrySdk.builder().setTracerProvider(tracerProvider).build();
}
@Bean
public Tracer tracer(OpenTelemetry openTelemetry) {
return openTelemetry.getTracer("com.knecon.fforesight.service.ocr.v1.server.Application");
}
}

View File

@ -0,0 +1,59 @@
package com.knecon.fforesight.service.ocr.v1.server.tracing;
import java.net.UnknownHostException;
import java.util.Collection;
import java.util.logging.Level;
import java.util.logging.Logger;
import io.opentelemetry.sdk.common.CompletableResultCode;
import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.sdk.trace.export.SpanExporter;
public class SafeSpanExporter implements SpanExporter {
private final SpanExporter delegate;
private static final Logger logger = Logger.getLogger(SafeSpanExporter.class.getName());
public SafeSpanExporter(SpanExporter delegate) {
this.delegate = delegate;
}
@Override
public CompletableResultCode export(Collection<SpanData> spans) {
try {
return delegate.export(spans);
} catch (Exception e) {
if (isDnsResolutionError(e)) {
logger.log(Level.WARNING, "DNS resolution error, skipping tracing export.", e);
return CompletableResultCode.ofSuccess();
} else {
return CompletableResultCode.ofFailure();
}
}
}
private boolean isDnsResolutionError(Exception e) {
return e.getCause() instanceof UnknownHostException;
}
@Override
public CompletableResultCode flush() {
return delegate.flush();
}
@Override
public CompletableResultCode shutdown() {
return delegate.shutdown();
}
}

View File

@ -60,3 +60,8 @@ pdftron.license: ${PDFTRON_LICENSE}
ocrService:
sendStatusUpdates: true
logging:
level:
okhttp3: DEBUG
okhttp3.internal.http: DEBUG