Datadog に AWS サービスのログを送る方法の一つに Firehose がある。公式のテンプレートでスタックを作成すると指定したエンドポイントに向いた Firehose や IAM ロール、失敗時のログを保存する S3 Bucket が作成される。
$ export DD_API_KEY=*****
$ export DD_INTAKE_LOG_ENDPOINT=https://aws-kinesis-http-intake.logs.datadoghq.com/v1/input
$ aws cloudformation create-stack \
--stack-name datadog-kinesis-logs \
--template-body "$(curl -sL --compressed https://docs.datadoghq.com/resources/json/kinesis-logs-cloudformation-template.json)" \
--capabilities CAPABILITY_IAM \
--region ap-northeast-1 \
--parameters \
ParameterKey=DatadogAPIKey,ParameterValue=$DD_API_KEY \
ParameterKey=DatadogHttpEndpointUrl,ParameterValue=$DD_INTAKE_LOG_ENDPOINT
この Firehose を Destination として指定した CloudWatch Logs の Subscription Filter を作成するとログが送られるようになる。
$ export DELIVERY_STREAM_ARN=$(aws cloudformation describe-stacks \
--stack-name datadog-kinesis-logs \
--query "Stacks[0].Outputs[?OutputKey=='DatadogDeliveryStreamARN'].OutputValue" \
--output text)
$ export ROLE_ARN=$(aws cloudformation describe-stacks \
--stack-name datadog-kinesis-logs \
--query "Stacks[0].Outputs[?OutputKey=='CloudWatchLogsRoleARN'].OutputValue" \
--output text)
$ aws logs put-subscription-filter \
--filter-name datadog-kinesis-logs \
--log-group-name "/aws/lambda/helloworld" \
--filter-pattern "\"REPORT RequestId:\"" \
--destination-arn $DELIVERY_STREAM_ARN \
--role-arn $ROLE_ARN
Datadog に AWS インテグレーションや Forwarder で Lambda のメトリクスを送ると Serverless 課金 が発生するが、これでログを送っただけでは対象にならない。