

# 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 \*Start**


| 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 \*RuntimeDone**


| 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`.<br />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`.<br />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 \*Report**


| 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`.<br />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 \*RuntimeDone**


| 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`.<br />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`.<br />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. | 