From 5a991b5634f85a98fab33354b8f72bcbbd7b66a0 Mon Sep 17 00:00:00 2001 From: Eric Huang Date: Thu, 16 Oct 2025 11:29:04 -0700 Subject: [PATCH] fix(telemetry): remove dependency on old telemetry config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # What does this PR do? old telemetry config was removed in #3815 ## Test Plan ❯ OTEL_SERVICE_NAME=aloha OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 uv run llama stack run starter --- llama_stack/core/datatypes.py | 12 ++++++ .../telemetry/meta_reference/telemetry.py | 42 ++++++------------- 2 files changed, 24 insertions(+), 30 deletions(-) diff --git a/llama_stack/core/datatypes.py b/llama_stack/core/datatypes.py index b376901fd..94222d49e 100644 --- a/llama_stack/core/datatypes.py +++ b/llama_stack/core/datatypes.py @@ -177,6 +177,18 @@ class DistributionSpec(BaseModel): class TelemetryConfig(BaseModel): + """ + Configuration for telemetry. + + Llama Stack uses OpenTelemetry for telemetry. Please refer to https://opentelemetry.io/docs/languages/sdk-configuration/ + for env variables to configure the OpenTelemetry SDK. + + Example: + ```bash + OTEL_SERVICE_NAME=llama-stack OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 uv run llama stack run starter + ``` + """ + enabled: bool = Field(default=False, description="enable or disable telemetry") diff --git a/llama_stack/providers/inline/telemetry/meta_reference/telemetry.py b/llama_stack/providers/inline/telemetry/meta_reference/telemetry.py index f56609cab..41ec706a4 100644 --- a/llama_stack/providers/inline/telemetry/meta_reference/telemetry.py +++ b/llama_stack/providers/inline/telemetry/meta_reference/telemetry.py @@ -55,17 +55,10 @@ def is_tracing_enabled(tracer): class TelemetryAdapter(Telemetry): - def __init__(self, config: TelemetryConfig, deps: dict[Api, Any]) -> None: - self.config = config + def __init__(self, _config: TelemetryConfig, deps: dict[Api, Any]) -> None: self.datasetio_api = deps.get(Api.datasetio) self.meter = None - resource = Resource.create( - { - ResourceAttributes.SERVICE_NAME: self.config.service_name, - } - ) - global _TRACER_PROVIDER # Initialize the correct span processor based on the provider state. # This is needed since once the span processor is set, it cannot be unset. @@ -73,35 +66,24 @@ class TelemetryAdapter(Telemetry): # Since the library client can be recreated multiple times in a notebook, # the kernel will hold on to the span processor and cause duplicate spans to be written. if _TRACER_PROVIDER is None: - provider = TracerProvider(resource=resource) + provider = TracerProvider() trace.set_tracer_provider(provider) _TRACER_PROVIDER = provider # Use single OTLP endpoint for all telemetry signals - if TelemetrySink.OTEL_TRACE in self.config.sinks or TelemetrySink.OTEL_METRIC in self.config.sinks: - if self.config.otel_exporter_otlp_endpoint is None: - raise ValueError( - "otel_exporter_otlp_endpoint is required when OTEL_TRACE or OTEL_METRIC is enabled" - ) - # Let OpenTelemetry SDK handle endpoint construction automatically - # The SDK will read OTEL_EXPORTER_OTLP_ENDPOINT and construct appropriate URLs - # https://opentelemetry.io/docs/languages/sdk-configuration/otlp-exporter - if TelemetrySink.OTEL_TRACE in self.config.sinks: - span_exporter = OTLPSpanExporter() - span_processor = BatchSpanProcessor(span_exporter) - trace.get_tracer_provider().add_span_processor(span_processor) + # Let OpenTelemetry SDK handle endpoint construction automatically + # The SDK will read OTEL_EXPORTER_OTLP_ENDPOINT and construct appropriate URLs + # https://opentelemetry.io/docs/languages/sdk-configuration/otlp-exporter + span_exporter = OTLPSpanExporter() + span_processor = BatchSpanProcessor(span_exporter) + trace.get_tracer_provider().add_span_processor(span_processor) - if TelemetrySink.OTEL_METRIC in self.config.sinks: - metric_reader = PeriodicExportingMetricReader(OTLPMetricExporter()) - metric_provider = MeterProvider(resource=resource, metric_readers=[metric_reader]) - metrics.set_meter_provider(metric_provider) + metric_reader = PeriodicExportingMetricReader(OTLPMetricExporter()) + metric_provider = MeterProvider(metric_readers=[metric_reader]) + metrics.set_meter_provider(metric_provider) - if TelemetrySink.CONSOLE in self.config.sinks: - trace.get_tracer_provider().add_span_processor(ConsoleSpanProcessor(print_attributes=True)) - - if TelemetrySink.OTEL_METRIC in self.config.sinks: - self.meter = metrics.get_meter(__name__) + self.meter = metrics.get_meter(__name__) self._lock = _global_lock