- まだ設定していない場合は、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>
はバケットを作成するリージョンに置き換えてください。
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 Data Streams の場合は
Amazon Kinesis Data Streams
を選択します。 - ログソースが CloudWatch Logs の場合は
Direct PUT
を選択します。
- Destination フィールドで
Datadog
を選択します。 - Source が
Amazon Kinesis Data Streams
の場合は、Source settings で使用する Kinesis データストリームを選択します。 - 必要に応じて、配信ストリームにわかりやすい名前を付けることもできます。
- Destination settings セクションで、お使いの Datadog サイトに対応する Datadog ログの HTTP エンドポイント URL を選択します。
- Authentication には有効な Datadog API キーが必要です。以下のいずれかを選択できます。
- Use API key を選び、API key フィールドにキーの値を貼り付ける
- Use AWS Secrets Manager を選び、有効な Datadog API キーの値を含むシークレットを Secret name ドロップダウンで選択する
- Content encoding には
GZIP
を選択します。 - 任意で、Retry duration、バッファ設定、あるいは Parameters (ログのタグとして付与されます) を設定できます。
注: ログが 1 行ごとのメッセージである場合、Datadog では Buffer size を
2
MiB に設定することを推奨しています。 - Backup settings セクションでは、再試行期間を超えたイベントのバックアップ先となる S3 バケットを選択します。
注: 配信ストリームによりログが転送できなかった場合でも Datadog に送信されるようにするには、この S3 バケットからログを転送するよう Datadog Forwarder Lambda 関数を設定してください。
- Create Firehose stream をクリックします。
CloudWatch Logs 用のロールを作成する
以下の手順では、CloudWatch Logs 用の IAM ロールを作成します。このロールにより、CloudWatch Logs に Firehose 配信ストリームへデータを送信する権限を付与します。
./TrustPolicyForCWL.json
ファイルを作成し、以下のステートメントを記述します。<ACCOUNT_ID>
はハイフンを除いた 12 桁の AWS アカウント ID に、<REGION>
は CloudWatch Logs が存在するリージョンに置き換えてください。
{
"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 Forwarder Lambda 関数が存在するリージョンに、<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 Logs ロールの 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
オプションを使用してください。