public static void main()

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);
	}