Skip to content

[Bug]: Jaeger shows OTLPResourceNoServiceName despite setting service.name resource #3068

@yasin-bozkurt

Description

@yasin-bozkurt

What happened?

After upgrading opentelemetry crates from version 0.23 to 0.30, we noticed that the service.name is no longer correctly propagated to Jaeger. Instead of the expected service.name, Jaeger displays the default OTLPResourceNoServiceName.

We define our tracer provider as follows:

use opentelemetry::{global, KeyValue};
use opentelemetry_sdk::{
    trace::SdkTracerProvider,
    Resource,
};
use opentelemetry_semantic_conventions::resource::{CONTAINER_IMAGE_TAGS, HOST_NAME, SERVICE_NAME};

impl<
        Runtime: opentelemetry_sdk::runtime::Runtime
            + opentelemetry_sdk::runtime::RuntimeChannel
            + std::fmt::Debug,
    > MySpanProcessor<Runtime>
{
    fn new<Exporter: SpanExporter + 'static>(
        exporter: Exporter,
        runtime: Runtime,
    ) -> Self {
        Self {
            otel_batch_span_processor: BatchSpanProcessor::builder(exporter, runtime).build(),
        }
    }
}

let exporter = opentelemetry_otlp::SpanExporter::builder()
    .with_tonic()
    .with_endpoint(endpoint)
    .build()?;

let my_span_processor = MySpanProcessor::new(exporter, Tokio);

let tracer_provider = SdkTracerProvider::builder()
    .with_span_processor(my_span_processor)
    .with_resource(
        Resource::builder_empty()
            .with_attributes(vec![
                KeyValue::new(SERVICE_NAME, service_name.clone()),
                KeyValue::new(HOST_NAME, host_name),
                KeyValue::new(CONTAINER_IMAGE_TAGS, image_tag),
            ])
            .build(),
    )
    .build();
let tracer_name = format!("{service_name}-tracer");
let tracer = tracer_provider.tracer(tracer_name);
let _ = global::set_tracer_provider(tracer_provider);

We have tried a couple of alternatives:

  • Using Resource::builder().with_service_name(...) instead of a custom attribute list.
  • Adding SdkProvidedResourceDetector (and setting the proper env) to the tracer provider builder.
  • Explicitly logging the built resource to confirm service.name is present in the final resource.

OpenTelemetry API Version (i.e version of opentelemetry crate)

0.30

OpenTelemetry SDK Version (i.e version of opentelemetry_sdk crate)

0.30

What Exporter(s) are you seeing the problem on?

OTLP

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions