Datadog Amazon Data Firehose Destination を使用して AWS サービスログを送信する
概要
CloudWatch Log グループに格納された AWS サービスログを Amazon Kinesis データストリームに転送し、その後 Amazon Data Firehose を通じて 1 つまたは複数の宛先に送信することが可能です。Datadog は、Amazon Data Firehose 配信ストリームのデフォルトの宛先の 1 つです。
AWS は Amazon Data Firehose を完全に管理しているため、ログをストリーミングするための追加のインフラストラクチャーや転送構成を維持する必要はありません。AWS Firehose コンソールで Amazon Data Firehose 配信ストリームを設定するか、CloudFormation テンプレートを使って自動的に転送先を設定することができます。
セットアップ
Datadog には 1 バッチあたり 65,536 イベント の取り込み制限があり、Kinesis のバッファ サイズを 2 MiB に設定することが推奨されています。この制限を超えると、一部のログがドロップされることがあります。
Datadog は、Amazon Data Firehose で Datadog の宛先を使用する場合、入力として Kinesis データストリームを使用することをお勧めします。Datadog がログの唯一のコンシューマーではない場合に備えて、ログを複数の宛先に転送する機能が用意されています。Datadog がログの唯一の宛先である場合、またはすでにログを含む Kinesis データストリームを持っている場合、ステップ 1 を無視することができます。
- オプションとして、AWS の Amazon Kinesis Data Streams 開発者ガイドのデータストリームの作成セクションを使用して、新しい Kinesis データストリームを作成します。ストリームには
DatadogLogStream のような分かりやすい名前を付けます。 - Amazon Data Firehose に移動します。
- Create Firehose stream をクリックします。
- ソースを設定します:
- ログが Kinesis データストリームから取得されている場合は、
Amazon Kinesis Data Streams - ログが CloudWatch のロググループから直接送られてくる場合は、
Direct PUT
- 宛先を
Datadog にします。 - 配信ストリームの名前を指定します。
- Destination settings で、利用中の Datadog サイトに対応する
Datadog logs HTTP endpoint URL を選択します。 - API key フィールドに API キーを貼り付けてください。API キーは Datadog API Keys ページ で取得または作成できます。Secrets Manager 認証を使用する場合は、Datadog API キーを次のような完全な JSON 形式で value フィールドに追加してください:
{"api_key":"<YOUR_API_KEY>"}。 - 任意で、Retry duration やバッファ設定を指定したり、ログにタグとして付与される Parameters を追加したりできます。
注: Datadog には 1 バッチあたり 65,536 イベントの取り込み制限があり、ログが単一行メッセージである場合は、Buffer size を
2 MiB に設定することが推奨されています。 - Backup settings では、再試行期間を超えた失敗イベントのバックアップ先となる S3 バケットを選択します。
注: 配信ストリームで失敗したログが依然として Datadog に送信されるようにするには、この S3 バケットからログを転送するよう Datadog Forwarder Lambda 関数を設定してください。
- Create Firehose stream をクリックします。
AWS ログを Firehose ストリームに送信する
CloudWatch ログは、どちらのアプローチを採用するかによって、Kinesis データストリームか Amazon Data Firehose 配信ストリームにデータを入れる権限を必要とします。IAM ロールとポリシーを作成します。次に、Datadog に取り込みたい CloudWatch ロググループに、新しい Kinesis ストリームまたは Amazon Data Firehose 配信ストリームを サブスクライブします。サブスクリプションは、AWS コンソールまたは CLI を通じて作成することができます。
注: 各 CloudWatch ロググループに許可されるサブスクリプションは 2 つのみです。
IAM ロールとポリシーの作成
CloudWatch Log が Kinesis ストリームにデータを入れることができるように、IAM ロールと権限ポリシーを作成します。
- ロールの Trust relationships で
logs.amazonaws.com または logs.<region>.amazonaws.com がサービスプリンシパルとして構成されていることを確認してください。例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Principal": {
"Service": "logs.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
- ロールのアタッチされた権限ポリシーで、
firehose:PutRecord、firehose:PutRecordBatch、kinesis:PutRecord、kinesis:PutRecords の各アクションが許可されていることを確認してください。Kinesis データストリームを使用している場合は、Resource フィールドでその ARN を指定します。データストリームを使用していない場合は、Resource フィールドで Amazon Data Firehose ストリームの ARN を指定してください。
例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"firehose:PutRecord",
"firehose:PutRecordBatch",
"kinesis:PutRecord",
"kinesis:PutRecords"
],
"Resource": "arn:aws:kinesis:<REGION>:<ACCOUNT_ID>:stream/<DELIVERY_STREAM>
}
]
}
AWS CLI で設定する例としては、Kinesis データストリームを使ったサブスクリプションフィルターの例 (ステップ 3~6) を使用します。
サブスクリプションフィルターの作成
CLI
以下の例では、AWS CLI でサブスクリプションフィルターを作成しています。
aws logs put-subscription-filter \
--log-group-name "<MYLOGGROUPNAME>" \
--filter-name "<MyFilterName>" \
--filter-pattern "" \
--destination-arn "<DESTINATIONARN> (データストリームまたは配信ストリーム)" \
--role-arn "<MYROLEARN>"
コンソール
以下の手順に従って、次のまた、AWS コンソールからサブスクリプションフィルターを作成します。
CloudWatch のロググループに移動し、Subscription filters タブをクリックし、Create をクリックします。
- Kinesis データストリームでログを送信する場合、
Create Kinesis subscription filter を選択します。 - ロググループから Amazon Data Firehose 配信ストリームに直接ログを送信する場合、
Create Amazon Data Firehose subscription filter を選択します。
データストリームまたは Firehose 配信ストリームを選択し、以前に作成した IAM ロールも同様に選択します。
サブスクリプションフィルターの名前を入力し、Start streaming をクリックします。
重要: Amazon CloudWatch Logs API Reference で説明されているように、サブスクリプションフィルターの宛先はロググループと同じアカウントである必要があります。
検証
CloudWatch のロググループの詳細ページの Subscription filters タブをチェックして、新しい Kinesis ストリームまたは Amazon Data Firehose ストリームがロググループをサブスクライブしているかを確認します。
Datadog でログを確認する
Amazon Data Firehose 配信ストリームを設定した後、Datadog で配信ストリームにサブスクライブされたログを分析できます。
ARN ですべてのログにデータを入力するには
- Datadog で Log Explorer に移動します。
- 検索バーに
@aws.firehose.arn:"<ARN>" と入力し、<ARN> を Amazon Data Firehose ARN に置き換えて、Enter を押すと、サブスクライブされたログがすべて表示されます。
注: 1 つの Kinesis ペイロードは、65,000 以上のログメッセージであってはなりません。この制限を超えたログメッセージは削除されます。
その他の参考資料