feat: add different sinks for otel traces and metrics

This commit is contained in:
Dinesh Yeduguru 2025-03-20 15:10:27 -07:00
parent 86f617a197
commit 26150a998d
2 changed files with 15 additions and 9 deletions

View file

@ -13,15 +13,20 @@ from llama_stack.distribution.utils.config_dirs import RUNTIME_BASE_DIR
class TelemetrySink(str, Enum): class TelemetrySink(str, Enum):
OTEL = "otel" OTEL_TRACE = "otel_trace"
OTEL_METRIC = "otel_metric"
SQLITE = "sqlite" SQLITE = "sqlite"
CONSOLE = "console" CONSOLE = "console"
class TelemetryConfig(BaseModel): class TelemetryConfig(BaseModel):
otel_endpoint: str = Field( otel_trace_endpoint: str = Field(
default="http://localhost:4318/v1/traces", default="http://localhost:4318/v1/traces",
description="The OpenTelemetry collector endpoint URL", description="The OpenTelemetry collector endpoint URL for traces",
)
otel_metric_endpoint: str = Field(
default="http://localhost:4318/v1/metrics",
description="The OpenTelemetry collector endpoint URL for metrics",
) )
service_name: str = Field( service_name: str = Field(
default="llama-stack", default="llama-stack",

View file

@ -91,15 +91,16 @@ class TelemetryAdapter(TelemetryDatasetMixin, Telemetry):
provider = TracerProvider(resource=resource) provider = TracerProvider(resource=resource)
trace.set_tracer_provider(provider) trace.set_tracer_provider(provider)
_TRACER_PROVIDER = provider _TRACER_PROVIDER = provider
if TelemetrySink.OTEL in self.config.sinks: if TelemetrySink.OTEL_TRACE in self.config.sinks:
otlp_exporter = OTLPSpanExporter( span_exporter = OTLPSpanExporter(
endpoint=self.config.otel_endpoint, endpoint=self.config.otel_trace_endpoint,
) )
span_processor = BatchSpanProcessor(otlp_exporter) span_processor = BatchSpanProcessor(span_exporter)
trace.get_tracer_provider().add_span_processor(span_processor) trace.get_tracer_provider().add_span_processor(span_processor)
if TelemetrySink.OTEL_METRIC in self.config.sinks:
metric_reader = PeriodicExportingMetricReader( metric_reader = PeriodicExportingMetricReader(
OTLPMetricExporter( OTLPMetricExporter(
endpoint=self.config.otel_endpoint, endpoint=self.config.otel_metric_endpoint,
) )
) )
metric_provider = MeterProvider(resource=resource, metric_readers=[metric_reader]) metric_provider = MeterProvider(resource=resource, metric_readers=[metric_reader])
@ -109,7 +110,7 @@ class TelemetryAdapter(TelemetryDatasetMixin, Telemetry):
if TelemetrySink.CONSOLE in self.config.sinks: if TelemetrySink.CONSOLE in self.config.sinks:
trace.get_tracer_provider().add_span_processor(ConsoleSpanProcessor()) trace.get_tracer_provider().add_span_processor(ConsoleSpanProcessor())
if TelemetrySink.OTEL in self.config.sinks: if TelemetrySink.OTEL_METRIC in self.config.sinks:
self.meter = metrics.get_meter(__name__) self.meter = metrics.get_meter(__name__)
if TelemetrySink.SQLITE in self.config.sinks: if TelemetrySink.SQLITE in self.config.sinks:
self.trace_store = SQLiteTraceStore(self.config.sqlite_db_path) self.trace_store = SQLiteTraceStore(self.config.sqlite_db_path)