Datadog Kinesis Firehose Destination を使用して AWS サービスログを送信する

概要

AWS サービスのログは通常、S3 バケットや CloudWatch ロググループに保存されています。これらのログを購読し、Amazon Kinesis ストリームに転送して、1 つまたは複数の宛先に転送することができます。Datadog は、Amazon Kinesis 配信ストリームのデフォルトの転送先の 1 つです。

AWS は Amazon Kinesis Data Firehose を完全に管理しているため、ログをストリーミングするための追加のインフラストラクチャーや転送構成を維持する必要はありません。AWS Firehose コンソールで Kinesis Firehose Delivery Stream を設定するか、CloudFormation テンプレートを使って自動的に転送先を設定することができます。

セットアップ

Datadog は、Datadog Kinesis 宛先を使用する場合、入力として Kinesis データストリームを使用することをお勧めします。Datadog がログの唯一のコンシューマーではない場合に備えて、ログを複数の宛先に転送する機能が用意されています。Datadog がログの唯一の宛先である場合、またはすでにログを含む Kinesis データストリームを持っている場合、ステップ 1 を無視することができます。

  1. オプションとして、AWS の Amazon Kinesis Data Streams 開発者ガイドのデータストリームの作成セクションを使用して、新しい Kinesis データストリームを作成します。ストリームには DatadogLogStream のような分かりやすい名前を付けます。

  2. 新しい配信ストリームを作成します。 a. ソースを設定します。

    • ログが Kinesis データストリームから取得されている場合は、Amazon Kinesis Data Streams
    • ログが CloudWatch のロググループから直接送られてくる場合は、Direct PUT or other sources

    b. 宛先を Datadog にします。 c. 配信ストリームの名前を指定します。 d. Destination settings で、Datadog サイトに対応する Datadog logs HTTP エンドポイント URL を選択します。 e. API キーを API key フィールドに貼り付けます。API キーは、Datadog API Keys ページから取得または作成できます。 f. オプションとして、Retry duration、バッファの設定を構成するか、またはログにタグとしてアタッチされる Parameters を追加することができます。 g. Backup settings で、再試行期間を超える失敗したイベントを受け取る S3 バックアップバケットを選択します。 : 配信ストリームで失敗したログがまだ Datadog に送信されるようにするには、Datadog Forwarder Lambda 関数をこの S3 バケットからログを転送するように設定します。 h. Create delivery stream をクリックします。

または、この CloudFormation テンプレートをカスタマイズして、AWS コンソールからインストールします。Kinesis CloudFormation テンプレート全体をご覧ください。

AWS ログを Kinesis ストリームに送信する

Datadog に取り込みたい CloudWatch のロググループに、新しい Kinesis ストリームをサブスクライブします。ロググループインデックスページSubscriptions 列で、ロググループに対する現在のサブスクリプションを確認することができます。サブスクリプションは、AWS のコンソールや API から以下の仕様で作成することができます。 : 各 CloudWatch Log グループは、2 つのサブスクリプションしか持つことができません。

IAM ロールとポリシーの作成

CloudWatch Log が Kinesis ストリームにデータを入れることができるように、IAM ロールと権限ポリシーを作成します。

  • ロールの Trust relationshipslogs.amazonaws.com または logs.<region>.amazonaws.com がサービスプリンシパルとして構成されていることを確認してください。
  • ロールのアタッチされた権限ポリシーで、firehose:PutRecord firehose:PutRecordBatchkinesis:PutRecordkinesis:PutRecords の各アクションが許可されていることを確認してください。

AWS CLI で設定する例としては、Kinesis を使ったサブスクリプションフィルターの例 (ステップ 3~6) を使用します。

サブスクリプションフィルターの作成

以下の例では、AWS CLI でサブスクリプションフィルターを作成しています。

```
aws logs put-subscription-filter \
    --log-group-name "<MYLOGGROUPNAME>" \
    --filter-name "<MyFilterName>" \
    --filter-pattern "" \
    --destination-arn "<DESTINATIONARN> (data stream or delivery stream)" \
    --role-arn "<MYROLEARN>"
```

また、AWS コンソールからサブスクリプションフィルターを作成することも可能です。

  1. CloudWatch のロググループに移動し、Subscription filters タブをクリックし、Create をクリックします。

    • Kinesis データストリームでログを送信する場合、Create Kinesis subscription filter を選択します。
    • ロググループから Kinesis Firehose 配信ストリームに直接ログを送信する場合、Create Kinesis Firehose subscription filter を選択します。
  2. データストリームまたは Firehose 配信ストリームを選択し、以前に作成した IAM ロールも同様に選択します。

  3. サブスクリプションフィルターの名前を入力し、Start streaming をクリックします。

重要: Amazon CloudWatch Logs API Reference で説明されているように、サブスクリプションフィルターの宛先はロググループと同じアカウントである必要があります。

検証

CloudWatch のロググループインデックスページの Subscriptions をチェックして、新しい Kinesis ストリームがロググループをサブスクライブしているかを確認します。

Datadog で AWS Kinesis ログを検索する

Amazon Kinesis 配信ストリームを設定した後、Datadog で配信ストリームにサブスクライブされたログを分析できます。

ARN ですべてのログにデータを入力するには

  1. Datadog の Logs Explorer に移動して、サブスクライブされたすべてのログを表示します。
  2. 検索バーに @aws.firehose.arn:"<ARN>" と入力し、<ARN> を Amazon Kinesis Data Firehose ARN に置き換えて、Enter を押します。

その他の参考資料