Skip to content

Commit 58f587b

Browse files
committed
feat(telemetry): capture opentelemtry traces and metrics for fast API
1 parent 658fb2c commit 58f587b

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

llama_stack/core/server/server.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
from llama_stack.providers.inline.telemetry.meta_reference.config import TelemetryConfig
6262
from llama_stack.providers.inline.telemetry.meta_reference.telemetry import (
6363
TelemetryAdapter,
64+
fastapi_telemetry_middleware,
6465
)
6566
from llama_stack.providers.utils.telemetry.tracing import (
6667
CURRENT_TRACE_CONTEXT,
@@ -69,7 +70,6 @@
6970

7071
from .auth import AuthenticationMiddleware
7172
from .quota import QuotaMiddleware
72-
from .tracing import TracingMiddleware
7373

7474
REPO_ROOT = Path(__file__).parent.parent.parent.parent
7575

@@ -452,6 +452,7 @@ def create_app() -> StackApp:
452452

453453
if config.telemetry.enabled:
454454
setup_logger(impls[Api.telemetry])
455+
fastapi_telemetry_middleware(app)
455456
else:
456457
setup_logger(TelemetryAdapter(TelemetryConfig(), {}))
457458

@@ -511,8 +512,6 @@ def create_app() -> StackApp:
511512
app.exception_handler(RequestValidationError)(global_exception_handler)
512513
app.exception_handler(Exception)(global_exception_handler)
513514

514-
app.add_middleware(TracingMiddleware, impls=impls, external_apis=external_apis)
515-
516515
return app
517516

518517

llama_stack/providers/inline/telemetry/meta_reference/telemetry.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@
88
import threading
99
from typing import Any
1010

11+
from fastapi import FastAPI
1112
from opentelemetry import metrics, trace
1213
from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter
1314
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
15+
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
1416
from opentelemetry.sdk.metrics import MeterProvider
1517
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
1618
from opentelemetry.sdk.trace import TracerProvider
@@ -250,3 +252,10 @@ def _log_structured(self, event: StructuredLogEvent, ttl_seconds: int) -> None:
250252
_GLOBAL_STORAGE["active_spans"].pop(span_id, None)
251253
else:
252254
raise ValueError(f"Unknown structured log event: {event}")
255+
256+
257+
def fastapi_telemetry_middleware(app: FastAPI):
258+
"""
259+
Instrument the FastAPI app with OpenTelemetry.
260+
"""
261+
FastAPIInstrumentor.instrument_app(app)

0 commit comments

Comments
 (0)