Lambda Telemetry API Event 객체를 OpenTelemetry Span으로 변환

Lambda Telemetry API Event 객체를 OpenTelemetry Span으로 변환

AWS Lambda Telemetry API 스키마는 OpenTelemetry(OTel)와 의미적으로 호환됩니다. 즉 AWS Lambda Telemetry API Event 객체를 OpenTelemetry(OTel) Span으로 변환할 수 있습니다. 변환할 때 단일 Event 객체를 단일 OTel Span에 매핑해서는 안 됩니다.

출처: AWS Lambda 개발자 안내서

본문

대신 수명주기 단계와 관련된 세 가지 이벤트를 모두 단일 OTel Span으로 나타내야 합니다. 예를 들어 start, runtimeDone, runtimeReport 이벤트는 단일 함수 호출을 나타냅니다. 이 세 이벤트를 모두 단일 OTel Span으로 제시하세요.

Span Events 또는 Child(중첩) Spans로 이벤트를 변환할 수 있습니다. 이 페이지의 표는 두 접근 방식 모두에 대해 Telemetry API 스키마 속성과 OTel Span 속성 사이의 매핑을 설명합니다. OTel Span에 대한 자세한 내용은 OpenTelemetry Docs 웹사이트의 Tracing API 페이지에서 'Span'을 참고하세요.

  • Span Events로 OTel Span에 매핑
  • Child Spans로 OTel Span에 매핑

Span Events로 OTel Span에 매핑

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

*Report 이벤트 매핑

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

Child Spans로 OTel Span에 매핑

다음 표는 *RuntimeDone Span에 대한 Child(중첩) Spans로 Lambda Telemetry API 이벤트를 변환하는 방법을 설명합니다. *Start 및 *Report 매핑은 Child Spans에도 동일하므로 'Span Events로 OTel Span에 매핑'의 표를 참고하세요. 이 표에서 e는 텔레메트리 소스에서 오는 이벤트를 나타냅니다.

*RuntimeDone 이벤트 매핑

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와 같습니다.

더 알아보기 (Learn more)