otel-flask-style について
Flask アプリケーションに OpenTelemetry の可観測性を追加するためのスタイルスキルです。Flask のネイティブ計装、初期化時期、モジュールスコープのテレメトリーオブジェクト、ログ連携、LLM のトークン計測を説明します。
主な機能
- 01Flask のネイティブ計装
- 02トラフィック受付前の初期化
- 03モジュールスコープのトレーサーとメーター
- 04OTLP ログブリッジの要件
- 05LLM トークン計測の指針
活用シーン
- 01Flask アプリの可観測性設定
- 02補助処理へのスパン追加
- 03相関情報付き Python ログの転送
- 04LLM の入力・出力トークン追跡
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ superloglabs/ skills --skill otel-flask-styleインストール後、Claude Code で/otel-flask-styleを入力して読み込まれたか確認します。
詳細
OTel Flask スタイル
ネイティブの Flask インストルメンテーションを使用してください。スパンを作成するためだけに、リクエスト処理を手動のミドルウェアに置き換えないでください。
from flask import Flask
from opentelemetry.instrumentation.flask import FlaskInstrumentor
def init_observability(app: Flask) -> bool:
...
FlaskInstrumentor().instrument_app(app)
return True
ブートストラップの構成を把握しやすくするため、FlaskInstrumentor().instrument_app(app) はほかのオブザーバビリティ設定と一緒に保持してください。サインアップがまだ進行中で生成されたトークンが未登録でも、プロバイダーを初期化して問題ありません。ブラウザーのフローが完了するまで、取り込み時にエクスポートが拒否される場合があります。
エントリーポイント
ユーザーのトラフィックを受け付ける前に初期化してください。
app = Flask(__name__)
init_observability(app)
有界な処理
自動インストルメンテーションされた HTTP スパンでは捕捉できないヘルパーには、モジュールスコープの OTel オブジェクトとデコレーターを使用してください。
tracer = trace.get_tracer("mugline.api")
meter = metrics.get_meter("mugline.api")
@tracer.start_as_current_span("mug.recommend")
def recommend_mug(*, tenant_id: str, preference: str) -> dict[str, str]:
span = trace.get_current_span()
span.set_attribute("tenant.id", tenant_id)
...
ログ
OTLP に転送する標準ライブラリのログでは、次のすべてを設定してください。
LoggerProviderset_logger_provider(logger_provider)OTLPLogExporterLoggingHandlerLoggingInstrumentor().instrument(...)
LLM 呼び出し
LLM を呼び出すルートでは、次のトークン情報を計測する必要があります。
llm.tokens.inputllm.tokens.output
プロバイダーのインストルメンテーションでトークン使用量を捕捉できない場合に限り、テナント、プロバイダー、モデル、ユースケース、呼び出し元、結果を明示的なトークンカウンターにタグ付けしてください。アプリ側で LLM のコストメトリクスや料金表を追加しないでください。Superlog は、プロバイダー、モデル、トークンのデータからコストを一元的に推定します。