

# Lambda Telemetry 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 Telemetry API 스키마 | 
| --- | --- | 
| `Span.Name` | 확장은 `type` 필드를 기반으로 이 값을 생성합니다. | 
| `Span.StartTime` | `e.time`를 사용합니다. | 
| `Span.EndTime` | 이벤트가 아직 완료되지 않았으므로 해당 사항이 없습니다. | 
| `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 트레이스 컨텍스트의 경우 해당 사항이 없습니다. | 
| `Span.SpanContext.TraceFlags` | `e.tracing.value`에 있는 X-Ray 헤더를 구문 분석한 다음 `Sampled` 값을 사용합니다. | 
| `Span.Attributes` | 확장은 여기에 사용자 지정 값을 추가할 수 있습니다. | 

**\*RuntimeDone 이벤트 매핑**


| OpenTelemetry | Lambda Telemetry API 스키마 | 
| --- | --- | 
| `Span.Name` | 확장은 `type` 필드를 기반으로 값을 생성합니다. | 
| `Span.StartTime` | 일치하는 `*Start` 이벤트의 `e.time`을 사용합니다.<br />또는 `e.time - e.metrics.durationMs`를 사용합니다. | 
| `Span.EndTime` | 이벤트가 아직 완료되지 않았으므로 해당 사항이 없습니다. | 
| `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` | `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 트레이스 컨텍스트의 경우 해당 사항이 없습니다. | 
| `Span.SpanContext.TraceFlags` | `e.tracing.value`에 있는 X-Ray 헤더를 구문 분석한 다음 `Sampled` 값을 사용합니다. | 
| `Span.Attributes` | 확장은 여기에 사용자 지정 값을 추가할 수 있습니다. | 

**\*Report 이벤트 매핑**


| OpenTelemetry | Lambda Telemetry 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` | `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 트레이스 컨텍스트의 경우 해당 사항이 없습니다. | 
| `Span.SpanContext.TraceFlags` | `e.tracing.value`에 있는 X-Ray 헤더를 구문 분석한 다음 `Sampled` 값을 사용합니다. | 
| `Span.Attributes` | 확장은 여기에 사용자 지정 값을 추가할 수 있습니다. | 

## OTel 범위를 하위 범위에 매핑
<a name="telemetry-otel-child-spans"></a>

다음 표에서는 Lambda Telemetry API 이벤트를 `*RuntimeDone` 범위의 하위(중첩) 범위가 포함된 OTel 범위로 변환하는 방법을 설명합니다. `*Start` 및 `*Report` 매핑의 경우 하위 범위와 동일하므로 [OTel 범위를 범위 이벤트에 매핑](#telemetry-otel-span-events)의 테이블을 참조하세요. 이 표에서 `e`는 텔레메트리 소스에서 발생하는 이벤트를 나타냅니다.

**\*RuntimeDone 이벤트 매핑**


| OpenTelemetry | Lambda Telemetry API 스키마 | 
| --- | --- | 
| `Span.Name` | 확장은 `type` 필드를 기반으로 값을 생성합니다. | 
| `Span.StartTime` | 일치하는 `*Start` 이벤트의 `e.time`을 사용합니다.<br />또는 `e.time - e.metrics.durationMs`를 사용합니다. | 
| `Span.EndTime` | 이벤트가 아직 완료되지 않았으므로 해당 사항이 없습니다. | 
| `Span.Kind` | `Server`로 설정합니다. | 
| `Span.Status` | `e.status`가 `success`와 같지 않으면 `Error`로 설정합니다.<br />그렇지 않으면 `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 트레이스 컨텍스트의 경우 해당 사항이 없습니다. | 
| `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 트레이스 컨텍스트의 경우 해당 사항이 없습니다. | 
| `ChildSpan[i].SpanContext.TraceFlags` | 상위 `Span.SpanContext.TraceFlags`와 동일합니다. | 