Skip to content

Add support for OpenTelemetry configuration in Helidon SE #9595

@hyder

Description

@hyder

Environment Details

  • Helidon Version: 4.1.5
  • Helidon SE
  • JDK version: 21
  • OS:
  • Docker version (if applicable):

Problem Description

otel configuration is not currently loaded by Helidon:

otel:
  sdk.disabled: false
  service.name: "todo:front"
  traces.exporter: otlp

We can work around this for now using the following code:

    private static Map<String, String> telemetryConfig(Config config) {
        Config otelConfig = config.get("otel");
        Map<String, String> result = new HashMap<>();
        otelConfig.asMap().ifPresent(result::putAll);
        result.putIfAbsent("otel.metrics.exporter", "none");
        result.putIfAbsent("otel.logs.exporter", "none");
        return result;
    }

    private static void  prepareOpenTelemetry(Config config) {
        String serviceName = config.get("otel.service.name").asString().orElse("HELIDON_SE_SERVICE");
        OpenTelemetry openTelemetry = AutoConfiguredOpenTelemetrySdk.builder()
                .addPropertiesCustomizer(x -> telemetryConfig(config))
                .addResourceCustomizer((r, props) -> r.toBuilder()
                        .put(SERVICE_NAME, serviceName)
                        .build())
                .build()
                .getOpenTelemetrySdk();
        if (openTelemetry == null) {
            openTelemetry = OpenTelemetry.noop();
        }
        io.opentelemetry.api.trace.Tracer otelTracer = openTelemetry.getTracer(serviceName);
        Tracer helidonTracer = HelidonOpenTelemetry.create(openTelemetry, otelTracer, Map.of());
        Contexts.globalContext().register(helidonTracer);
    }

However, it would be preferable to be able to load these either by config file or by environment variables.

Steps to reproduce

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

Status

Sprint Scope

Relationships

None yet

Development

No branches or pull requests

Issue actions