

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將 Lambda 遙測 API`Event` 物件轉換為 OpenTelemetry 跨度
<a name="telemetry-otel-spans"></a>

 AWS Lambda 遙測 API 結構描述在語義上與 OpenTelemetry (OTel) 相容。這表示您可以將 AWS Lambda 遙測 API `Event` 物件轉換為 OpenTelemetry (OTel) 範圍。轉換時，不應將單一 `Event` 物件映射到單一 oTel 跨度。而是應該在單一 oTel 跨度中顯示與生命週期階段相關的全部三個事件。例如，`start`、`runtimeDone` 和 `runtimeReport` 事件代表單一函數叫用。將這三個事件做為一個單一的 oTel 跨度呈現。

您可以使用跨度事件或子 (巢狀) 跨度轉換事件。此頁面上的表格針對這兩種做法，說明遙測 API 結構描述屬性與 oTel 跨度屬性之間的映射。如需 OTel 跨度的詳細資訊，請參閱 OpenTelemetry 文件網站的**追蹤 API** 頁面上的[跨度](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 遙測 API 結構描述 | 
| --- | --- | 
|  `Span.Name`  |  延伸項目會根據 `type` 欄位產生此值。  | 
|  `Span.StartTime`  |  請使用 `e.time`。  | 
|  `Span.EndTime`  |  N/A，因為事件尚未完成。  | 
|  `Span.Kind`  |  設定為 `Server`。  | 
|  `Span.Status`  |  設定為 `Unset`。  | 
|  `Span.TraceId`  |  剖析 中找到的 AWS X-Ray 標頭`e.tracing.value`，然後使用 `TraceId`值。  | 
|  `Span.ParentId`  |  剖析 `e.tracing.value` 中找到的 X-Ray 標頭，然後使用 `Parent` 值。  | 
|  `Span.SpanId`  |  使用 `e.tracing.spanId` (如果可用)。若無法使用，請產生一個新的 `SpanId`。  | 
|  `Span.SpanContext.TraceState`  |  X-Ray 追蹤內容則為 N/A。  | 
|  `Span.SpanContext.TraceFlags`  |  剖析 `e.tracing.value` 中找到的 X-Ray 標頭，然後使用 `Sampled` 值。  | 
|  `Span.Attributes`  |  延伸項目可以在此處新增任何自訂值。  | 

**映射 \$1RuntimeDone 事件**


| OpenTelemetry | Lambda 遙測 API 結構描述 | 
| --- | --- | 
|  `Span.Name`  |  延伸項目會根據 `type` 欄位產生值。  | 
|  `Span.StartTime`  |  使用相符 `*Start` 事件中的 `e.time`。 或使用 `e.time - e.metrics.durationMs`。  | 
|  `Span.EndTime`  |  N/A，因為事件尚未完成。  | 
|  `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`  |  剖析 中找到的 AWS X-Ray 標頭`e.tracing.value`，然後使用 `TraceId`值。  | 
|  `Span.ParentId`  |  剖析 `e.tracing.value` 中找到的 X-Ray 標頭，然後使用 `Parent` 值。  | 
|  `Span.SpanId`  |  使用 `*Start` 事件的相同 `SpanId`。如果無法使用，則使用 `e.tracing.spanId` 或產生新的 `SpanId`。  | 
|  `Span.SpanContext.TraceState`  |  X-Ray 追蹤內容則為 N/A。  | 
|  `Span.SpanContext.TraceFlags`  |  剖析 `e.tracing.value` 中找到的 X-Ray 標頭，然後使用 `Sampled` 值。  | 
|  `Span.Attributes`  |  延伸項目可以在此處新增任何自訂值。  | 

**映射 \$1Report 事件**


| OpenTelemetry | Lambda 遙測 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`  |  剖析 中找到的 AWS X-Ray 標頭`e.tracing.value`，然後使用 `TraceId`值。  | 
|  `Span.ParentId`  |  剖析 `e.tracing.value` 中找到的 X-Ray 標頭，然後使用 `Parent` 值。  | 
|  `Span.SpanId`  |  使用 `*Start` 事件的相同 `SpanId`。如果無法使用，則使用 `e.tracing.spanId` 或產生新的 `SpanId`。  | 
|  `Span.SpanContext.TraceState`  |  X-Ray 追蹤內容則為 N/A。  | 
|  `Span.SpanContext.TraceFlags`  |  剖析 `e.tracing.value` 中找到的 X-Ray 標頭，然後使用 `Sampled` 值。  | 
|  `Span.Attributes`  |  延伸項目可以在此處新增任何自訂值。  | 

## 透過子跨度映射到 OTel 跨度
<a name="telemetry-otel-child-spans"></a>

下表說明如何針對 `*RuntimeDone` 跨度，透過子 (巢狀) 跨度將 Lambda 遙測 API 事件轉換為 OTel 跨度。如需 `*Start` 和 `*Report` 映射，請參閱「[透過跨度事件映射到 OTel 跨度](#telemetry-otel-span-events)」中的表格，因為對子跨度來說是相同的。在本表中，`e` 代表來自遙測來源的事件。

**映射 \$1RuntimeDone 事件**


| OpenTelemetry | Lambda 遙測 API 結構描述 | 
| --- | --- | 
|  `Span.Name`  |  延伸項目會根據 `type` 欄位產生值。  | 
|  `Span.StartTime`  |  使用相符 `*Start` 事件中的 `e.time`。 或使用 `e.time - e.metrics.durationMs`。  | 
|  `Span.EndTime`  |  N/A，因為事件尚未完成。  | 
|  `Span.Kind`  |  設定為 `Server`。  | 
|  `Span.Status`  |  如果 `e.status` 不等於 `success`，則設定為 `Error`。 否則，請設定為 `Ok`。  | 
|  `Span.TraceId`  |  剖析 中找到的 AWS X-Ray 標頭`e.tracing.value`，然後使用 `TraceId`值。  | 
|  `Span.ParentId`  |  剖析 `e.tracing.value` 中找到的 X-Ray 標頭，然後使用 `Parent` 值。  | 
|  `Span.SpanId`  |  使用 `*Start` 事件的相同 `SpanId`。如果無法使用，則使用 `e.tracing.spanId` 或產生新的 `SpanId`。  | 
|  `Span.SpanContext.TraceState`  |  X-Ray 追蹤內容則為 N/A。  | 
|  `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 追蹤內容則為 N/A。  | 
|  `ChildSpan[i].SpanContext.TraceFlags`  |  與父項 `Span.SpanContext.TraceFlags` 相同。  | 