TL;DR

リクエストの処理経路の中の、1 つの作業や操作を表す単位。トレースはスパンを組み合わせて作られる。

なぜ必要か

OpenTelemetry のドキュメントによると、スパンは文脈、相関、階層を持つ構造化ログのようなものである。親子関係で処理の入れ子を表せるので、別のプロセスやサービス、マシンで作られたスパンをまとめて、システムの処理を端から端まで見通せる。

仕組み

同じトレース ID を持つスパンの集まりがトレースであり、親スパン ID によって階層ができる。親スパン ID を持たないスパンがルートスパンで、操作全体の開始と終了を表す。スパンは主に次の情報を持つ。

  • 名前、開始と終了のタイムスタンプ
  • スパンコンテキスト: トレース ID やスパン ID など、サービス間で伝播する部分
  • 属性: 操作を説明するキーと値のメタデータ
  • イベント: スパンの期間中のある時点に付ける、時刻付きの注釈
  • リンク: 因果関係のある別のスパンとの関連
  • ステータス: Unset、Error、Ok のどれか
  • 種類: Client、Server、Internal、Producer、Consumer のどれか。指定しなければ Internal になる

関連

出典