分散トレーシング

時間がどこで消えたかを読む

トレースは1つのリクエストを端から端まで並べたものです。MapleはSDKが送信した全スパンを、属性、親スパン、正確なミリ秒オフセットとともに保持します。遅いリクエストは推測ではなくなります。

画面

1リクエスト、18スパン、1画面

スパンを選択すると、実行したSQL、返したステータス、動作したPodなど、全属性がウォーターフォールの横に開きます。要約されて消える情報はありません。

A slow database span selected in an 18-span waterfall, with its query attributes open alongside
/traces trace 4f9ac21e…8b7d40f2
signal
traces
transport
OTLP/gRPC · OTLP/HTTP
views
waterfall · flamegraph · flow
attributes
db.statement · http.status_code · exception.type
joins.on
trace_id · span_id
sampling
head · tail

動き

実際のトレース上の、実際のフレームグラフ

これは製品が実際にレンダリングしているコンポーネントを、サンプルトレースで動かしたものです。スパンにカーソルを合わせると、サービス名、所要時間、全体に占める割合が読み取れます。

/tracesa3f8c1d2e5b7f901
POST /checkout
8 spans across 4 services
api-gatewayauth-serviceorder-servicepayment-svc203msOk
Flow View
Mini Map
Click to select|Scroll to zoom|Drag to pan|
api-gateway
auth-service
order-service
payment-svc
|
Server
Internal
Error

できること

同じスパンを読む4つの方法

/traces
ウォーターフォール
スパンは親子関係でネストされ、バーはトレース自身の所要時間にスケールされます。480msの子を持つ1.24sのリクエストは、数値を読む前に形として見えます。
flamegraph
フレームグラフ
同じスパンを時間ではなく深さで積み上げます。同一階層に50個のdb.queryスパンが並べばN+1であり、リストではなく壁として見えます。
flow view
サービスフロー
トレースを、通過したサービスとその間の呼び出しに集約します。どの行かではなく、どの境界かが問題のときに使います。
db.statement
属性
SDKが送信した全キーを、送信されたまま保存します。db.statement、http.status_code、exception.type、独自のカスタムキーはすべて表示できるだけでなく、クエリ可能です。
trace_id
ログへ移動
スパンとログは同じトレースIDを持つため、任意のスパンから、その実行中に書き込まれたログ行を開けます。2つのツール間でタイムスタンプを計算する必要はありません。

次は

このデータを共有する画面

OTLPをMapleに向ける。

エンドポイントとキーが1つずつ。トレース、ログ、メトリクス、セッションが、最初のリクエストから同じトレースIDに集まります。