vague memory

うろ覚えを無くしていこうともがき苦しむ人の備忘録

Datadog Forwarder(AWS) についてのメモ

Datadog Logs へ AWS のログを送る仕組みについて、古い知識のままだったので調べ直したメモ。



AWS から Datadog Logs への送信

AWS の各種ログを送信する方法として2パターン用意されています。 ここで言うログは EC2やECS 内のログではなく、 CloudWatch Log または S3 バケットに保存しているログを指しています。

現在公式ページに記載されているのは、Kinesis Firehose destination)、Forwarder Lambda function となり、 いずれも CloudFormation が用意されています。

f:id:htnosm:20211205173203p:plain

Kinesis Firehose destination

CloudWatch logs -> Firehose -> Datadog の流れです。 大量送信する場合はこちらが推奨とのこと。

CloudFormation のテンプレートは公式ドキュメントから参照できます。 少し古いのかそのまま利用すると IAM Role のポリシーが一部エラーとなります。

CloudWatchLogsPolicy の Action に kinesis:〜 が指定されていますが、 kinesis:PutRecordBatch は存在しません。 また、iam:PassRole も不要です。

{
    "Statement":[
      {
        "Effect":"Allow",
        "Action":["firehose:*"],
        "Resource":["arn:aws:firehose:region:123456789012:*"]
      }
    ]
}

source タグ

定義箇所を見つけられませんでしたが、ある程度自動振り分けしてくれるようです。 Lambda Function の LogGroup (/aws/lambda/...) を対象とすると source:lambda となりました。

Forwarder Lambda function

S3 から Datadog Logs へ送信するパターンです。

CloudFormation のテンプレートは公式ドキュメントから参照できます。 また、AWS Integration 設定の CloudFormation にも含まれています。(Setup : Automatic - CloudFormation で作成される ForwarderStack)

トリガー

トリガーは自動設定も可能です。 AWS Integration 用の IAM Role に必要権限を追加し、Datadog 側 "Amazon Web Services Integration" -> "Collect Logs" で Forwarder の Lambda Function を登録、チェックボックスを設定することで自動的に収集が走ります。 (非常に便利な機能ではありますが、意図せず大量にログが送信される事が懸念です。)

手動の場合は、転送したい対象に各々設定します。

  • CloudWatch Log
    • Log Group に Forwarder Lambda へ向けた Subscription Filter を設定
  • S3
    • S3 バケットに Forwarder Lambda へ向けた Event notification を設定

転送の除外

特定のログを Datadog 側に送信したくない場合の除外設定を行う箇所は以下になります。 Forwarder Lambda 側に条件指定する場合、必要に応じて追加の Forwarder Lambda を作成するなど考慮が必要になるかもしれません。

source タグ

Lambda Function 内処理で振り分けされます。 前はLambdaコンソールから直接参照できましたが、最新版では主処理がLayerに移動したようでした。 Layerは CloudFormation 実行時に GitHub から取得しています。

source タグについて

Datadog Logs へログを送信すると事前定義されたPipelineにより自動的にパースしてくれます。 この際の判定に source タグが利用されます。

f:id:htnosm:20211205173207p:plain

source タグとパースに利用される事前定義されたPiplelineは以下から参照できます。

f:id:htnosm:20211205173211p:plain

source タグ付与条件に合致しなかった場合(S3 バケットに出力している CloudFront アクセスログが、 source:s3 となってしまった場合など)、Pipelineを複製(Clone)して任意のログにPipelineを適用する事も可能です。