

# Conversão de objetos `Event` da API de Telemetria do Lambda em spans do OpenTelemetry
<a name="telemetry-otel-spans"></a>

O esquema da API de telemetria do AWS Lambda é semanticamente compatível com o OpenTelemetry (OTel). Isso significa que é possível converter os objetos `Event` da API de telemetria do AWS Lambda em spans do OpenTelemetry (OTel). Ao converter, você não deve mapear um único objeto `Event` para um único span do OTel. Em vez disso, você deve apresentar todos os três eventos relacionados a uma fase do ciclo de vida em um único span do OTel. Por exemplo, os eventos `start`, `runtimeDone` e `runtimeReport` representam uma única invocação de função. Apresente todos esses três eventos como um único span do OTel.

É possível converter seus eventos usando “Span Events” (Eventos de span) ou “Child Spans” (aninhado) (Spans secundários). As tabelas nesta página descrevem os mapeamentos entre as propriedades do esquema da API de telemetria e as propriedades do span do OTel para ambas as abordagens. Para obter mais informações sobre os spans do OTel, consulte [Span](https://opentelemetry.io/docs/reference/specification/trace/api/#span) na página **Tracing API** (API de rastreamento) do site OpenTelemetry Docs.

**Topics**
+ [Mapeamento para spans do OTel com “Span Events” (Eventos de span)](#telemetry-otel-span-events)
+ [Mapeamento para spans do OTel com “Child Spans” (Spans secundários)](#telemetry-otel-child-spans)

## Mapeamento para spans do OTel com “Span Events” (Eventos de span)
<a name="telemetry-otel-span-events"></a>

Nas tabelas a seguir, `e` representa o evento proveniente da fonte de telemetria.

**Mapeando os eventos \$1Start**


| OpenTelemetry | Esquema da API de Telemetria do Lambda | 
| --- | --- | 
|  `Span.Name`  |  Sua extensão gera esse valor com base no campo `type`.  | 
|  `Span.StartTime`  |  Use `e.time`.  | 
|  `Span.EndTime`  |  N/A, porque o evento ainda não foi concluído.  | 
|  `Span.Kind`  |  Definir como `Server`.  | 
|  `Span.Status`  |  Definir como `Unset`.  | 
|  `Span.TraceId`  |  Analise o cabeçalho do AWS X-Ray encontrado em `e.tracing.value` e, em seguida, use o valor `TraceId`.  | 
|  `Span.ParentId`  |  Analise o cabeçalho do X-Ray encontrado em `e.tracing.value` e, em seguida, use o valor `Parent`.  | 
|  `Span.SpanId`  |  Use `e.tracing.spanId`, se disponível. Caso contrário, gere um novo `SpanId`.  | 
|  `Span.SpanContext.TraceState`  |  N/A para um contexto de rastreamento do X-Ray.  | 
|  `Span.SpanContext.TraceFlags`  |  Analise o cabeçalho do X-Ray encontrado em `e.tracing.value` e, em seguida, use o valor `Sampled`.  | 
|  `Span.Attributes`  |  Sua extensão pode adicionar quaisquer valores personalizados aqui.  | 

**Mapeando os eventos \$1RuntimeDone**


| OpenTelemetry | Esquema da API de Telemetria do Lambda | 
| --- | --- | 
|  `Span.Name`  |  Sua extensão gera o valor com base no campo `type`.  | 
|  `Span.StartTime`  |  Use `e.time` a partir do evento `*Start` correspondente. Como alternativa, use `e.time - e.metrics.durationMs`.  | 
|  `Span.EndTime`  |  N/A, porque o evento ainda não foi concluído.  | 
|  `Span.Kind`  |  Definir como `Server`.  | 
|  `Span.Status`  |  Se `e.status` não for igual a `success`, defina como `Error`. Caso contrário, defina como `Ok`.  | 
|  `Span.Events[]`  |  Use `e.spans[]`.  | 
|  `Span.Events[i].Name`  |  Use `e.spans[i].name`.  | 
|  `Span.Events[i].Time`  |  Use `e.spans[i].start`.  | 
|  `Span.TraceId`  |  Analise o cabeçalho do AWS X-Ray encontrado em `e.tracing.value` e, em seguida, use o valor `TraceId`.  | 
|  `Span.ParentId`  |  Analise o cabeçalho do X-Ray encontrado em `e.tracing.value` e, em seguida, use o valor `Parent`.  | 
|  `Span.SpanId`  |  Use o mesmo `SpanId` do evento `*Start`. Se não estiver disponível, use `e.tracing.spanId` ou gere um novo `SpanId`.  | 
|  `Span.SpanContext.TraceState`  |  N/A para um contexto de rastreamento do X-Ray.  | 
|  `Span.SpanContext.TraceFlags`  |  Analise o cabeçalho do X-Ray encontrado em `e.tracing.value` e, em seguida, use o valor `Sampled`.  | 
|  `Span.Attributes`  |  Sua extensão pode adicionar quaisquer valores personalizados aqui.  | 

**Mapeando os eventos \$1Report events**


| OpenTelemetry | Esquema da API de Telemetria do Lambda | 
| --- | --- | 
|  `Span.Name`  |  Sua extensão gera o valor com base no campo `type`.  | 
|  `Span.StartTime`  |  Use `e.time` a partir do evento `*Start` correspondente. Como alternativa, use `e.time - e.metrics.durationMs`.  | 
|  `Span.EndTime`  |  Use `e.time`.  | 
|  `Span.Kind`  |  Definir como `Server`.  | 
|  `Span.Status`  |  Use o mesmo valor do evento `*RuntimeDone`.  | 
|  `Span.TraceId`  |  Analise o cabeçalho do AWS X-Ray encontrado em `e.tracing.value` e, em seguida, use o valor `TraceId`.  | 
|  `Span.ParentId`  |  Analise o cabeçalho do X-Ray encontrado em `e.tracing.value` e, em seguida, use o valor `Parent`.  | 
|  `Span.SpanId`  |  Use o mesmo `SpanId` do evento `*Start`. Se não estiver disponível, use `e.tracing.spanId` ou gere um novo `SpanId`.  | 
|  `Span.SpanContext.TraceState`  |  N/A para um contexto de rastreamento do X-Ray.  | 
|  `Span.SpanContext.TraceFlags`  |  Analise o cabeçalho do X-Ray encontrado em `e.tracing.value` e, em seguida, use o valor `Sampled`.  | 
|  `Span.Attributes`  |  Sua extensão pode adicionar quaisquer valores personalizados aqui.  | 

## Mapeamento para spans do OTel com “Child Spans” (Spans secundários)
<a name="telemetry-otel-child-spans"></a>

A tabela a seguir descreve como converter eventos da API de Telemetria do Lambda em spans do OTel com “Child Spans” (aninhado) (Spans secundários) para spans `*RuntimeDone`. Para mapeamentos `*Start` e `*Report`, consulte as tabelas em [Mapeamento para spans do OTel com “Span Events” (Eventos de span)](#telemetry-otel-span-events), pois elas são semelhantes para “Child Spans” (Spans secundários). Nesta tabela, `e` representa o evento proveniente da fonte de telemetria.

**Mapeando os eventos \$1RuntimeDone**


| OpenTelemetry | Esquema da API de Telemetria do Lambda | 
| --- | --- | 
|  `Span.Name`  |  Sua extensão gera o valor com base no campo `type`.  | 
|  `Span.StartTime`  |  Use `e.time` a partir do evento `*Start` correspondente. Como alternativa, use `e.time - e.metrics.durationMs`.  | 
|  `Span.EndTime`  |  N/A, porque o evento ainda não foi concluído.  | 
|  `Span.Kind`  |  Definir como `Server`.  | 
|  `Span.Status`  |  Se `e.status` não for igual a `success`, defina como `Error`. Caso contrário, defina como `Ok`.  | 
|  `Span.TraceId`  |  Analise o cabeçalho do AWS X-Ray encontrado em `e.tracing.value` e, em seguida, use o valor `TraceId`.  | 
|  `Span.ParentId`  |  Analise o cabeçalho do X-Ray encontrado em `e.tracing.value` e, em seguida, use o valor `Parent`.  | 
|  `Span.SpanId`  |  Use o mesmo `SpanId` do evento `*Start`. Se não estiver disponível, use `e.tracing.spanId` ou gere um novo `SpanId`.  | 
|  `Span.SpanContext.TraceState`  |  N/A para um contexto de rastreamento do X-Ray.  | 
|  `Span.SpanContext.TraceFlags`  |  Analise o cabeçalho do X-Ray encontrado em `e.tracing.value` e, em seguida, use o valor `Sampled`.  | 
|  `Span.Attributes`  |  Sua extensão pode adicionar quaisquer valores personalizados aqui.  | 
|  `ChildSpan[i].Name`  |  Use `e.spans[i].name`.  | 
|  `ChildSpan[i].StartTime`  |  Use `e.spans[i].start`.  | 
|  `ChildSpan[i].EndTime`  |  Use `e.spans[i].start + e.spans[i].durations`.  | 
|  `ChildSpan[i].Kind`  |  Semelhante ao principal `Span.Kind`.  | 
|  `ChildSpan[i].Status`  |  Semelhante ao principal `Span.Status`.  | 
|  `ChildSpan[i].TraceId`  |  Semelhante ao principal `Span.TraceId`.  | 
|  `ChildSpan[i].ParentId`  |  Use o principal `Span.SpanId`.  | 
|  `ChildSpan[i].SpanId`  |  Gere um novo `SpanId`.  | 
|  `ChildSpan[i].SpanContext.TraceState`  |  N/A para um contexto de rastreamento do X-Ray.  | 
|  `ChildSpan[i].SpanContext.TraceFlags`  |  Semelhante ao principal `Span.SpanContext.TraceFlags`.  | 