將 Lambda 遙測 API Event 物件轉換為 OpenTelemetry跨度 - AWS Lambda

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

將 Lambda 遙測 API Event 物件轉換為 OpenTelemetry跨度

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

您可以使用跨度事件或子 (巢狀) 跨度轉換事件。此頁面上的表格針對這兩種做法,說明遙測 API 結構描述屬性與 oTel 跨度屬性之間的映射。如需 Otel 範圍的詳細資訊,請參閱 OpenTelemetry 文件網站追蹤 API 頁面上的範圍。

透過跨度事件映射到 OTel 跨度

在下表中,e 代表來自遙測來源的事件。

映射 *Start 事件
OpenTelemetry Lambda 遙測 API 結構描述

Span.Name

延伸項目會根據 type 欄位產生此值。

Span.StartTime

請使用 e.time

Span.EndTime

N/A,因為事件尚未完成。

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 追蹤內容則為 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

或使用 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

剖析 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 追蹤內容則為 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

或使用 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 追蹤內容則為 N/A。

Span.SpanContext.TraceFlags

剖析 e.tracing.value 中找到的 X-Ray 標頭,然後使用 Sampled 值。

Span.Attributes

延伸項目可以在此處新增任何自訂值。

透過子跨度映射到 OTel 跨度

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

映射 *RuntimeDone 事件
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

剖析 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 追蹤內容則為 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 相同。