ZipkinのトレースIDを生成して引き継ぐ
ZipkinのトレースIDを引き継ぐ方法のメモです。
ブラウザ or 外部サービス ↓ フロントエンド(トレースIDを生成) ↓ ↓ X-B3-TraceId: xxxx ↓ バックエンドAPI(トレースIDを中継) ↓ ↓ X-B3-TraceId: xxxx ↓ バックエンドAPI
フロントエンドがPHPの場合は以下のようにトレースIDを生成すると簡単です。
// Generate 128bit random value
$traceId = bin2hex(openssl_random_pseudo_bytes(16));
define('ZIPKIN_TRACE_ID', $traceId);
// Add header (depends on API client)
$apiClient->addHeader('X-B3-TRACEID', ZIPKIN_TRACE_ID);
ブラウザにもトレースIDをヘッダで返しておくと、問題発生時の調査で役に立つでしょう。
Springの場合は依存関係に spring-cloud-starter-sleuth
を追加すると以下を行ってくれます。