콘텐츠로 이동

AWS Lambda Tracing

설정

현재 AWS Lambda는 다음 두 가지 방식으로 트레이싱 정보를 연동할 수 있습니다:

  • DDTrace
  • Opentelemetry

DDTrace 연동

Lambda Layer 준비

다음 두 개의 Layer를 추가해야 합니다:

  • DataDog Layer: 트레이싱 인스트루먼테이션용
  • DataKit Layer: DataDog Layer의 관측 데이터를 수신용

DataKit Layer 추가

참고: AWS Lambda 확장 > DataKit Layer 추가

DataDog Layer 추가

  • AWS 글로벌 리전

적절한 ARN을 선택하세요:

# Use this format for x86-based Lambda deployed in AWS commercial regions
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:118

# Use this format for arm64-based Lambda deployed in AWS commercial regions
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>-ARM:118

# Use this format for x86-based Lambda deployed in AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:118

# Use this format for arm64-based Lambda deployed in AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>-ARM:118

<AWS_REGION>을 유효한 AWS 리전으로 바꾸세요. 예를 들어 us-east-1입니다. 사용할 수 있는 <RUNTIME> 옵션은 Python38、Python39、Python310、Python311、Python312、Python313입니다.

  • AWS 중국 리전

Datadog은 중국 리전에서 유지 관리되는 datadog-lambda-python Layer를 제공하지 않으므로, pip를 사용해 datadog-lambda 패키지와 그 의존성을 로컬에서 함수 프로젝트 폴더에 설치합니다.

pip install datadog-lambda -t ./
주의 : datadog-lambda는 ddtrace에 의존하며, ddtrace는 네이티브 확장을 사용합니다. 따라서 올바른 아키텍처(x86_64 또는 arm64)의 Linux 환경에서 설치하고 컴파일해야 합니다.

함수의 「런타임-핸들러」를 datadog_lambda.handler.handler로 설정하세요

환경 변수 설정

  • DD_TRACE_ENABLED: 분산 추적 활성화, 기본값은 true
  • DD_LAMBDA_HANDLER: 원래 핸들러를 설정, 예: lambda_function.lambda_handler
  • DD_TRACE_AGENT_URL:http://localhost:9529
  • DD_TRACE_DEBUG:로그 출력, 기본값은 비활성화
  • ENV_DATAWAY:전송 데이터의 DataWay 주소 (token은 워크스페이스에서 가져옵니다)

설정이 완료되면 테스트를 클릭한 뒤, 플랫폼에 로그인하여 트레이싱 데이터를 확인할 수 있습니다

Opentelemetry 연동

Lambda Layer 준비

다음 두 개의 Layer를 추가해야 합니다: - Opentelemetry Layer: 트레이싱 인스트루먼테이션용 - DataKit Layer: Opentelemetry의 관측 데이터 수신용

DataKit Layer 추가

참고: AWS Lambda 확장 > DataKit Layer 추가

Opentelemetry Layer 추가

OpenTelemetry 자동 인스트루먼테이션 방식은 Python 코드에 거의 침투하지 않고 트레이싱을 구현할 수 있으며, 여기서 OpenTelemetry는 Layer로 Lambda 함수 내부에 부착할 수 있습니다.

AWS 닝샤 리전은 OpenTelemetry layer를 수동으로 빌드해야 하며, 다른 리전은 해당 arn을 직접 사용할 수 있습니다. 여기서는 주로 수동 빌드 방식을 소개합니다:

  1. 소스 다운로드
git clone https://github.com/open-telemetry/opentelemetry-lambda.git
  1. 빌드

빌드 전에 관련 aws 도구를 먼저 설치해야 합니다. 저장소 README를 참고할 수 있습니다. 필요한 도구가 이미 설치되어 있다고 가정하면, 아래 작업으로 빌드합니다:

cd python/src
./run.sh -r cn-northwest-1

빌드 로그의 일부는 다음과 같습니다:

running...
Invoked with: -r cn-northwest-1
sam building...
run.sh: Starting sam build.
Starting Build inside a container                                                                                                                               
Building layer 'OTelLayer'                                                                                                                                      
For container layer build, first compatible runtime is chosen as build target for container.                                                                    

Fetching public.ecr.aws/sam/build-python3.9:latest-x86_64 Docker container image......
Mounting /home/liurui/code/opentelemetry-lambda/python/src/otel as /tmp/samcli/source:ro,delegated, inside runtime container       


Successfully created/updated stack - otel-stack in cn-northwest-1


OTel Lambda layer ARN:
arn:aws-cn:lambda:cn-northwest-1:888888888:layer:otel-layer:2

빌드가 성공하면 AWS Layer에 otel-layer가 자동으로 업로드됩니다. 현재 arn을 복사해 두세요. 이후 작업에서 사용합니다.

환경 변수 설정

해당 함수 설정에 추가합니다

# otel lambda handler
AWS_LAMBDA_EXEC_WRAPPER = /opt/python/otel-handler
# gateway address
ENV_DATAWAY = http://open****?token=xxxxxxx
# otel reporting address, no need to adjust
OTEL_EXPORTER_OTLP_ENDPOINT = http://localhost:9529/otel
  • 테스트

테스트 버튼을 클릭해 테스트한 뒤, 성공하면 플랫폼에 로그인하여 트레이싱 데이터를 확인할 수 있습니다

문서 평가

이 페이지가 도움이 되었나요?