Trace ID によるリクエスト追跡ガイド
概要
SaaS アプリケーションでは、ユーザーの1つの操作が複数の API リクエストを発生させることがあります。例えば、管理画面のトップページを表示するだけでも、認証・ユーザー情報取得・MFA 状態確認など複数の SaaSus API が呼び出されます。
Trace ID(X-SaaSus-Trace-Id)を利用することで、これらの関連する API リクエストに共通の ID を割り当て、後からログを一括で追跡・分析できるようになります。
アーキテクチャ
ポイント
バックエンドで context にセットすれば、SDK が全ての SaaSus API リクエストに X-SaaSus-Trace-Id を自動伝播します。アプリケーション側で API コールごとにヘッダーを個別設定する必要はありません。
実装方法
フロントエンド: Trace ID の生成と付与
フロントエンド側で UUID を生成し、バックエンドへのリクエストヘッダーに X-SaaSus-Trace-Id として付与します。
- TypeScript
// UUID を生成
const traceId = crypto.randomUUID();
// バックエンドへのリクエストに付与
await fetch('/api/endpoint', {
headers: {
'Authorization': `Bearer ${jwtToken}`,
'X-SaaSus-Trace-Id': traceId
}
});
Trace ID の生成粒度
ページ遷移単位・ユーザー操作単位など、 分析したい粒度に合わせて生成タイミングを決定してください。同一の trace_id を複数リクエストで共有することで、一連の操作をグルーピングできます。
バックエンド: ミドルウェアによる context への格納
標準 net/http の場合(SDK 提供ミドルウェアを使用)
SDK が提供する middleware.ExtractTraceId をそのまま利用できます。
- Go
import (
"github.com/saasus-platform/saasus-sdk-go/middleware"
)
// SDK 提供のミドルウェアを使用
mux := http.NewServeMux()
handler := middleware.ExtractTraceId(mux)
http.ListenAndServe(":8080", handler)
Echo などのフレームワークを使用する場合
フレームワーク固有のミドルウェア形式に合わせて context への格納処理を実装します。
- Go
import (
"context"
"github.com/labstack/echo/v4"
"github.com/saasus-platform/saasus-sdk-go/ctxlib"
)
// カスタムミドルウェア実装例
func SaaSusTraceIDMiddleware() echo.MiddlewareFunc {
return func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
traceID := c.Request().Header.Get("X-SaaSus-Trace-Id")
if traceID != "" {
ctx := context.WithValue(c.Request().Context(), ctxlib.XSaaSusTraceIDKey, traceID)
c.SetRequest(c.Request().WithContext(ctx))
}
return next(c)
}
}
}
Echo サーバーへの登録:
- Go
e := echo.New()
e.Use(SaaSusTraceIDMiddleware())