

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
opentracingとは?
opentracingは分散トレーシングのための標準的な APIのひとつです。分散トレーシングとは、マイクロサービスなど複数のプログラムが連携して動くときに、リクエストの流れを追跡する仕組みのこと。opentracingは「どの処理がどの順序で動いたのか」「どのサービスがどれくらい時間を費やしたのか」を一つのまとまりとして可視化するための共通の設計を提供します。
この仕組みを使うと、ある操作が端末から始まり、複数のサービスを経て完了するまでの全経路を一つのトレースとして見ることができます。これにより、遅延の原因を特定しやすくなり、障害時の原因究明も速くなります。
基本的な用語
opentracing の世界にはいくつか基本的な用語があります。以下は初心者にも覚えやすいポイントです。
Trace:複数のSpan から構成される全体の追跡データです。あるユーザーのリクエスト全体をひとまとめにします。
Span:個々の処理や操作を表す単位です。たとえば「データベースへクエリを送る」「外部APIを呼ぶ」といった一連の作業を1つの Span として扱います。
Context:現在の Span の情報を次のサービスへ伝えるための情報です。これを介して、別のマイクロサービスが同じトレースに参加します。
Carrier:Context をネットワークのヘッダなど経路をまたいで伝える媒介です。HTTP ヘッダのような形で送られ、下流のサービスがトレース情報を受け取ります。
動く仕組みのイメージ
1. アプリケーションAが処理を開始すると、スパンを作成します。ここには開始時刻や処理名、タグなどを記録します。
2. 次に下流のサービスへ処理を渡すとき、ContextをCarrierとして伝えます。これによりBサービスは同じトレースに参加できます。
3. Bサービスでは新しいスパンを作成し、Aから受け取った Context を親として設定します。こうして Trace が階層状に積み重なっていきます。
4. 最後に全てのスパンが終了すると、トレース全体が収集・可視化されます。これを見ればどの処理がボトルネックだったのか、一目で分かります。
Opentracing の使い方の概要
実際には、トレーサーと呼ばれる実装を選び、アプリのコードに対してスパンを作成します。Jaegerや Zipkin、OpenTelemetry などのバックエンドへデータを送信します。opentracing は「どのバックエンドを使っても同じ API で操作できる」ように設計されており、バックエンドを交換してもコードの大きな変更は必要ありません。
重要な点として、opentracing は分散トレースのための規格と APIであり、実際のデータの収集先は Jaeger などのトレーシングバックエンドが担当します。最近は OpenTelemetry という新しい標準が普及しており、opentracing の多くのアイデアを継承しています。つまり、学んだことは OpenTelemetry の世界にも活かせます。
小さな実例とポイント
例えばあるECサイトを考えます。ユーザーが商品ページを開くと、フロントエンド → フロントエンドのバックエンド → 在庫サービス → 支払いサービスという順でリクエストが走ります。各段階でスパンを作成し、開始点と終了点、経由したサービス名をタグとして付けます。最終的に一つの Trace として表示されれば、どのサービスが遅いのか、どの順序で処理が滞っているのかが一目で分かります。
表で見る用語と役割
| 用語 | 説明 |
|---|---|
| Trace | 複数の Span から成る全体の追跡データ。リクエストの全経路を一つにまとめる。 |
| Span | 処理の単位。ある操作を表す。開始と終了の時刻、名前、タグを持つ。 |
| Context | 現在の Span の情報。次のサービスへ流すための情報。 |
| Carrier | Context を伝えるための媒介。HTTP ヘッダなど |
まとめと今後の動向
opentracing は分散トレーシングの基本を学ぶのに最適な出発点です。まずは小さなアプリケーションでスパンを作るところから始め、次にバックエンドへデータを送る仕組みを導入してみましょう。実際の現場では OpenTelemetry が主流になる流れが続いていますが、opentracing の考え方を知っておくと互換性のあるツール選びや設計に役立ちます。今後もトレースの可視化はシステムの改善に欠かせない要素となるでしょう。
opentracingの同意語
- OpenTracing
- 分散トレーシングのオープン標準とAPIを提供するオープンソースプロジェクト。
- OpenTelemetry
- 分散トレーシングとメトリクス・ログを統合する観測可能性の標準化プロジェクト。OpenTracingの後継として位置づけられることが多い。
- 分散トレーシング
- 複数のサービス間でリクエストの流れを追跡・可視化する技術。トレースIDとスパンを用いて処理を結びつける。
- 分散トレース
- 分散環境でのリクエストの追跡全般を指す表現。
- トレーシング
- 処理の経路を記録して後から追跡できるようにする技術・手法。
- トレース
- リクエストや処理の一連のイベントの集まり。スパンの集合として表現されることが多い。
- スパン
- トレースの最小単位。開始と終了のタイムスタンプを持つ区間。
- スパンデータ
- スパンを含むトレースデータの個別要素。開始/終了時間、タグなどを含む。
- トレースデータ
- トレースから得られるデータセット。(トレースID・スパン・メタ情報など)
- 観測可能性
- システムの挙動を理解・可視化するためのデータ収集と分析の総称。
- オブザーバビリティ
- 観測可能性の英語表現。主に分布システムで用いられる概念。
- トレーシングAPI
- トレーシング機能を提供するAPI群。
- トレーシングライブラリ
- トレーシング機能を実装するためのライブラリ群。
opentracingの対義語・反対語
- 閉鎖的トレーシング
- 公開・共有・標準化が限定的で、特定の組織やベンダーに依存するトレーシングのこと。外部へ情報が開かれていないため、互換性や検証が難しくなる傾向があります。
- クローズドソーストレーシング
- ソースコードが公開されていない商用のトレーシング実装。透明性が低く、デカップリングやカスタマイズが難しくなることが多いです。
- 独自仕様トレーシング
- 企業や組織が自社用に作成した独自のトレーシングAPI/仕様。他のシステムとの互換性が低く、標準化の恩恵を得にくいです。
- プロプライエタリなトレーシング
- 特許・ライセンス付きの独占的トレーシング技術。オープン性が低く、導入コストや依存度が高まります。
- ブラックボックストレーシング
- 内部仕様が公開されず、挙動やデータの流れを外部から把握・検証しづらい状態のトレーシング。
- 非公開APIトレーシング
- 公開されていないAPIを介して機能するトレーシング。使い勝手や互換性が制限され、外部統合が難しくなります。
- 商用ベンダー依存のトレーシング
- 特定のベンダー提供ツールに強く依存するトレーシング。ベンダーのエコシステムに縛られる可能性があります。
- オープンでない規格のトレーシング
- 公開・普及しているオープン規格ではなく、クローズドな規格で動くトレーシング。広範な互換性を取りづらいです。
- 自社内限定トレーシング
- 社内向けに設計・運用され、外部の利用者や他システムと共有されないトレーシング。再利用性が低いです。
- 内部トレーシング専用実装
- デバッグや内部監視目的のみの実装で、外部基準との整合性を意識していない場合が多いです。
opentracingの共起語
- OpenTelemetry
- OpenTelemetryは分散トレーシング・メトリクス・ログの収集を統合する現代的な標準プロジェクト。OpenTracingとOpenCensusの後継として広く利用され、さまざまな言語の実装とバックエンドに対応します。
- Jaeger
- オープンソースの分散トレーシングシステム。クライアントライブラリとバックエンドを組み合わせて、トレースの収集・保存・可視化を行います。
- Zipkin
- 分散トレーシングのバックエンド・UI。OpenTracingで生成したトレースを収集・可視化するために使われることが多いツールです。
- Tracer
- トレースを生成・管理する中心オブジェクト。スパンを開始・終了するためのAPIを提供します。
- Span
- トレースの中の最小単位。ある作業の開始と終了を表し、親子関係で階層構造を作ります。
- Trace
- 複数の Span を束ねた実行の全体像。1つのリクエストに対して連続的に発生する作業の流れを表します。
- SpanContext
- スパンの伝搬に必要な情報を含むコンテキスト。trace_id、span_id、サンプリング情報などを格納します。
- Propagation
- トレース情報を別サービスへ渡す仕組み。HTTPヘッダやテキスト形式などを使って伝搬します。
- TextMapCarrier
- テキストベースの伝搬媒体を表すキャリア。キーと値をスパンのコンテキスト伝搬に使います(例: HTTP ヘッダ)。
- HttpHeadersCarrier
- HTTP ヘッダを使って伝搬するキャリア。Web APIで最も一般的な伝搬手段です。
- TextMap
- テキスト形式の伝搬データの表現。TextMapCarrierとセットで使われ、キー=値のペアを伝搬します。
- Baggage
- トレース全体に伝搬させる追加情報。各Spanに跨ってキーと値を伝える、長寿命のデータです。
- BaggageItem
- バゲージの個々の値。特定の情報をトレース間で共有するための要素です。
- TraceContext
- トレースを伝搬する際の共通のコンテキスト情報。Trace ID や関連情報を含む広義の概念です。
- Sampler
- サンプリングの実装。どのリクエストをトレースに含めるかを決めるルールを提供します。
- Sampling
- トレースの収集割合を制御する設定。高負荷時のデータ量削減に使われます。
- Tags
- スパンに付与するメタデータ。キーと値を組み合わせて観測情報を整理します。
- Logs
- スパンに紐づくイベントログ。発生時刻とメッセージを記録して、トラブルシューティングを助けます。
- Reference
- Span間の関係を表す参照。親子関係や、Follows From などの参照タイプを使います。
- ChildOf
- ある Span が別の Span の子であることを示す参照タイプ。階層構造を作ります。
- FollowsFrom
- 別の Span の後追いを意味する参照タイプ。必ずしも直接の親子ではありません。
- OpenTracing API
- OpenTracingのAPI仕様。アプリケーションコードからトレーシング情報を生成・操作するための共通インターフェースを提供します。
- opentracing-go
- Go 言語向けの OpenTracing クライアントライブラリ。Go アプリからトレースを生成します。
- opentracing-python
- Python 向けの OpenTracing クライアントライブラリ。Python アプリでトレースを扱えます。
- opentracing-javascript
- JavaScript(Node.js/ブラウザ)向けの OpenTracing クライアントライブラリ。JavaScript アプリのトレースを可能にします。
- Carrier
- 伝搬情報を渡す媒体全般。TextMapCarrierやHttpHeadersCarrierなどが具体例です。
- Backend
- トレースデータを受け取り、保存・分析・表示を行う後ろ側のシステム。Jaeger/Zipkinなどがバックエンドに該当します。
- Collector
- データを集約・転送・統合する役割のコンポーネント。トレースデータを収集してバックエンドへ渡します。
- SpanId
- スパンを一意に識別するID。Trace内で一意で、SpanContext に含まれます。
- TraceId
- 1つのトレースを一意に識別するID。複数のスパンを横断して連結します。
opentracingの関連用語
- OpenTracing
- 分散トレーシングを標準化するための古いオープンソースプロジェクト。言語ごとの実装を統一するAPIを提供します。
- OpenTelemetry
- OpenTracingの後継として、トレーシングだけでなくメトリクスとログを統合的に扱う観測性フレームワークです。
- 分散トレーシング
- 複数のサービスを跨いでリクエストの流れを追跡・可視化する技術。
- トレーシング
- トレースを作成・管理する行為全体。分散トレーシングの総称として使われます。
- スパン
- トレースの最小単位。処理の開始時刻・終了時刻・属性・イベントを記録します。
- トレース
- あるリクエストの全スパンの集合。サービス間の呼び出し経路を表します。
- Tracer
- トレースを作成・管理する入口となるコンポーネント。
- SpanContext
- スパンの識別情報。トレースID・スパンID・親子関係・伝搬状態を保持します。
- Trace ID
- 同一トレースを識別する一意のID。
- Span ID
- 個々のスパンを識別する一意のID。
- Baggage
- 伝搬させる追加情報。キーバリューのペアとしてスパン間で共有します。
- Propagation
- コンテキスト情報を別サービスへ伝搬させる仕組み全般。
- Propagator
- 伝搬形式を実装する部品。どのフォーマットで伝搬するかを決めます。
- TextMap
- テキストベースの伝搬形式の一つ。HTTPヘッダなどで使われます。
- HTTPヘッダ
- 分散トレーシングの伝搬情報をHTTP経由で渡す際の媒体。
- traceparent
- W3CのTrace Contextの伝搬ヘッダ。トレースIDとスパンIDを含みます。
- tracestate
- traceparentに追加情報を格納するヘッダ。
- W3C Trace Context
- 分散トレーシングの伝搬仕様。traceparentと tracestate から成ります。
- Jaeger
- 分散トレーシングの実装・可視化ツール。OpenTracing/OpenTelemetryと組み合わせて使われます。
- Zipkin
- 別の分散トレーシングツール。ライブラリとUIを提供します。
- OpenTelemetry API
- トレース・メトリクス・ログを扱う統一API。言語ごとの実装と連携します。
- Instrumentation
- アプリケーションに観測点を追加してトレーシングを可能にする作業です。
- Instrumentation Library
- 特定言語向けの観測ライブラリの集合。
- Event
- スパン内の出来事や注釈を記録して追加情報を残す機能。
- Log
- スパンに関連するログ情報を記録する要素。後で分析に役立ちます。
- Tag
- スパンに付与するキーと値のメタデータ。検索・集計の基盤になります。
- Attribute
- タグと同義のデータ属性。スパンの特徴を表します。
- Sampler
- トレースを収集するかどうかを決定するポリシー。
- Exporter
- 収集したトレースデータを外部システムへ送信する機能。
- Collector
- データを受け取り、変換・転送を行う中継役。OpenTelemetry Collector など。
- Span Processor
- スパンのライフサイクルを監視・加工する処理。データの整形・フィルタリングを担います。
- NoopTracer
- 何もしないダミーのトレーサー。テスト時などに使われます。
- Context
- 現在のスパン情報を保持する実行時の文脈。
- OTLP
- OpenTelemetry Protocol。トレース・メトリクス・ログの転送に使われる共通プロトコル。
- Observability
- 観測性。トレース・メトリクス・ログを組み合わせてシステムの状態を把握する考え方。
- OTLP Exporter
- OTLP形式でデータを外部へ送信するエクスポーター。
- Trace Context Formats
- 伝搬フォーマットの総称。traceparent/tracestate以外にもさまざまな形式があります。



















