Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
551f0f265f | ||
|
|
3fbe3f2590 |
@ -23,7 +23,7 @@ dependencies {
|
|||||||
implementation(project(":ocr-service-processor"))
|
implementation(project(":ocr-service-processor"))
|
||||||
implementation(project(":ocr-service-api"))
|
implementation(project(":ocr-service-api"))
|
||||||
|
|
||||||
implementation("com.knecon.fforesight:tracing-commons:0.5.0")
|
implementation("com.knecon.fforesight:tracing-commons:0.6.0")
|
||||||
implementation("org.springframework.cloud:spring-cloud-starter-openfeign:4.1.1")
|
implementation("org.springframework.cloud:spring-cloud-starter-openfeign:4.1.1")
|
||||||
implementation("org.springframework.boot:spring-boot-starter-amqp:${springBootStarterVersion}")
|
implementation("org.springframework.boot:spring-boot-starter-amqp:${springBootStarterVersion}")
|
||||||
|
|
||||||
|
|||||||
@ -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:
|
ocrService:
|
||||||
sendStatusUpdates: true
|
sendStatusUpdates: true
|
||||||
|
|
||||||
|
logging:
|
||||||
|
level:
|
||||||
|
okhttp3: DEBUG
|
||||||
|
okhttp3.internal.http: DEBUG
|
||||||
Loading…
x
Reference in New Issue
Block a user