nikkie-ftnextの日記

イベントレポートや読書メモを発信

単純な FastAPI アプリケーションを OpenTelemetry で計装する

はじめに

七尾百合子さん、お誕生日 132日目 おめでとうございます! nikkieです。

FlaskのOpenTelemetryの例を知ったので、FastAPIで試しました。

目次

FastAPI アプリを OpenTelemetry で計装

ばーん!

PEP 723を使って用意しました。

コンソール (☆) で実行

% uv run https://gist.githubusercontent.com/ftnext/a1b354b2dc7e9a8ac8059afa4792591d/raw/3b93803d1d0f0434c04c24c69f24fad8a01f4466/fastapi_opentelemetry.py

別のコンソールでリクエストを送ると

% curl http://127.0.0.1:8000/
{"message":"Hello World"}

(☆)のコンソールにトレースが出力されます!

考えたこと

Flaskを例にしたドキュメントをすでに読んでいました。

3つの例のうち「プログラムによる計装」をFastAPIに読み替えています。

ソースコード中のdocstringを読むと、FastAPIInstrumentor.instrument_app(app)だけでいけそうですが、
https://github.com/open-telemetry/opentelemetry-python-contrib/blob/59cc34e9f37decd0e9f00ccb279c3bb8e0345d6e/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py#L16-L30
実際にはTracerの設定が必要です(もう少し理解を深められそうな宿題事項)

積ん読リスト

PyCon APAC 2023にOpenTelemetryを扱ったセッションがあります(他の年や海外のPyConにもあるでしょう)

終わりに

FastAPIアプリケーションにOpenTelemetryを導入する方法が分かりました。
OpenTelemetry自体は掴みかねているところがあり、まだまだ素振りの余地があります。

FlaskやFastAPIなどWebアプリケーション側に入れるのは、アプリケーションの可観測性を上げるためと理解できるのですが、requestsやhttpxといったクライアント側にもOpenTelemetryのパッケージが用意されているのはなぜなんでしょう?
https://opentelemetry.io/ecosystem/registry/?language=python&component=instrumentation