

# Conversión de objetos `Event` de la API de telemetría de Lambda en OpenTelemetry Spans
<a name="telemetry-otel-spans"></a>

El esquema de la API de telemetría AWS Lambda es semánticamente compatible con OpenTelemetry (OTel). Esto significa que puede convertir sus objetos `Event` de la API de telemetría AWS Lambda en OpenTelemetry (OTel) Spans. Al realizar la conversión, no debe asignar un solo objeto de `Event` a un solo OTel Span. En su lugar, debe presentar los tres eventos relacionados con una fase del ciclo de vida en un solo OTel Span. Por ejemplo, los eventos `start`, `runtimeDone` y `runtimeReport` representan una sola invocación de función. Presente estos tres eventos como un solo OTel Span.

Puede convertir sus eventos mediante Span Events o Child Spans (agrupados). Las tablas de esta página describen las asignaciones entre las propiedades del esquema de la API de telemetría y las propiedades de OTel Span para ambos enfoques. Para obtener más información sobre OTel Spans, consulte [Span](https://opentelemetry.io/docs/reference/specification/trace/api/#span) en la página de la **API de seguimiento** del sitio web de OpenTelemetry Docs.

**Topics**
+ [Mapeo de OTel Spans con Span Events](#telemetry-otel-span-events)
+ [Mapeo de OTel Spans con Child Spans](#telemetry-otel-child-spans)

## Mapeo de OTel Spans con Span Events
<a name="telemetry-otel-span-events"></a>

En las siguientes tablas, `e` representa el evento que proviene del origen de telemetría.

**Mapeo de los eventos \$1Start**


| OpenTelemetry | Esquema de la API de telemetría de Lambda | 
| --- | --- | 
|  `Span.Name`  |  Su extensión genera este valor en función del campo `type`.  | 
|  `Span.StartTime`  |  Utilice `e.time`.  | 
|  `Span.EndTime`  |  N/D, porque el evento aún no se ha completado.  | 
|  `Span.Kind`  |  Establece en `Server`.  | 
|  `Span.Status`  |  Establece en `Unset`.  | 
|  `Span.TraceId`  |  Analice el encabezado AWS X-Ray que se encuentra en `e.tracing.value` y, a continuación, use el valor `TraceId`.  | 
|  `Span.ParentId`  |  Analice el encabezado X-Ray que se encuentra en `e.tracing.value` y, a continuación, use el valor `Parent`.  | 
|  `Span.SpanId`  |  Utilice `e.tracing.spanId` si está disponible. De lo contrario, genere un nuevo `SpanId`.  | 
|  `Span.SpanContext.TraceState`  |  N/D para un contexto de seguimiento de X-Ray.  | 
|  `Span.SpanContext.TraceFlags`  |  Analice el encabezado X-Ray que se encuentra en `e.tracing.value` y, a continuación, use el valor `Sampled`.  | 
|  `Span.Attributes`  |  Su extensión puede agregar aquí cualquier valor personalizado.  | 

**Mapeo de los eventos \$1RuntimeDone**


| OpenTelemetry | Esquema de la API de telemetría de Lambda | 
| --- | --- | 
|  `Span.Name`  |  Su extensión genera el valor en función del campo `type`.  | 
|  `Span.StartTime`  |  Utilice `e.time` desde el evento coincidente `*Start`. Para otras opciones, consulte `e.time - e.metrics.durationMs`.  | 
|  `Span.EndTime`  |  N/D, porque el evento aún no se ha completado.  | 
|  `Span.Kind`  |  Establezca en `Server`.  | 
|  `Span.Status`  |  S i`e.status` no es igual a `success`, entonces configúrelo en `Error`. De lo contrario, establézcala en `Ok`.  | 
|  `Span.Events[]`  |  Utilice `e.spans[]`.  | 
|  `Span.Events[i].Name`  |  Utilice `e.spans[i].name`.  | 
|  `Span.Events[i].Time`  |  Utilice `e.spans[i].start`.  | 
|  `Span.TraceId`  |  Analice el encabezado AWS X-Ray que se encuentra en `e.tracing.value` y, a continuación, use el valor `TraceId`.  | 
|  `Span.ParentId`  |  Analice el encabezado X-Ray que se encuentra en `e.tracing.value` y, a continuación, use el valor `Parent`.  | 
|  `Span.SpanId`  |  Use el mismo `SpanId` del evento `*Start`. Si no está disponible, entonces utilice `e.tracing.spanId` o genere un nuevo `SpanId`.  | 
|  `Span.SpanContext.TraceState`  |  N/D para un contexto de seguimiento de X-Ray.  | 
|  `Span.SpanContext.TraceFlags`  |  Analice el encabezado X-Ray que se encuentra en `e.tracing.value` y, a continuación, use el valor `Sampled`.  | 
|  `Span.Attributes`  |  Su extensión puede agregar aquí cualquier valor personalizado.  | 

**Mapeo de los eventos \$1Report**


| OpenTelemetry | Esquema de la API de telemetría de Lambda | 
| --- | --- | 
|  `Span.Name`  |  Su extensión genera el valor en función del campo `type`.  | 
|  `Span.StartTime`  |  Utilice `e.time` desde el evento coincidente `*Start`. Para otras opciones, consulte `e.time - e.metrics.durationMs`.  | 
|  `Span.EndTime`  |  Utilice `e.time`.  | 
|  `Span.Kind`  |  Establezca en `Server`.  | 
|  `Span.Status`  |  Usa el mismo valor que el evento `*RuntimeDone`.  | 
|  `Span.TraceId`  |  Analice el encabezado AWS X-Ray que se encuentra en `e.tracing.value` y, a continuación, use el valor `TraceId`.  | 
|  `Span.ParentId`  |  Analice el encabezado X-Ray que se encuentra en `e.tracing.value` y, a continuación, use el valor `Parent`.  | 
|  `Span.SpanId`  |  Use el mismo `SpanId` del evento `*Start`. Si no está disponible, entonces utilice `e.tracing.spanId` o genere un nuevo `SpanId`.  | 
|  `Span.SpanContext.TraceState`  |  N/D para un contexto de seguimiento de X-Ray.  | 
|  `Span.SpanContext.TraceFlags`  |  Analice el encabezado X-Ray que se encuentra en `e.tracing.value` y, a continuación, use el valor `Sampled`.  | 
|  `Span.Attributes`  |  Su extensión puede agregar aquí cualquier valor personalizado.  | 

## Mapeo de OTel Spans con Child Spans
<a name="telemetry-otel-child-spans"></a>

En la siguiente tabla se describe cómo convertir los eventos de la API de telemetría de Lambda en OTel Spans con Child Spans (agrupados) para los Spans `*RuntimeDone`. Para las asignaciones de `*Start` y `*Report`, consulte las tablas en [Mapeo de OTel Spans con Span Events](#telemetry-otel-span-events), ya que son las mismas para Child Spans. En esta tabla, `e` representa el evento que proviene del origen de telemetría.

**Mapeo de los eventos \$1RuntimeDone**


| OpenTelemetry | Esquema de la API de telemetría de Lambda | 
| --- | --- | 
|  `Span.Name`  |  Su extensión genera el valor en función del campo `type`.  | 
|  `Span.StartTime`  |  Utilice `e.time` desde el evento coincidente `*Start`. Para otras opciones, consulte `e.time - e.metrics.durationMs`.  | 
|  `Span.EndTime`  |  N/D, porque el evento aún no se ha completado.  | 
|  `Span.Kind`  |  Establezca en `Server`.  | 
|  `Span.Status`  |  S i`e.status` no es igual a `success`, entonces configúrelo en `Error`. De lo contrario, establézcala en `Ok`.  | 
|  `Span.TraceId`  |  Analice el encabezado AWS X-Ray que se encuentra en `e.tracing.value` y, a continuación, use el valor `TraceId`.  | 
|  `Span.ParentId`  |  Analice el encabezado X-Ray que se encuentra en `e.tracing.value` y, a continuación, use el valor `Parent`.  | 
|  `Span.SpanId`  |  Use el mismo `SpanId` del evento `*Start`. Si no está disponible, entonces utilice `e.tracing.spanId` o genere un nuevo `SpanId`.  | 
|  `Span.SpanContext.TraceState`  |  N/D para un contexto de seguimiento de X-Ray.  | 
|  `Span.SpanContext.TraceFlags`  |  Analice el encabezado X-Ray que se encuentra en `e.tracing.value` y, a continuación, use el valor `Sampled`.  | 
|  `Span.Attributes`  |  Su extensión puede agregar aquí cualquier valor personalizado.  | 
|  `ChildSpan[i].Name`  |  Utilice `e.spans[i].name`.  | 
|  `ChildSpan[i].StartTime`  |  Utilice `e.spans[i].start`.  | 
|  `ChildSpan[i].EndTime`  |  Utilice `e.spans[i].start + e.spans[i].durations`.  | 
|  `ChildSpan[i].Kind`  |  Igual que el `Span.Kind` principal.  | 
|  `ChildSpan[i].Status`  |  Igual que el `Span.Status` principal.  | 
|  `ChildSpan[i].TraceId`  |  Igual que el `Span.TraceId` principal.  | 
|  `ChildSpan[i].ParentId`  |  Utilice el `Span.SpanId` principal.  | 
|  `ChildSpan[i].SpanId`  |  Genere una nueva `SpanId`.  | 
|  `ChildSpan[i].SpanContext.TraceState`  |  N/D para un contexto de seguimiento de X-Ray.  | 
|  `ChildSpan[i].SpanContext.TraceFlags`  |  Igual que el `Span.SpanContext.TraceFlags` principal.  | 