

# Lambda Telemetry API `Event` オブジェクトの OpenTelemetry スパンへの変換
<a name="telemetry-otel-spans"></a>

AWS Lambda Telemetry API スキーマには OpenTelemetry (OTel) との意味的な互換性があります。これは、AWS Lambda Telemetry API `Event` オブジェクトを OpenTelemetry (OTel) スパンに変換できることを意味します。変換するときは、単一の `Event` オブジェクトを単一の OTel スパンにマップしないようにしてください。その代わりに、ライフサイクルフェーズに関連する 3 つのイベントすべてを 単一の OTel スパンで提示する必要があります。例えば、`start`、`runtimeDone`、および `runtimeReport` イベントは、単一の関数呼び出しを表します。これら 3 つのイベントのすべてを単一の OTel スパンとして提示します。

イベントは、スパンイベントまたは子 (ネストされた) スパンを使用して変換できます。このページの表には、両方のアプローチに関する Telemetry API スキーマプロパティと OTel スパンプロパティ間のマッピングが説明されています。OTel スパンの詳細については、OpenTelemetry Docs ウェブサイトの「**Tracing API**」ページにある「[Span](https://opentelemetry.io/docs/reference/specification/trace/api/#span)」(スパン) を参照してください。

**Topics**
+ [スパンイベントを使用して OTel スパンにマップする](#telemetry-otel-span-events)
+ [子スパンを使用して OTel スパンにマップする](#telemetry-otel-child-spans)

## スパンイベントを使用して OTel スパンにマップする
<a name="telemetry-otel-span-events"></a>

以下の表にある `e` は、テレメトリソースからのイベントを表しています。

**\$1Start イベントのマッピング**


| OpenTelemetry | Lambda Telemetry API スキーマ | 
| --- | --- | 
|  `Span.Name`  |  拡張機能は、`type` フィールドに基づいてこの値を生成します。  | 
|  `Span.StartTime`  |  `e.time` を使用します。  | 
|  `Span.EndTime`  |  イベントがまだ完了していないことから、該当するものはありません。  | 
|  `Span.Kind`  |  `Server` に設定します。  | 
|  `Span.Status`  |  `Unset` に設定します。  | 
|  `Span.TraceId`  |  `e.tracing.value` にある AWS X-Ray ヘッダーを解析してから、`TraceId` 値を使用します。  | 
|  `Span.ParentId`  |  `e.tracing.value` にある X-Ray ヘッダーを解析してから、`Parent` 値を使用します。  | 
|  `Span.SpanId`  |  利用できる場合は、`e.tracing.spanId` を使用します。利用できない場合は、新しい `SpanId` を生成します。  | 
|  `Span.SpanContext.TraceState`  |  X-Ray トレースコンテキストについては、該当するものはありません。  | 
|  `Span.SpanContext.TraceFlags`  |  `e.tracing.value` にある X-Ray ヘッダーを解析してから、`Sampled` 値を使用します。  | 
|  `Span.Attributes`  |  拡張機能は、ここに任意のカスタム値を追加できます。  | 

**\$1RuntimeDone イベントのマッピング**


| OpenTelemetry | Lambda Telemetry API スキーマ | 
| --- | --- | 
|  `Span.Name`  |  拡張機能は、`type` フィールドに基づいて値を生成します。  | 
|  `Span.StartTime`  |  一致する `*Start` イベントからの `e.time` を使用します。 または、`e.time - e.metrics.durationMs` を使用します。  | 
|  `Span.EndTime`  |  イベントがまだ完了していないことから、該当するものはありません。  | 
|  `Span.Kind`  |  `Server` に設定します。  | 
|  `Span.Status`  |  `e.status` が `success` ではない場合は、`Error` に設定します。 それ以外の場合は、`Ok` に設定します。  | 
|  `Span.Events[]`  |  `e.spans[]` を使用します。  | 
|  `Span.Events[i].Name`  |  `e.spans[i].name` を使用します。  | 
|  `Span.Events[i].Time`  |  `e.spans[i].start` を使用します。  | 
|  `Span.TraceId`  |  `e.tracing.value` にある AWS X-Ray ヘッダーを解析してから、`TraceId` 値を使用します。  | 
|  `Span.ParentId`  |  `e.tracing.value` にある X-Ray ヘッダーを解析してから、`Parent` 値を使用します。  | 
|  `Span.SpanId`  |  `*Start` イベントからのものと同じ `SpanId` を使用します。利用できない場合は、`e.tracing.spanId` を使用するか、新しい `SpanId` を生成します。  | 
|  `Span.SpanContext.TraceState`  |  X-Ray トレースコンテキストについては、該当するものはありません。  | 
|  `Span.SpanContext.TraceFlags`  |  `e.tracing.value` にある X-Ray ヘッダーを解析してから、`Sampled` 値を使用します。  | 
|  `Span.Attributes`  |  拡張機能は、ここに任意のカスタム値を追加できます。  | 

**\$1Report イベントのマッピング**


| OpenTelemetry | Lambda Telemetry API スキーマ | 
| --- | --- | 
|  `Span.Name`  |  拡張機能は、`type` フィールドに基づいて値を生成します。  | 
|  `Span.StartTime`  |  一致する `*Start` イベントからの `e.time` を使用します。 または、`e.time - e.metrics.durationMs` を使用します。  | 
|  `Span.EndTime`  |  `e.time` を使用します。  | 
|  `Span.Kind`  |  `Server` に設定します。  | 
|  `Span.Status`  |  `*RuntimeDone` イベントと同じ値を使用します。  | 
|  `Span.TraceId`  |  `e.tracing.value` にある AWS X-Ray ヘッダーを解析してから、`TraceId` 値を使用します。  | 
|  `Span.ParentId`  |  `e.tracing.value` にある X-Ray ヘッダーを解析してから、`Parent` 値を使用します。  | 
|  `Span.SpanId`  |  `*Start` イベントからのものと同じ `SpanId` を使用します。利用できない場合は、`e.tracing.spanId` を使用するか、新しい `SpanId` を生成します。  | 
|  `Span.SpanContext.TraceState`  |  X-Ray トレースコンテキストについては、該当するものはありません。  | 
|  `Span.SpanContext.TraceFlags`  |  `e.tracing.value` にある X-Ray ヘッダーを解析してから、`Sampled` 値を使用します。  | 
|  `Span.Attributes`  |  拡張機能は、ここに任意のカスタム値を追加できます。  | 

## 子スパンを使用して OTel スパンにマップする
<a name="telemetry-otel-child-spans"></a>

以下の表には、`*RuntimeDone` スパンの子 (ネストされた) スパンを使用して、Lambda Telemetry API イベントを OTel スパンに変換する方法が説明されています。`*Start` および `*Report` マッピングについては、これらは子スパンでも同様であるため、[スパンイベントを使用して OTel スパンにマップする](#telemetry-otel-span-events) の表を参照してください。この表の `e` は、テレメトリソースからのイベントを表しています。

**\$1RuntimeDone イベントのマッピング**


| OpenTelemetry | Lambda Telemetry API スキーマ | 
| --- | --- | 
|  `Span.Name`  |  拡張機能は、`type` フィールドに基づいて値を生成します。  | 
|  `Span.StartTime`  |  一致する `*Start` イベントからの `e.time` を使用します。 または、`e.time - e.metrics.durationMs` を使用します。  | 
|  `Span.EndTime`  |  イベントがまだ完了していないことから、該当するものはありません。  | 
|  `Span.Kind`  |  `Server` に設定します。  | 
|  `Span.Status`  |  `e.status` が `success` ではない場合は、`Error` に設定します。 それ以外の場合は、`Ok` に設定します。  | 
|  `Span.TraceId`  |  `e.tracing.value` にある AWS X-Ray ヘッダーを解析してから、`TraceId` 値を使用します。  | 
|  `Span.ParentId`  |  `e.tracing.value` にある X-Ray ヘッダーを解析してから、`Parent` 値を使用します。  | 
|  `Span.SpanId`  |  `*Start` イベントからのものと同じ `SpanId` を使用します。利用できない場合は、`e.tracing.spanId` を使用するか、新しい `SpanId` を生成します。  | 
|  `Span.SpanContext.TraceState`  |  X-Ray トレースコンテキストについては、該当するものはありません。  | 
|  `Span.SpanContext.TraceFlags`  |  `e.tracing.value` にある X-Ray ヘッダーを解析してから、`Sampled` 値を使用します。  | 
|  `Span.Attributes`  |  拡張機能は、ここに任意のカスタム値を追加できます。  | 
|  `ChildSpan[i].Name`  |  `e.spans[i].name` を使用します。  | 
|  `ChildSpan[i].StartTime`  |  `e.spans[i].start` を使用します。  | 
|  `ChildSpan[i].EndTime`  |  `e.spans[i].start + e.spans[i].durations` を使用します。  | 
|  `ChildSpan[i].Kind`  |  親 `Span.Kind` と同じ。  | 
|  `ChildSpan[i].Status`  |  親 `Span.Status` と同じ。  | 
|  `ChildSpan[i].TraceId`  |  親 `Span.TraceId` と同じ。  | 
|  `ChildSpan[i].ParentId`  |  親 `Span.SpanId` を使用します。  | 
|  `ChildSpan[i].SpanId`  |  新しい `SpanId` を生成します。  | 
|  `ChildSpan[i].SpanContext.TraceState`  |  X-Ray トレースコンテキストについては、該当するものはありません。  | 
|  `ChildSpan[i].SpanContext.TraceFlags`  |  親 `Span.SpanContext.TraceFlags` と同じ。  | 