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 패키지와 그 의존성을 로컬에서 함수 프로젝트 폴더에 설치합니다.
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을 직접 사용할 수 있습니다. 여기서는 주로 수동 빌드 방식을 소개합니다:
- 소스 다운로드
- 빌드
빌드 전에 관련 aws 도구를 먼저 설치해야 합니다. 저장소 README를 참고할 수 있습니다. 필요한 도구가 이미 설치되어 있다고 가정하면, 아래 작업으로 빌드합니다:
빌드 로그의 일부는 다음과 같습니다:
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
- 테스트
테스트 버튼을 클릭해 테스트한 뒤, 성공하면 플랫폼에 로그인하여 트레이싱 데이터를 확인할 수 있습니다