in Elastiflix/java-favorite-otel-manual/src/main/java/com/movieapi/FavoriteApplication.java [45:100]
public static void main(String[] args) {
String SERVICE_NAME = System.getenv("OTEL_SERVICE_NAME");
// set service name on all OTel signals
Resource resource = Resource.getDefault().merge(Resource.create(
Attributes.of(ResourceAttributes.SERVICE_NAME, SERVICE_NAME,ResourceAttributes.SERVICE_VERSION,"1.0",ResourceAttributes.DEPLOYMENT_ENVIRONMENT,"production")));
// init OTel logger provider with export to OTLP
SdkLoggerProvider sdkLoggerProvider = SdkLoggerProvider.builder()
.setResource(resource)
.addLogRecordProcessor(BatchLogRecordProcessor.builder(
OtlpGrpcLogRecordExporter.builder().setEndpoint(
System.getenv("OTEL_EXPORTER_OTLP_ENDPOINT")).addHeader("Authorization", "Bearer " + System.getenv("ELASTIC_APM_SECRET_TOKEN"))
.build())
.build())
.build();
// init OTel trace provider with export to OTLP
SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
.setResource(resource).setSampler(Sampler.alwaysOn())
// add span processor to add baggage as span attributes
.addSpanProcessor(BatchSpanProcessor.builder(OtlpGrpcSpanExporter
.builder()
.setEndpoint(System.getenv(
"OTEL_EXPORTER_OTLP_ENDPOINT")).addHeader("Authorization", "Bearer " + System.getenv("ELASTIC_APM_SECRET_TOKEN"))
.build()).build())
.build();
// init OTel meter provider with export to OTLP
SdkMeterProvider sdkMeterProvider = SdkMeterProvider.builder().setResource(resource)
.registerMetricReader(PeriodicMetricReader.builder(
OtlpGrpcMetricExporter.builder().setEndpoint(System
.getenv("OTEL_EXPORTER_OTLP_ENDPOINT")).addHeader("Authorization", "Bearer " + System.getenv("ELASTIC_APM_SECRET_TOKEN"))
.build())
.build())
.build();
// create sdk object and set it as global
OpenTelemetrySdk sdk = OpenTelemetrySdk.builder()
.setTracerProvider(sdkTracerProvider)
.setLoggerProvider(sdkLoggerProvider)
.setMeterProvider(sdkMeterProvider)
.setPropagators(ContextPropagators
.create(W3CTraceContextPropagator.getInstance()))
.build();
GlobalOpenTelemetry.set(sdk);
// connect logger
GlobalLoggerProvider.set(sdk.getSdkLoggerProvider());
// Add hook to close SDK, which flushes logs
Runtime.getRuntime().addShutdownHook(new Thread(sdk::close));
SpringApplication.run(FavoriteApplication.class, args);
}