- 아직 설정하지 않았다면 Datadog Forwarder Lambda 함수를 설정하세요.
- AWS CLI를 사용하여 CloudWatch Logs에 함수 실행 권한을 부여합니다.- <REGION>을 Datadog Forwarder Lambda 함수가 포함된 지역으로 바꿉니다.
- <ACCOUNT_ID>를 12자리 AWS 계정 ID(대시 제외)로 바꿉니다.
 
aws lambda add-permission \
  --region "<REGION>" \
    --function-name "forwarder-function" \
    --statement-id "forwarder-function" \
    --principal "logs.amazonaws.com" \
    --action "lambda:InvokeFunction" \
    --source-arn "arn:aws:logs:<REGION>:<ACCOUNT_ID>:log-group:*" \
    --source-account "<ACCOUNT_ID>"
- 계정 수준 구독 필터 정책을 만듭니다. 아래 제공된 예제에서는 ERROR문자열이 포함된 모든 로그 이벤트가 스트리밍되지만 로그 그룹에 있는LogGroupToExclude1및LogGroupToExclude2이벤트는 제외됩니다.- FORWARDER_ARN을 Datadog Forwarder Lambda 함수의 ARN으로 바꿉니다.
 
aws logs put-account-policy \
  --policy-name "ExamplePolicyLambda" \
  --policy-type "SUBSCRIPTION_FILTER_POLICY" \
  --policy-document '{"DestinationArn":"<FORWARDER_ARN>", "FilterPattern": "", "Distribution": "Random"}' \
  --scope "ALL"
참고: 특정 로그 그룹을 로그 전달에서 제외하려면 명령 참조에 설명된 대로 --selection-criteria 옵션을 사용하세요.
Amazon Data Firehose를 위한 S3 버킷 및 역할 생성
다음 단계에서는 버킷 및 IAM 역할을 만드는 방법을 안내합니다. 이 역할은 Amazon Data Firehose에 전송 실패 시 Amazon S3 버킷에 데이터를 넣을 수 있는 권한을 부여합니다.
- AWS CLI를 사용하여 S3 버킷을 만듭니다. 선택적으로 기존 버킷을 사용할 수 있습니다.- <BUCKET_NAME>을 S3 버킷의 이름으로 바꿉니다.
- <REGION>을 S3 버킷의 리전으로 바꿉니다.
 
aws s3api create-bucket \
  --bucket MY-BUCKET \
  --create-bucket-configuration LocationConstraint=<REGION>
- 다음 구문을 사용하여 TrustPolicyForFirehose.json파일을 생성합니다.
{
  "Statement": {
    "Effect": "Allow",
    "Principal": { "Service": "firehose.amazonaws.com" },
    "Action": "sts:AssumeRole"
    } 
}
- 신뢰 정책 파일을 지정하여 IAM 역할을 생성합니다.
참고: 반환된 Role.Arn 값은 이후 단계에서 사용됩니다.
aws iam create-role \
  --role-name FirehosetoS3Role \
  --assume-role-policy-document file://./TrustPolicyForFirehose.json
- 다음 구문을 사용하여 PermissionsForFirehose.json파일을 생성합니다.- <BUCKET_NAME>을 S3 버킷의 이름으로 바꿉니다.
 
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [ 
          "s3:AbortMultipartUpload", 
          "s3:GetBucketLocation", 
          "s3:GetObject", 
          "s3:ListBucket", 
          "s3:ListBucketMultipartUploads", 
          "s3:PutObject" ],
      "Resource": [ 
          "arn:aws:s3:::<BUCKET_NAME>", 
          "arn:aws:s3:::<BUCKET_NAME>/*" ]
    }
  ]
}
- 권한 정책을 역할과 연결합니다.
aws iam put-role-policy \
  --role-name FirehosetoS3Role \
  --policy-name Permissions-Policy-For-Firehose \
  --policy-document file://./PermissionsForFirehose.json
Amazon Data Firehose 전송 스트림 생성
다음 단계에서는 Amazon Data Firehose 전송 스트림을 생성하고 구성하는 방법을 안내합니다.
- AWS 콘솔에서 Amazon Data Firehose로 이동합니다.
- Create Firehose stream을 클릭합니다.
- Source 필드에서 로그의 소스을 선택합니다.- 로그가 Kinesis 데이터 스트림에서 오는 경우 Amazon Kinesis Data Streams를 선택합니다.
- CloudWatch 로그 그룹에서 직접 로그를 가져오는 경우 Direct PUT을 선택합니다.
 
- Destination 필드에서 Datadog를 선택합니다.
- Source가 Amazon Kinesis Data Streams인 경우 *Source settings**에서 Kinesis 데이터 스트림을 선택합니다.
- 원하는 경우 Firehose 스트림에 설명이 포함된 이름을 지정합니다.
- Destination settings 섹션에서 Datadog 사이트에 해당하는 Datadog 로그 HTTP 엔드포인트 URL을 선택합니다.
- **Authentication*의 경우 유효한 Datadog API 키가 필요합니다. 둘 중 하나를 사용할 수 있습니다.- Use API key을 선택하고 API key 필드에 키의 값을 붙여넣습니다.
- Use AWS Secrets Manager을 선택하고 Secret name 드롭다운에서 유효한 Datadog API 키 값이 포함된 비밀번호를 선택합니다.
 
- Content encoding에 대해 GZIP을 선택합니다.
- 선택적으로 Retry duration, 버퍼 설정을 구성하거나 Parameters(로그에 태그로 첨부됨)를 추가할 수 있습니다.
 참고: Datadog 에서는 로그가 한 줄 메시지인 경우 Buffer size를2MiB로 설정할 것을 권장합니다.
- Backup settings 섹션에서 재시도 기간을 초과하는 실패한 이벤트를 수신할 S3 버킷을 선택합니다.
 참고: 전송 스트림으로 전달되지 않은 로그가 Datadog 로 계속 전송되도록 하려면 Datadog Fordwarder Lambda 함수를 이 S3 버킷에서 로그 전달로 설정하세요.
- Create Firehose stream을 클릭합니다.
CloudWatch 로그에 대한 역할 생성
다음 단계에서는 CloudWatch 로그에 대한 IAM 역할을 만드는 방법을 안내합니다. 이 역할은 CloudWatch 로그에 Firehose 전송 스트림에 데이터를 넣을 수 있는 권한을 부여합니다.
- 다음 구문을 사용하여 ./TrustPolicyForCWL.json파일을 생성합니다.- <ACCOUNT_ID>을 12자리 AWS 계정 ID(대시 제외)로 바꿉니다.
- <REGION>을 CloudWatch 로그의 지역으로 바꿉니다.
 
{
  "Statement": {
    "Effect": "Allow",
    "Principal": { "Service": "logs.amazonaws.com" },
    "Action": "sts:AssumeRole",
    "Condition": { 
         "StringLike": { 
             "aws:SourceArn": "arn:aws:logs:<REGION>:<ACCOUNT_ID>:*"
         } 
     }
  }
}
- 신뢰 정책 파일을 지정하여 IAM 역할을 생성합니다.
aws iam create-role \
  --role-name CWLtoKinesisFirehoseRole \
  --assume-role-policy-document file://./TrustPolicyForCWL.json
참고: 반환된 Role.Arn 값은 이후 단계에서 사용됩니다.
- 다음 구문을 사용하여 ./PermissionsForCWL.json파일을 생성합니다.- <REGION>을 Datadog 포워더 람다 함수가 포함된 지역으로 바꿉니다.
- <ACCOUNT_ID>를 12자리 AWS 계정 ID(대시 제외)로 바꿉니다.
- <DELIVERY_STREAM_NAME>을 전송 스트림의 이름으로 바꿉니다.
 
{
    "Statement":[
      {
        "Effect":"Allow",
        "Action":["firehose:PutRecord"],
        "Resource":[
            "arn:aws:firehose:<REGION>:<ACCOUNT_ID>:deliverystream/<DELIVERY_STREAM_NAME>"]
      }
    ]
}
- 권한 정책을 역할과 연결합니다.
aws iam put-role-policy \
  --role-name CWLtoKinesisFirehoseRole \
  --policy-name Permissions-Policy-For-CWL \
  --policy-document file://./PermissionsForCWL.json
CloudWatch Logs 계정 수준 구독 필터 정책 생성
이 단계를 완료하기 전에 Amazon Data Firehose 전송 스트림이 Active 상태여야 합니다.
- CloudWatch Logs 계정 수준 구독 필터 정책을 만듭니다. 이 정책은 선택한 로그 그룹에서 Amazon Data Firehose 전송 스트림으로 실시간 로그 데이터의 흐름을 즉시 시작합니다:- <POLICY_NAME>을 구독 필터 정책의 이름으로 바꿉니다.
- <CLOUDWATCH_LOGS_ROLE>를 CloudWatch 로그 역할의 ARN으로 바꿉니다.
- <DELIVERY_STREAM_ARN>을 Amazon Data Firehose 전송 스트림의 ARN으로 바꿉니다.
 
aws logs put-account-policy \
    --policy-name "<POLICY_NAME>" \
    --policy-type "SUBSCRIPTION_FILTER_POLICY" \
    --policy-document '{"RoleArn":"<CLOUDWATCH_LOGS_ROLE>", "DestinationArn":"<DELIVERY_STREAM_ARN>", "FilterPattern": "", "Distribution": "Random"}' \
    --scope "ALL"
참고: 특정 로그 그룹을 로그 전달에서 제외하려면 명령 참조에 설명된 대로 --selection-criteria 옵션을 사용하세요.