

# 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`는 텔레메트리 소스에서 발생하는 이벤트를 나타냅니다.

**\$1Start 이벤트 매핑**


| 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`  |  확장은 여기에 사용자 지정 값을 추가할 수 있습니다.  | 

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


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

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


| OpenTelemetry | Lambda Telemetry 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 트레이스 컨텍스트의 경우 해당 사항이 없습니다.  | 
|  `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`는 텔레메트리 소스에서 발생하는 이벤트를 나타냅니다.

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


| OpenTelemetry | Lambda Telemetry API 스키마 | 
| --- | --- | 
|  `Span.Name`  |  확장은 `type` 필드를 기반으로 값을 생성합니다.  | 
|  `Span.StartTime`  |  일치하는 `*Start` 이벤트의 `e.time`을 사용합니다. 또는 `e.time - e.metrics.durationMs`를 사용합니다.  | 
|  `Span.EndTime`  |  이벤트가 아직 완료되지 않았으므로 해당 사항이 없습니다.  | 
|  `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 트레이스 컨텍스트의 경우 해당 사항이 없습니다.  | 
|  `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`와 동일합니다.  | 