

# 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` は、テレメトリソースからのイベントを表しています。

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


| 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` | 拡張機能は、ここに任意のカスタム値を追加できます。 | 

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


| OpenTelemetry | Lambda Telemetry API スキーマ | 
| --- | --- | 
| `Span.Name` | 拡張機能は、`type` フィールドに基づいて値を生成します。 | 
| `Span.StartTime` | 一致する `*Start` イベントからの `e.time` を使用します。<br />または、`e.time - e.metrics.durationMs` を使用します。 | 
| `Span.EndTime` | イベントがまだ完了していないことから、該当するものはありません。 | 
| `Span.Kind` | `Server` に設定します。 | 
| `Span.Status` | `e.status` が `success` ではない場合は、`Error` に設定します。<br />それ以外の場合は、`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` | 拡張機能は、ここに任意のカスタム値を追加できます。 | 

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


| OpenTelemetry | Lambda Telemetry API スキーマ | 
| --- | --- | 
| `Span.Name` | 拡張機能は、`type` フィールドに基づいて値を生成します。 | 
| `Span.StartTime` | 一致する `*Start` イベントからの `e.time` を使用します。<br />または、`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` は、テレメトリソースからのイベントを表しています。

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


| OpenTelemetry | Lambda Telemetry API スキーマ | 
| --- | --- | 
| `Span.Name` | 拡張機能は、`type` フィールドに基づいて値を生成します。 | 
| `Span.StartTime` | 一致する `*Start` イベントからの `e.time` を使用します。<br />または、`e.time - e.metrics.durationMs` を使用します。 | 
| `Span.EndTime` | イベントがまだ完了していないことから、該当するものはありません。 | 
| `Span.Kind` | `Server` に設定します。 | 
| `Span.Status` | `e.status` が `success` ではない場合は、`Error` に設定します。<br />それ以外の場合は、`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` と同じ。 | 