Skip to content

Commit 2fff93b

Browse files
committed
Install opentelemetry asgi middleware
1 parent 5920870 commit 2fff93b

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ containers:
99
dev:
1010
poetry run uvicorn http_app:create_app --host 0.0.0.0 --port 8000 --factory --reload
1111

12+
otel:
13+
OTEL_SERVICE_NAME=bootstrap-fastapi OTEL_TRACES_EXPORTER=none OTEL_METRICS_EXPORTER=none OTEL_LOGS_EXPORTER=none poetry run opentelemetry-instrument uvicorn http_app:create_app --host 0.0.0.0 --port 8000 --factory
14+
1215
run:
1316
poetry run uvicorn http_app:create_app --host 0.0.0.0 --port 8000 --factory
1417

http_app/__init__.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from typing import Union
22

33
from fastapi import FastAPI, Request
4+
from opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware
45
from starlette.responses import JSONResponse
56
from starlette_prometheus import PrometheusMiddleware, metrics
67
from structlog import get_logger
@@ -24,9 +25,20 @@ def create_app(
2425

2526
init_routes(app)
2627

28+
"""
29+
OpenTelemetry prometheus exporter does not work together with automatic
30+
instrumentation, for now we keep the prometheus middleware even if
31+
having 2 different middlewares will add overhead.
32+
"""
2733
app.add_middleware(PrometheusMiddleware)
2834
app.add_route("/metrics/", metrics)
2935

36+
"""
37+
OpenTelemetry middleware has to be the last one to make sure the
38+
tracing data handling is the outermost logic
39+
"""
40+
app.add_middleware(OpenTelemetryMiddleware)
41+
3042
return app
3143

3244

0 commit comments

Comments
 (0)