RED-9157 - Open Telemetry Config
This commit is contained in:
parent
3fbe3f2590
commit
551f0f265f
@ -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");
|
||||
}
|
||||
|
||||
}
|
||||
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
@ -60,3 +60,8 @@ pdftron.license: ${PDFTRON_LICENSE}
|
||||
|
||||
ocrService:
|
||||
sendStatusUpdates: true
|
||||
|
||||
logging:
|
||||
level:
|
||||
okhttp3: DEBUG
|
||||
okhttp3.internal.http: DEBUG
|
||||
Loading…
x
Reference in New Issue
Block a user