

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

# 將 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` 代表來自遙測來源的事件。

**映射 \*Start 事件**


| 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` | 延伸項目可以在此處新增任何自訂值。 | 

**映射 \*RuntimeDone 事件**


| OpenTelemetry | Lambda 遙測 API 結構描述 | 
| --- | --- | 
| `Span.Name` | 延伸項目會根據 `type` 欄位產生值。 | 
| `Span.StartTime` | 使用相符 `*Start` 事件中的 `e.time`。<br />或使用 `e.time - e.metrics.durationMs`。 | 
| `Span.EndTime` | N/A，因為事件尚未完成。 | 
| `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` | 剖析 中找到的 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` | 延伸項目可以在此處新增任何自訂值。 | 

**映射 \*Report 事件**


| OpenTelemetry | Lambda 遙測 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` | 剖析 中找到的 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` 代表來自遙測來源的事件。

**映射 \*RuntimeDone 事件**


| OpenTelemetry | Lambda 遙測 API 結構描述 | 
| --- | --- | 
| `Span.Name` | 延伸項目會根據 `type` 欄位產生值。 | 
| `Span.StartTime` | 使用相符 `*Start` 事件中的 `e.time`。<br />或使用 `e.time - e.metrics.durationMs`。 | 
| `Span.EndTime` | N/A，因為事件尚未完成。 | 
| `Span.Kind` | 設定為 `Server`。 | 
| `Span.Status` | 如果 `e.status` 不等於 `success`，則設定為 `Error`。<br />否則，請設定為 `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` 相同。 | 