- 필수 기능
- 시작하기
- Glossary
- 표준 속성
- Guides
- Agent
- 통합
- 개방형텔레메트리
- 개발자
- API
- Datadog Mobile App
- CoScreen
- Cloudcraft
- 앱 내
- 서비스 관리
- 인프라스트럭처
- 애플리케이션 성능
- APM
- Continuous Profiler
- 스팬 시각화
- 데이터 스트림 모니터링
- 데이터 작업 모니터링
- 디지털 경험
- 소프트웨어 제공
- 보안
- AI Observability
- 로그 관리
- 관리
Datadog는 AWS SAM을 사용하여 서버리스 애플리케이션을 배포하는 고객에게 서버리스 CloudFormation 매크로를 권장합니다.
매크로는 다음과 같은 방법으로 서버리스 애플리케이션에서 메트릭, 트레이스 및 로그 수집을 자동으로 설정합니다:
Datadog 서버리스 매크로를 AWS 계정에서 사용하려면 Datadog에서 제공하는 템플릿을 사용하여 CloudFormation 스택을 배포합니다. 이 배포에는 CloudFormation 매크로 리소스 및 매크로가 실행될 때 호출되는 람다 함수가 포함됩니다. 이 스택을 배포하면 동일한 계정에 배포된 다른 CloudFormation 스택에서 매크로를 사용할 수 있습니다. 계정에서 매크로를 정의하는 방법에 대한 자세한 내용은 CloudFormation 설명서 페이지를 참조하세요.
참고: Datadog 서버리스 매크로는 변환할 스택이 포함된 각 영역에 한 번씩 생성해야 합니다.
위의 Launch Stack
템플릿 링크를 사용하여 AWS 계정에서 Datadog 서버리스 매크로 스택을 만듭니다.
처음 설치하는 경우 다음과 함께 배포합니다:
aws cloudformation create-stack \
--stack-name datadog-serverless-macro \
--template-url https://datadog-cloudformation-template.s3.amazonaws.com/aws/serverless-macro/latest.yml \
--capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_IAM
SAM을 사용하여 서버리스 애플리케이션을 배포하려면 필요한 SAM 변환 후 template.yml
파일의 Transform
섹션 아래에 Datadog 서버리스 CloudFormation 매크로를 추가합니다. 또한 Datadog 소스 코드 통합을 활성화하려면 DDGitData
파라미터를 추가하고 매크로에 전달합니다:
Transform:
- AWS::Serverless-2016-10-31
- Name: DatadogServerless
Parameters:
stackName: !Ref "AWS::StackName"
apiKey: "<DATADOG_API_KEY>"
pythonLayerVersion: "<LAYER_VERSION>" # Use appropriate parameter for other runtimes
extensionLayerVersion: "<LAYER_VERSION>"
service: "<SERVICE>" # Optional
env: "<ENV>" # Optional
version: "<VERSION>" # Optional
tags: "<TAGS>" # Optional
# Pass DDGitData here to enable Source Code Integration tagging
gitData: !Ref DDGitData
# For additional parameters, see the Configuration section
Parameters:
DDGitData:
Type: String
Default: ""
Description: "The output of $(git rev-parse HEAD),$(git config --get remote.origin.url). Used for Datadog Source Code Integration tagging"
Datadog의 소스 코드 통합에 대한 DDGitData
파라미터를 설정하려면 SAM의 --parameter-overrides
옵션을 사용합니다:
sam deploy --parameter-overrides DDGitData="$(git rev-parse HEAD),$(git config --get remote.origin.url)"
참고: 매크로를 설치할 때 제공된 template.yml
파일을 수정하지 않은 경우 계정에 정의된 매크로의 이름은 DatadogServerless
입니다. 원본 템플릿을 수정한 경우 여기에 추가하는 변환의 이름이 AWS::CloudFormation::Macro
리소스의 Name
속성과 일치하는지 확인합니다.
참고: 일부 설정을 한 번만 지정하려는 경우 template.yml
를 수정하고 해당 영역에 설정할 환경 변수를 추가할 수 있습니다. 이것은 추가 기본값을 제어하는 방법입니다. 아래 예시에서는 DD_API_KEY_SECRET_ARN
및 DD_ENV
를 설정하고, 이를 매크로가 기본값으로 처리합니다:
리소스:
MacroFunction:
유형: AWS::서버리스::기능/함수
DependsOn: MacroFunctionZip
속성:
FunctionName:
Fn::If:
- SetFunctionName
- 참조: 함수 이름
- 참조: AWS::NoValue
설명: 프로세스 Lambda용 Datadog Lambda 레이어를 설치하기 위한 CloudFormation 템플릿 기능/함수.
핸들러: src/index.handler
...
환경:
변수:
DD_API_KEY_SECRET_ARN: "arn:AWS:secretsmanager:us-west-2:123456789012:secret:DdApiKeySecret-e1v5Yn7TvIPc-d1Qc4E"
DD_ENV: "dev"
새 릴리스 후 매크로를 업데이트하는 경우 다음 update-stack
방법을 사용합니다:
aws cloudformation update-stack \
--stack-name datadog-serverless-macro \
--template-url https://datadog-cloudformation-template.s3.amazonaws.com/aws/serverless-macro/latest.yml \
--capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_IAM
또한 0.1.2.yml
와 같이 릴리스 버전을 latest.yml
로 대체함으로써 최신 릴리스에서 매크로 버전을 지정할 수도 있습니다.
플러그인을 추가로 설정하려면 다음 커스텀 파라미터를 사용합니다:
매개 변수 | 설명 |
---|---|
addLayers | 람다 레이어를 추가할지 또는 사용자가 자신의 레이어를 가져올 것으로 예상할지 여부입니다. 기본값은 true입니다. true인 경우 람다 라이브러리 버전 변수도 필요합니다. false인 경우 기능/함수의 배포 패키지에 Datadog 람다 라이브러리를 포함해야 합니다. |
pythonLayerVersion | 설치할 파이썬(Python) 람다 레이어의 버전입니다 (예: 21). 파이썬(Python)으로 작성된 하나 이상의 람다 함수를 배포하는 경우 필수이며, addLayers 는 true입니다. https://github.com/DataDog/datadog-lambda-python/releases에서 최신 버전 번호를 확인하세요. |
nodeLayerVersion | 설치할 Node.js 람다 레이어의 버전입니다 (예: 29). Node.js로 작성된 하나 이상의 람다 함수를 배포할 경우 필수이며, addLayers 가 true입니다. https://github.com/DataDog/datadog-lambda-js/releases에서 최신 버전 번호를 확인하세요. |
dotnetLayerVersion | 설치할 .NET 람다 계층의 버전(예: “14”). .NET으로 작성된 하나 이상의 람다 함수를 배포하고 addLayers 가 참인 경우 필요합니다. https://github.com/DataDog/dd-trace-dotnet-aws-lambda-layer/releases에서 최신 버전 번호를 찾으세요. |
javaLayerVersion | 설치할 자바(Java) 람다 계층의 버전(예: “12”)입니다. 자바(Java)로 작성된 하나 이상의 람다 함수를 배포하는 경우 필요하며 addLayers 는 참입니다. 최신 버전 번호는 https://github.com/DataDog/datadog-lambda-java/releases에서 확인하세요. |
extensionLayerVersion | 설치할 Datadog 람다 확장 레이어의 버전입니다. (예: 5) extensionLayerVersion 가 설정된 경우, apiKey (또는 암호화된 경우 apiKMSKey 또는 apiKeySecretArn )도 설정해야 합니다. extensionLayerVersion 를 사용하는 동안 forwarderArn 을 설정하지 마세요. 람다 확장에 대한 자세한 정보는 여기에서 확인하세요. |
forwarderArn | 설정하면 플러그인이 함수의 로그 그룹을 Datadog 포워더(Forwarder)에 자동으로 등록합니다. 또는 AWS::Logs::SubscriptionFilter 리소스를 사용하여 로그 구독을 정의할 수 있습니다. 참고: 매크로가 로그 그룹 및 구독 필터를 생성하려면 함수 이름이 필요하므로 처음 배포되는 함수에 대해 ‘FunctionName’ 속성을 정의해야 합니다. ‘FunctionName’에는 !Sub 과 같은 CloudFormation 함수를 포함할 수 없습니다. |
stackName | 배포 중인 CloudFormation 스택의 이름입니다. forwarderArn 가 제공되고 람다 함수의 이름이 동적으로 지정된 경우에만 필요합니다 (람다에 대한 FunctionName 속성이 제공되지 않은 경우). SAM 및 CDK에 이 파라미터를 추가하는 방법은 아래 예시를 참조하세요. |
flushMetricsToLogs | Datadog 포워더 람다 함수가 있는 로그를 통해 커스텀 메트릭을 전송합니다 (권장 사항). 기본값은 true 입니다. false 로 설정하면 apiKey (암호화된 경우에는 apiKMSKey 또는 apiKeySecretArn )를 사용하여 Datadog API 키를 정의해야 합니다. |
site | 데이터를 전송할 Datadog 사이트를 설정합니다(flushMetricsToLogs가 false 일 때만 필요). 가능한 값은 datadoghq.com , datadoghq.eu , us3.datadoghq.com , us5.datadoghq.com , ap1.datadoghq.com , ddog-gov.com 입니다. 기본값은 datadoghq.com 입니다. |
apiKey | flushMetricsToLogs 이 false 로 설정된 경우에만 Datadog API 키가 필요합니다. |
apiKeySecretArn | AWS 비밀 관리자에서 Datadog API 키를 저장하는 암호의 ARN입니다. flushMetricsToLogs 가 false 일 경우 또는 extensionLayer 가 설정된 경우 apiKey 대신 이 파라미터를 사용합니다. 람다 실행 역할에는secretsmanager:GetSecretValue 권한을 추가해야합니다. |
apiKMSKey | KMS를 사용하여 암호화된 Datadog API 키입니다. flushMetricsToLogs 가 false이면서 KMS 암호화를 사용하고 있는 경우 apiKey 대신 이 파라미터를 사용합니다. |
enableEnhancedMetrics | 람다 함수에 대해 향상된 메트릭을 활성화합니다. 기본값은 true 입니다. Datadog 포워더 람다 함수는 함수 로그 그룹을 구독해야 합니다. |
enableXrayTracing | 람다 함수에 대한 추적을 활성화합니다. 기본값은 false입니다. |
enableDDTracing | Datadog의 애플리케이션 성능 모니터링(APM) 라이브러리인 dd-trace를 사용하여 람다 함수에 대한 추적을 활성화합니다. 기본값은 true 입니다. Datadog 포워더 람다 함수는 함수 로그 그룹을 구독해야 합니다. |
enableDDLogs | 람다 함수에 대해 Datadog 로그 수집을 활성화합니다. 참고: 이 설정은 Datadog 포워더를 통해 전송되는 로그에는 적용되지 않습니다. 기본값은 true입니다. |
service | extensionLayerVersion 와 함께 설정하면 매크로가 제공된 값으로 모든 람다 함수에 DD_SERVICE 환경 변수를 추가합니다. forwarderArn 와 함께 설정하면 매크로가 제공된 값으로 모든 람다 함수에 service 태그를 추가합니다. |
env | extensionLayerVersion 와 함께 설정하면 매크로가 제공된 값으로 모든 람다 함수에 DD_ENV 환경 변수를 추가합니다. forwarderArn 와 함께 설정하면 매크로가 제공된 값으로 모든 람다 함수에 env 태그를 추가합니다. |
version | extensionLayerVersion 와 함께 설정하면 매크로가 제공된 값으로 모든 람다 함수에 DD_VERSION 환경 변수를 추가합니다. forwarderArn 와 함께 설정하면 매크로가 제공된 값으로 모든 람다 함수에 version 태그를 추가합니다. |
tags | 쉼표로 구분된 목록 키: 값 쌍을 하나의 문자열로 만듭니다. extensionLayerVersion 와 함께 설정하면 DD_TAGS 환경 변수가 제공된 값으로 모든 람다 함수에 추가됩니다. forwarderArn 와 함께 설정하면 매크로가 문자열을 파싱하여 모든 람다 함수에서 각 키:값 쌍을 태그로 설정합니다. |
logLevel | 로그 레벨을 설정합니다. 확장 로깅의 경우 DEBUG 로 설정합니다. |
captureLambdaPayload | 요청 및 응답 페이로드가 있는 함수 실행 범위에 자동으로 태그를 지정하여 APM 애플리케이션에 표시할 수 있습니다. |
enableColdStartTracing | 콜드 스타트 추적을 비활성화하려면 false 로 설정합니다. NodeJS 및 파이썬(Python)에서 사용됩니다. 기본값은 true 입니다. |
coldStartTraceMinDuration | 콜드 스타트 추적을 통해 추적할 모듈 로드 이벤트의 최소 지속 시간 (밀리초)을 설정합니다. 번호. 기본값은3 입니다. |
coldStartTraceSkipLibs | (선택 사항) 쉼표로 구분된 라이브러리 목록에 대한 콜드 스타트 스팬 생성을 건너뛸 수 있습니다. 깊이를 제한하거나 알려진 라이브러리를 건너뛸 때 유용합니다. 기본값은 런타임에 따라 다릅니다. |
enableProfiling | true 로 설정해 Datadog Continuous Profiler를 활성화합니다. NodeJS 및 파이썬(Python)용은 베타 버전에서 지원됩니다. 기본값은 false 입니다. |
encodeAuthorizerContext | 람다 인증자에 대해 true 로 설정하면 추적 컨텍스트가 전파를 위해 응답으로 인코딩됩니다. NodeJS 및 파이썬(Python)에서 지원됩니다. 기본값은 true 입니다. |
decodeAuthorizerContext | 람다 인증자를 통해 인증된 람다에 대해 true 로 설정하면 인코딩된 추적 컨텍스트를 구문 분석하여 사용합니다 (있는 경우). NodeJS 및 파이썬(Python)에서 지원됩니다. 기본값은 true 입니다. |
apmFlushDeadline | 시간 초과가 발생하기 전에 스팬을 제출할 시점을 밀리초 단위로 결정하는 데 사용됩니다. AWS 람다 호출의 남은 시간이 설정된 값보다 작으면 추적기는 현재 활성 스팬과 완료된 모든 스팬을 제출하려고 시도합니다. NodeJS 및 파이썬(Python)에서 지원됩니다. 기본값은 100 밀리초입니다. |
이 매크로는 Node.js, 파이썬(Python), .NET, 자바(Java)에 대한 람다 레이어를 함수에 첨부하여 Datadog 람다 라이브러리를 설치하도록 CloudFormation 템플릿을 수정합니다. 필요한 코드 변경 없이 람다 라이브러리를 초기화하는 대체 핸들러로 리디렉션됩니다.
문제를 디버깅하는 데 도움이 되도록 매크로 람다 함수에 대한 CloudWatch 로그를 살펴볼 수 있습니다. CloudWatch 로그를 찾으려면 다음과 같이 하세요:
datadog-serverless-macro
이름 지정).MacroFunctionLogGroup
와 함께 사용할 수 있습니다이 오류는 forwarderArn
를 제공하고 람다 함수를 처음 배포할 때 발생하므로 로그 그룹이 존재하지 않으며 매크로가 이 로그 그룹을 만들거나 포워더를 구독할 수 없습니다. 이 문제를 해결하기 위해 람다에 FunctionName
속성을 명시적으로 정의하세요 (아래 예시 참조).
Resources:
MyLambda:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
Runtime: nodejs12.x
FunctionName: MyFunctionName # Add this property to your Lambdas
FunctionName
를 명시적으로 정의할 수 없거나 (원하지 않는 경우) SAM 템플릿 또는 CDK 소스 코드에서 forwarderArn
파라미터를 제거한 후 아래와 같이 AWS::Logs::SubscriptionFilter 리소스를 사용하여 구독 필터를 정의합니다.
Resources:
MyLogSubscriptionFilter:
Type: "AWS::Logs::SubscriptionFilter"
Properties:
DestinationArn: "<DATADOG_FORWARDER_ARN>"
LogGroupName: "<CLOUDWATCH_LOG_GROUP_NAME>"
FilterPattern: ""
!Sub
와 같이 FunctionName
가 CloudFormation 함수를 포함한 경우에는 forwarderArn
옵션이 작동하지 않습니다. 이 경우 매크로는 실제 함수 이름에 액세스할 수 없습니다 (CloudFormation은 변환 후 함수를 실행합니다). 따라서 함수에 대한 로그 그룹 및 구독 필터를 생성할 수 없습니다.
SAM 템플릿 또는 CDK 소스 코드에서 forwarderArn
파라미터를 제거하고 아래와 같이 AWS::Logs::SubscriptionFilter 리소스를 사용하여 구독 필터를 정의합니다.
Resources:
MyLogSubscriptionFilter:
Type: "AWS::Logs::SubscriptionFilter"
Properties:
DestinationArn: "<DATADOG_FORWARDER_ARN>"
LogGroupName: "<CLOUDWATCH_LOG_GROUP_NAME>"
FilterPattern: ""
이 오류는 명령을 실행하는 IAM 사용자에게 lambda:InvokeFunction
권한이 없는 경우 발생할 수 있습니다. 사용자의 IAM 역할에 권한을 추가합니다.
제품 피드백 및 질문이 있는 경우 슬랙의 Datadog 커뮤니티의 #serverless
채널에 가입하세요.