Datadog Lambda extension を使用している場合、ログ コレクションは デフォルトで有効 になっています。

非 Lambda リソースからログを収集する

AWS Lambda 関数以外のマネージドリソースで生成されたログは、サーバーレスアプリケーションの問題の根本的な原因を特定するのに役立ちます。Datadog では、お使いの環境の以下の AWS マネージドリソースからログを収集することをお勧めします。

  • API: API Gateway、AppSync、ALB
  • キューとストリーム: SQS、SNS、Kinesis
  • データストア: DynamoDB、S3、RDS

設定

ログ収集の有効化

Datadog Lambda 拡張機能によるログ収集は、デフォルトで有効になっています。

custom:
  datadog:
    # ... その他の必要なパラメーター (Datadog のサイトや API キーなど)
    enableDDLogs: true
Transform:
  - AWS::Serverless-2016-10-31
  - Name: DatadogServerless
    Parameters:
      # ... その他の必要なパラメーター (Datadog のサイトや API キーなど)
      enableDDLogs: true
const datadog = new Datadog(this, "Datadog", {
    // ... その他の必要なパラメーター (Datadog のサイトや API キーなど)
    enableDatadogLogs: true
});
datadog.addLambdaFunctions([<LAMBDA_FUNCTIONS>]);

Lambda 関数で環境変数 DD_SERVERLESS_LOGS_ENABLEDtrue に設定します。

ログ収集の無効化

Datadog Forwarder Lambda 関数を使用したログ収集を停止したい場合は、自身の Lambda 関数の CloudWatch ロググループからサブスクリプションフィルターを削除します。

Datadog Lambda 拡張機能を使用してログの収集を停止したい場合は、使用するインストール方法に応じて以下の手順に従ってください。

custom:
  datadog:
    # ... その他の必要なパラメーター (Datadog のサイトや API キーなど)
    enableDDLogs: false
Transform:
  - AWS::Serverless-2016-10-31
  - Name: DatadogServerless
    Parameters:
      # ... その他の必要なパラメーター (Datadog のサイトや API キーなど)
      enableDDLogs: false
const datadog = new Datadog(this, "Datadog", {
    // ... その他の必要なパラメーター (Datadog のサイトや API キーなど)
    enableDatadogLogs: false
});
datadog.addLambdaFunctions([<LAMBDA_FUNCTIONS>]);

Lambda 関数で環境変数 DD_SERVERLESS_LOGS_ENABLEDfalse に設定します。

詳しくは、ログ管理 をご覧ください。

ログから情報をフィルタリングまたはスクラブする

STARTEND のログを除外するには、環境変数 DD_LOGS_CONFIG_PROCESSING_RULES[{"type": "exclude_at_match", "name": "exclude_start_and_end_logs", "pattern": "(START|END) RequestId"}] に設定します。また、プロジェクトのルートディレクトリに datadog.yaml ファイルを追加して、以下の内容を記述することも可能です。

logs_config:
  processing_rules:
    - type: exclude_at_match
      name: exclude_start_and_end_logs
      pattern: (START|END) RequestId

Datadog では、REPORT ログを残すことを推奨しています。これは、サーバーレス関数のビューで呼び出しリストを生成するために使用されるからです。

Datadog に送信する前に他のログをスクラブまたはフィルタリングするには、高度なログ収集を参照してください。

ログのパースと変換

Datadog でログをパースして変換するには、Datadog ログパイプラインのドキュメントを参照してください。

ログとトレースの接続

Lambda 拡張機能を使ってトレースやログを収集している場合、Datadog は自動的に AWS Lambda のリクエスト ID を aws.lambda スパンの request_id タグの下に追加します。さらに、同じリクエストの Lambda ログは、lambda.request_id 属性の下に追加されます。Datadog のトレースビューとログビューは、AWS Lambda のリクエスト ID を使用して接続されます。

Forwarder Lambda 関数を使用してトレースとログを収集している場合、dd.trace_id は自動的にログに挿入されます (環境変数 DD_LOGS_INJECTION で有効になります)。Datadog のトレースとログのビューは、Datadog のトレース ID を使用して接続されています。この機能は一般的なランタイムとロガーを使用しているほとんどのアプリケーションでサポートされています (ランタイムによるサポートを参照)。

サポートされていないランタイムまたはカスタムロガーを使用している場合は、以下の手順に従ってください。

  • JSON でログを記録する場合、dd-trace を使用して Datadog のトレース ID を取得し、それをログの dd.trace_id フィールドに追加する必要があります。
    {
      "message": "This is a log",
      "dd": {
        "trace_id": "4887065908816661012"
      }
      // ... the rest of your log
    }
    
  • 平文でログを記録する場合、以下を行う必要があります。
    1. dd-trace を使用して Datadog のトレース ID を取得し、ログに追加します。
    2. デフォルトの Lambda ログパイプラインを複製します (読み取り専用)。
    3. 複製したパイプラインを有効にし、デフォルトのパイプラインを無効にします。
    4. 複製したパイプラインの Grok パーサールールを更新して、Datadog トレース ID を dd.trace_id 属性にパースするようにします。例えば、[INFO] dd.trace_id=4887065908816661012 My log messageのようなログには、ルール my_rule \[%{word:level}\]\s+dd.trace_id=%{word:dd.trace_id}.* が使用されます。