萌えハッカーニュースリーダー

2025/08/27 12:10 What Are Traces and Spans in OpenTelemetry?

出典: https://oneuptime.com/blog/post/2025-08-27-traces-and-spans-in-opentelemetry/view
hakase
博士

やあ、ロボ子!今日は分散トレーシングについて話すのじゃ。分散トレーシングって知ってるか?

roboko
ロボ子

はい、博士。分散トレーシングは、複数のサービスを通過するリクエストを追跡する技術ですよね。マイクロサービスアーキテクチャでは特に重要だと理解しています。

hakase
博士

その通り!基本概念は、トレース、スパン、ルートスパン、子スパン、コンテキスト、サンプラー、エクスポーター、などがあるのじゃ。

roboko
ロボ子

トレースはリクエストの全行程で、スパンはその中の時間単位の作業ですよね。ルートスパンは最初のスパンで、子スパンはより小さなステップ、と。

hakase
博士

ふむふむ。例えば、ECサイトで「注文を作成」のリクエストがあったとするじゃろ?

roboko
ロボ子

はい。

hakase
博士

その場合、ルートスパンは「HTTP GET /order.create」になるのじゃ。そして、データベースへのクエリや、支払いゲートウェイへの呼び出しが子スパンになる、というわけじゃな。

roboko
ロボ子

なるほど。スパンには名前、開始/終了時間、スパンID、トレースID、親スパンID、属性、イベント、ステータス、リンク、種類などの情報が含まれるんですね。

hakase
博士

そうじゃ!スパンの種類は、SERVER、CLIENT、INTERNAL、PRODUCER、CONSUMERがあるぞ。

roboko
ロボ子

SERVERは外部からのリクエストを処理し、CLIENTは別のサービスへのアウトバウンド呼び出しを行う、という感じですね。

hakase
博士

その通り!Node.jsでトレーシングを設定するには、必要なパッケージをインストールして、`telemetry.ts`ファイルを作成するのじゃ。

roboko
ロボ子

`@opentelemetry/api`、`@opentelemetry/sdk-node`、`@opentelemetry/auto-instrumentations-node`などのパッケージですね。

hakase
博士

そうじゃ。手動計測では、`trace.getTracer`でトレーサーを取得して、`tracer.startSpan`でスパンを開始、`span.end`で終了するのじゃ。

roboko
ロボ子

非同期処理では、`context.with`を使用してコンテキストを伝播する必要があるんですね。

hakase
博士

ふむ。エラー記録とステータスも重要じゃ。常にステータスを設定し、例外を記録するのじゃ。

roboko
ロボ子

属性、イベント、リンクも活用して、詳細な情報を記録することが大切ですね。

hakase
博士

コンテキスト伝播には、W3Cの`traceparent`と`tracestate`ヘッダーを使うのじゃ。

roboko
ロボ子

サンプリングには、ヘッドサンプリングとテイルサンプリングがあるんですね。

hakase
博士

そうじゃ。スパン命名のベストプラクティスは、安定していて、低カーディナリティで、アクション指向の名前を使うことじゃ。

roboko
ロボ子

アンチパターンとしては、スパンの爆発、高カーディナリティのスパン名、PIIの埋め込みなどがあるんですね。気をつけます。

hakase
博士

その通り!次のステップとしては、レイテンシーパーセンタイルのメトリクスを追加したり、構造化されたログを出力したり、テイルサンプリングを使用したり、SLOを導出したりすることが考えられるのじゃ。

roboko
ロボ子

分散トレーシングを導入することで、時間の費やされた場所やリクエストが失敗した理由を特定し、サービス間の流れを把握できるんですね。とても勉強になりました!

hakase
博士

よし、ロボ子。最後に一つなぞなぞじゃ!トレースとスパンが仲良くなるとどうなるでしょう?

roboko
ロボ子

えーと…、より詳細な情報が得られる、とかでしょうか?

hakase
博士

ブー!正解は…「追跡(トラッキング)が捗る」!…なのじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search