Amazon Lambda
セキュリティモニタリングが使用可能です セキュリティモニタリングが使用可能です

Amazon Lambda

Crawler Crawler

概要

Amazon Lambda は、イベントに応答してコードを実行し、そのコードが必要とするコンピューティングリソースを自動的に管理するコンピューティングサービスです。

このインテグレーションを有効にすると、CloudWatch メトリクスが収集されるようになります。このページでは、Lambda 関数のカスタムメトリクス、ログ、トレースを設定する方法についても説明します。

セットアップ

インストール

Amazon Web Services インテグレーションをまだセットアップしていない場合は、最初にセットアップします。

メトリクスの収集

AWS Lambda メトリクス

  1. AWS インテグレーションタイルのメトリクス収集で、Lambda をオンにします。
  2. Amazon Lambda のメトリクスを収集するには、次のアクセス許可を Datadog IAM ポリシーに追加します。Lambda ポリシーの詳細については、AWS Web サイトのガイドを参照してください。

    AWS アクセス許可説明
    lambda:List*Lambda 関数、メタデータ、およびタグを一覧表示します。
    tag:GetResourcesLambda 関数に適用されたカスタムタグを取得します。
  3. Datadog - AWS Lambda インテグレーションをインストールします。

完了したら、Datadog Serverless ビューにすべての Lambda 関数が表示されます。このページは、サーバーレスアプリケーションを実行している AWS Lambda 関数からのメトリクス、トレース、ログを 1 つのビューにまとめて表示します。この機能の詳細については、Datadog Serverless のドキュメントを参照してください。

リアルタイムの拡張 Lambda メトリクス

Datadog では、Node.js、Python、Ruby ランタイム用のリアルタイム Lambda ランタイムメトリクスを追加設定なしで生成できます。

Datadog は、Datadog Lambda レイヤーと Datadog Forwarder を使用して、低レイテンシー、数秒の粒度、およびコールドスタートとカスタムタグの詳細なメタデータを備えたメトリクスを生成できます。

メトリクス説明
aws.lambda.enhanced.invocationsイベントまたは呼び出し API コールに応答して関数が呼び出された回数を測定します。
aws.lambda.enhanced.errors関数のエラー(応答コード 4XX)が原因で失敗した呼び出しの数を測定します。
aws.lambda.enhanced.max_memory_used関数が使用するメモリの量を測定します。
aws.lambda.enhanced.duration関数コードが呼び出しの結果として実行を開始してから、実行を停止するまでの平均経過時間を測定します。
aws.lambda.enhanced.billed_duration請求対象となる関数が実行された時間を測定します(100 ミリ秒単位)。
aws.lambda.enhanced.init_durationコールドスタート時の関数の初期化時間を計測します。
aws.lambda.enhanced.estimated_cost関数呼び出しの推定総コスト(米ドル)を測定します。
aws.lambda.enhanced.timeouts関数がタイムアウトした回数を測定します。
aws.lambda.enhanced.out_of_memory関数がメモリー不足になった回数を測定します。

これらのメトリクスは、functionnamecold_startmemorysizeregionaccount_idallocated_memoryexecutedversionresourceruntime でタグ付けされています。これらは DISTRIBUTION タイプのメトリクスであるため、その countminmaxsumavg を表示できます。

拡張リアルタイム Lambda メトリクスの有効化
  1. Datadog Forwarder をバージョン 3.0.0 以上に設定または更新します。
  2. Datadog Lambda レイヤー を、これらのメトリクスが必要な関数にインストールします(Python の場合はレイヤーバージョン 9+Node.js の場合はレイヤーバージョン 6+Ruby の場合はレイヤーバージョン 5+Go の場合はパッケージバージョン 0.5.0+Java の場合はパッケージバージョン 0.0.2+)。
  3. Lambda 関数に適用されたカスタムタグでこれらのメトリクスに自動的にタグを付けるには、Datadog Forwarder のバージョン 3.0.0 以降を実行していることを確認してください。次に、Datadog Forwarder CloudFormation Stack でパラメーター DdFetchLambdaTagstrue に設定します。
  4. サンプルコードに示すように、AWS Lambda 関数ハンドラーを Datadog ライブラリでラップします。Datadog サーバーレスプラグインは、すべての Python および Node.js 関数ハンドラーを自動的にラップできます。
  5. Enhanced Lambda Metrics Default Dashboard を参照します。

注: これらのメトリクスはデフォルトで有効になっていますが、非同期のみ送信されます。これは CloudWatch Logs を介して Datadog Forwarder に送信されます。つまり、CloudWatch のログの量が増加します。これは AWS の請求額に影響する場合があります。オプトアウトするには、AWS Lambda 関数で DD_ENHANCED_METRICS 環境変数を false に設定します。

呼び出しとエラーメトリクスは Datadog Lambda レイヤーによって生成され、その他は Datadog Forwarder によって生成されます。

注: Lambda 関数に適用されたタグは、自動的にメトリクスを分析するための新しいディメンションにになります。Datadog で拡張メトリクスタグを表示するには、Datadog Forwarder CloudFormation Stack でパラメーター DdFetchLambdaTagstrue に設定します。

ログの収集

  1. まだ設定していない場合は、Github リポジトリの DataDog/datadog-serverless-functions の手順に従って、AWS アカウントで Datadog Forwarder を設定します。
  2. Lambda を実行するトリガーを構成します。トリガーを構成する方法には、次の 2 つがあります。

    • 自動: We manage the log collection Lambda triggers for you if you grant us a set of permissions.
    • 手動: Set up each trigger yourself via the AWS console.
  3. 完了したら、Datadog Log セクションに移動してログを確認します。

: Datadog Forwarder CloudFormation Stack でパラメーター DdFetchLambdaTagstrue に設定し、ログが元の Lambda 関数のリソースタグにタグ付けされるようにします。

: AWS の us-east-1 リージョンにいる場合、Datadog-AWS Private Link を活用し、ログを Datadog へ転送します。その場合、Forwarder 関数には、VPCLambdaExecutionRole アクセス許可が必要です

トレースの収集

Datadog は、Datadog APM または AWS X-Ray のいずれかを使用した AWS Lambda 関数の分散トレースをサポートします。いずれかのクライアントライブラリセットを使用してトレースを生成できます。Datadog APM は、ホスト、コンテナ、サーバーレス機能で実行されているアプリケーションからのトレースを自動的に接続します。

Datadog APM は Datadog にトレースデータをリアルタイムで送信するため、Live Tail ビューで全くかほとんど遅延なくトレースを監視できます。Datadog APM はテールベースのサンプリングを使用して、より適切なサンプリング決定を行います。

サーバーレスページApp Analyticsサービスマップでトレースを視覚化します。

注: Datadog APM または AWS X-Ray インテグレーション を有効にすると、請求に影響する可能性のある分析スパンの消費量が増加します。

Datadog APM を使用したトレース

Datadog Node.jsPythonRuby トレースライブラリは、AWS Lambda の分散トレースをサポートし、より多くのランタイムが間もなく登場します。アプリケーションにトレースを追加する最も簡単な方法は、依存関係として Datadog トレースライブラリを含む Datadog Lambda レイヤー を使用することです。次の手順に従って、ランタイム用に APM を設定します。

ステップ 1: Datadog Forwarder の最新バージョンをインストール (または更新) します。

ステップ 2: 関数に Datadog Lambda レイヤー をインストールします。または、ランタイム用の Datadog トレースライブラリをインストールします。

yarn add datadog-lambda-js
yarn add dd-trace

npm install datadog-lambda-js
npm install dd-trace

ステップ 3: コードをインスツルメントします。

const { datadog } = require('datadog-lambda-js');
const tracer = require('dd-trace').init(); // 手動のトレーサー構成はここにあります。

// この関数はスパンでラップされます
const longCalculation = tracer.wrap('calculation-long-number', () => {
    // 費用がかさむ計算がここに入ります
});

// この関数もスパンでラップされます
module.exports.hello = datadog((event, context, callback) => {
    longCalculation();

    callback(null, {
        statusCode: 200,
        body: 'Hello from serverless!'
    });
});

Node.js ライブラリをインスツルメントし、トレースをカスタマイズするには、Datadog Node.js APM のドキュメントを参照してください。

pip install datadog-lambda

または、プロジェクトの requirements.txtdatadog-lambda を追加します。

ステップ 3: コードをインスツルメントします。

from datadog_lambda.metric import lambda_metric
from datadog_lambda.wrapper import datadog_lambda_wrapper

from ddtrace import tracer

@datadog_lambda_wrapper
def hello(event, context):
  return {
    "statusCode": 200,
    "body": get_message()
  }

@tracer.wrap()
def get_message():
  return "Hello from serverless!"

Python ライブラリをインスツルメントし、トレースをカスタマイズするには、Datadog Python APM のドキュメントを参照してください。

以下を Gemfile に追加するか、選択したパッケージマネージャーを使用して gem をインストールします。

gem 'datadog-lambda'
gem 'ddtrace'

: ddtrace はパッケージ化されて AWS Lambda にアップロードされる前に Amazon Linux 用にコンパイルする必要があるネイティブ拡張機能を使用することに注意してください。このため、[Datadog Lambda レイヤー][51] の使用をお勧めします。

ステップ 3: コードをインスツルメントします。

require 'ddtrace'
require 'datadog/lambda'

Datadog::Lambda.configure_apm do |c|
# ここでインスツルメンテーションを有効にします
end

def handler(event:, context:)
  Datadog::Lambda::wrap(event, context) do
    # ここに関数コード
    some_operation()
  end
end

# ddtrace を使用して残りのコードをインスツルメントします

def some_operation()
    Datadog.tracer.trace('some_operation') do |span|
        # ここで何かをします
    end
end

Ruby ライブラリをインスツルメントし、トレースをカスタマイズするには、Datadog Ruby APM のドキュメントを参照してください。

ユースケースで必要な場合は、AWS X-Ray インテグレーションによって生成されたトレースと Datadog トレースライブラリをマージできます。ただし、ほとんどの場合、必要なトレースライブラリは 1 つだけであり、これにより、Datadog は大量のユースケースに対してより適切なサンプリング決定を行うことができます。

AWS X-Ray と Datadog APM トレースの両方をマージする場合は、ランタイムに次のコンフィギュレーションを使用します。

module.exports.hello = datadog(
    (event, context, callback) => {
        longCalculation();

        callback(null, {
            statusCode: 200,
            body: 'Hello from serverless!'
        });
    },
    { mergeDatadogXrayTraces: true }
);

Lambda 関数で DD_MERGE_XRAY_TRACES 環境変数を True に設定します。

Lambda 関数で DD_MERGE_DATADOG_XRAY_TRACES 環境変数を True に設定します。

AWS Lambda とホスト全体のトレース

該当する場合、Datadog は AWS X-Ray トレースをネイティブ Datadog APM トレースとマージします。これにより、AWS Lambda、コンテナ、オンプレミスホスト、マネージドサービスなど、インフラストラクチャーの境界を越えるリクエストの全体像がトレースに表示されることになります。

  1. Lambda 関数をトレースするために AWS X-Ray インテグレーションを有効にします。
  2. Datadog Lambda レイヤーを Lambda 関数に追加します。
  3. ホストおよびコンテナベースのインフラストラクチャーで Datadog APM をセットアップします。

: X-Ray と Datadog APM トレースを同じフレームグラフに表示するには、すべてのサービスに同じ env タグが必要です。

タグを使用したインフラストラクチャーの整理

Lambda 関数に適用されたタグは、自動的に新しいディメンションになり、このディメンションでトレースを分類できます。

タグは、Datadog APM、サービスマップ、サービス一覧画面で特に強力です。これらは、env および service タグのファーストクラスサポートを備えています。

: Datadog APM でトレースしている場合は、Datadog Forwarder CloudFormation Stack でパラメーター DdFetchLambdaTagstrue に設定し、トレースが元の Lambda 関数のリソースタグにタグ付けされるようにします。Lambda 関数のリソースタグは、追加のコンフィギュレーションがなくても Datadog の X-Ray トレースに自動的に表示されます。

env タグ

env を使用すると、ステージング、開発、および本番環境を分離できます。これは、サーバーレス関数だけでなく、あらゆる種類のインフラストラクチャーで機能します。たとえば、本番環境の EU Lambda 関数に env:prod-eu タグを付けることができます。

デフォルトでは、Lambda 関数は Datadog で env:none でタグ付けされます。独自のタグを追加してこれをオーバーライドします。

service タグ

関連する Lambda 関数をサービスにグループ化するために、 service タグを追加します。サービスマップサービス一覧画面は、このタグを使用して、サービスとモニターのヘルスとの関係を示します。サービスは、サービスマップ上の個々のノードとして表されます。

デフォルトでは、各 Lambda 関数は独自の service として扱われます。独自のタグを追加してこれをオーバーライドします。

: Datadog を初めてご利用になるお客様には、デフォルトですべての Lambda 関数は aws.lambda サービス下にグループ化され、サービスマップでは単一ノードとして表示されます。これをオーバーライドするには、service で関数をタグ付します。

Lambda 関数のアニメーション化されたサービスマップ

サーバーレスインテグレーション

以下の Lambda 関数インテグレーションは、サーバーレスアプリケーションを監視するためのさらなる機能を提供します。

AWS Step Functions

AWS Step Functions インテグレーションを有効にすると、特定の関数が属するステートマシンを識別する Lambda メトリクスの追加タグを自動的に取得できます。これらのタグを使用して、サーバーレスビューで Step Functions ごとの Lambda メトリクスとログの集計ビューを取得します。

  1. AWS Step Functions インテグレーションをインストールします。
  2. Lambda メトリクスにタグを追加するために、次のアクセス許可を Datadog IAM ポリシーに追加します。

    AWS アクセス許可説明
    states:ListStateMachines有効な Step Functions を一覧表示します。
    states:DescribeStateMachineStep Function メタデータやタグを取得します。

Amazon EFS for Lambda

Amazon EFS for Lambdaを有効にすると、特定の関数が属する EFS を識別する Lambda メトリクスの追加タグを自動的に取得できます。これらのタグを使用して、サーバーレスビューで EFS ごとの Lambda メトリクスとログの集計ビューを取得します。

  1. Amazon EFS インテグレーションをインストールします。
  2. Lambda から EFS のメトリクスを収集するために、次のアクセス許可を Datadog IAM ポリシーに追加します。

    AWS アクセス許可説明
    elasticfilesystem:DescribeAccessPointsLambda 関数に接続された有効な EFS を一覧表示します。
  3. 完了したら、サーバレスビューに移動し、Lambda 関数で新しい filesystemid タグを使用します。

Amazon EFS for Lambda

Lambda@Edge

at_edgeedge_master_nameedge_master_arn タグを使用し、エッジロケーションで実行中の Lambda 関数のメトリクスとロゴの集計ビューを取得します。

カスタムメトリクス

Datadog Lambda レイヤーをインストールして、カスタムメトリクスを収集して送信します。Datadog Lambda レイヤーから送信されたメトリクスは、自動的にディストリビューションに集計されるため、avgsummaxmincount をグラフ化できます。また、ディストリビューションメトリクスページで、50、75、95、99 パーセンタイル値のタグセットの集計を計算できます。

ディストリビューションメトリクスは、基底のホストとは無関係に、サービスなどの論理オブジェクトをインスツルメントするように設計されています。したがって、Agent を使用してローカルにメトリクスを集計するのではなく、サーバー側のメトリクスを集計するため、サーバーレスインフラストラクチャーに適しています。

ディストリビューションメトリクスへのアップグレード

ディストリビューションメトリクスでは、送信時に指定する代わりにグラフ化または照会するときに、集計を選択します。

以前に Datadog Lambda レイヤーのいずれかを使用せずに Lambda からカスタムメトリクスを送信した場合、それらを Datadog に送信するときに、新しいメトリクス名でカスタムメトリクスのインスツルメントを開始する必要があります。ディストリビューションと非ディストリビューションメトリクスタイプの両方として、同じメトリクス名を同時に存在させることはできません。

ディストリビューションメトリクスのパーセンタイル集計を有効にするには、ディストリビューションメトリクスのページを参照してください。

カスタムメトリクスのタグ付け

Datadog Lambda レイヤー を使用して送信する場合、カスタムメトリクスにタグを付ける必要があります。ディストリビューションメトリクスページを使用して、カスタムメトリクスに適用されるタグのセットをカスタマイズします。

カスタムメトリクスに Lambda リソースタグを追加するには、Datadog Forwarder CloudFormation Stack でパラメーター DdFetchLambdaTagstrue に設定します。

同期カスタムメトリクスと非同期カスタムメトリクス

Datadog Lambda レイヤーは、Lambda で同期および非同期の両方によるカスタムメトリクスの送信をサポートしています。

同期: デフォルトの動作。このメソッドは、定期的(10 秒ごと)および Lambda 呼び出しの終了時に HTTP 経由でカスタムメトリクスを Datadog に送信します。そのため、呼び出しの継続時間が 10 秒未満の場合は、カスタムメトリクスは呼び出しの終了時に送信されます。

非同期(推奨): レイテンシーオーバーヘッドなしでカスタムメトリクスを送信し、かつそれらをほぼリアルタイムで Datadog に表示することができます。これを実現するために、Lambda レイヤーはカスタムメトリクスを特別にフォーマットされたログ行として出力し、これを Datadog Forwarder が解析して Datadog に送信します。AWS Lambda でのロギングは 100% 非同期であるため、このメソッドにより、関数へのレイテンシーオーバーヘッドがゼロになります。

非同期カスタムメトリクスの有効化
  1. Lambda 関数で環境変数 DD_FLUSH_TO_LOGTrue に設定します。
  2. まだ設定していない場合は、Github リポジトリの DataDog/datadog-serverless-functions の手順に従って、AWS アカウントで Datadog Forwarder を設定します。
  3. Lambda を実行するトリガーを構成します。トリガーを構成する方法には、次の 2 つがあります。
    • 自動: We manage the log collection Lambda triggers for you if you grant us a set of permissions.
    • 手動: Set up each trigger yourself via the AWS console.

Datadog ログを使用していない場合でも、非同期のカスタムメトリクス送信を使用できます。Datadog ログコレクション AWS Lambda 関数で環境変数 DD_FORWARD_LOGFalse に設定します。これにより、カスタムメトリクスのみが Datadog にインテリジェントに転送され、通常のログは転送されません。

カスタムメトリクスのコード例

関数コードで、Lambda レイヤーから必要なメソッドをインポートし、関数ハンドラーのラッパーを追加します。ヘルパー関数をラップする必要はありません。

注: カスタムメトリクスを報告するメソッドの引数には次の要件があります。

  • <METRIC_NAME> は、メトリクス命名ポリシーに従ってメトリクスを一意に識別します。
  • <METRIC_VALUE> は、数値 (整数または浮動小数点数) でなければなりません。
  • <TAG_LIST> はオプションです。['owner:Datadog', 'env:demo', 'cooltag'] のように書式設定されます。
from datadog_lambda.metric import lambda_metric
from datadog_lambda.wrapper import datadog_lambda_wrapper

# ラップする必要があるのは関数ハンドラーだけです(ヘルパー関数ではありません)。 
@datadog_lambda_wrapper
def lambda_handler(event, context):
    lambda_metric(
        "coffee_house.order_value",             # メトリクス名
        12.45,                                  # メトリクス値
        tags=['product:latte', 'order:online']  # 関連付けられたタグ
    )
const { datadog, sendDistributionMetric } = require('datadog-lambda-js');

async function myHandler(event, context) {
    sendDistributionMetric(
        'coffee_house.order_value', // メトリクス名
        12.45, // メトリクス値
        'product:latte',
        'order:online' // 関連付けられたタグ
    );
    return {
        statusCode: 200,
        body: 'hello, dog!'
    };
}
// ラップする必要があるのは関数ハンドラーだけです(ヘルパー関数ではありません)。
module.exports.myHandler = datadog(myHandler);

/* または、手動構成オプションを使用します
module.exports.myHandler = datadog(myHandler, {
    apiKey: "my-api-key"
});
*/
package main

import (
  "github.com/aws/aws-lambda-go/lambda"
  "github.com/DataDog/datadog-lambda-go"
)

func main() {
  // ラップする必要があるのは関数ハンドラーだけです(ヘルパー関数ではありません)。
  lambda.Start(ddlambda.WrapHandler(myHandler, nil))
  /* または、手動構成オプションを使用します
  lambda.Start(ddlambda.WrapHandler(myHandler, &ddlambda.Config{
    BatchInterval: time.Second * 15
    APIKey: "my-api-key",
  }))
  */
}

func myHandler(ctx context.Context, event MyEvent) (string, error) {
  ddlambda.Distribution(
    "coffee_house.order_value",     // メトリクス名
    12.45,                          // メトリクス値
    "product:latte", "order:online" // 関連付けられたタグ
  )
  // ...
}
require 'datadog/lambda'

def handler(event:, context:)
    # ラップする必要があるのは関数ハンドラーだけです(ヘルパー関数ではありません)。
    Datadog::Lambda.wrap(event, context) do
        Datadog::Lambda.metric(
          'coffee_house.order_value',         # メトリクス名
          12.45,                              # メトリクス値
          "product":"latte", "order":"online" # 関連付けられたタグ
        )
        return { statusCode: 200, body: 'Hello World' }
    end
end
public class Handler implements RequestHandler<APIGatewayV2ProxyRequestEvent, APIGatewayV2ProxyResponseEvent> {
    public Integer handleRequest(APIGatewayV2ProxyRequestEvent request, Context context){
        DDLambda dd = new DDLambda(request, lambda);

        Map<String,String> myTags = new HashMap<String, String>();
            myTags.put("product", "latte");
            myTags.put("order","online");

        dd.metric(
            "coffee_house.order_value", // メトリクス名
            12.45,                      // メトリクスの値
            myTags);                    // 関連タグ
    }
}

非同期カスタムメトリクスの発行は、任意の言語またはカスタムランタイムで可能です。Datadog Forwarder が識別し、Datadog に送信する Lambda 関数に特別な JSON 形式の文字列を出力することで機能します。これを使用するには:

  1. 非同期カスタムメトリクスを有効にします
  2. 次の形式でカスタムメトリクスをログする再利用可能な関数を作成します。

    {
    "m": "メトリクス名",
    "v": "メトリクス値",
    "e": "Unix タイムスタンプ(秒)",
    "t": "タグの配列"
    }

例:

{
    "m": "coffee_house.order_value",
    "v": 12.45,
    "e": 1572273854,
    "t": ["product:latte", "order:online"]
}

注: これらのカスタムメトリクスは、ディストリビューションとして送信されます。以前に別の方法でカスタムメトリクスを送信していた場合は、ディストリビューションへのアップグレードの影響に関するドキュメントを参照してください

VPC での実行

Datadog Lambda レイヤーは、カスタムメトリクスを同期送信するためにパブリックインターネットへのアクセスを必要とします。Lambda 関数が VPC に関連付けられている場合は、代わりにカスタムメトリクスを非同期送信するか、関数がパブリックインターネットに到達できることを確認してください。

サードパーティライブラリの使用

カスタムメトリクスを Datadog に簡単に送信できるオープンソースライブラリは多数あります。ただし、多くは Lambda 用に最適化されたディストリビューションメトリクスを使用するように更新されていません。ディストリビューションメトリクスは、ホストまたはローカルで実行されるエージェントに依存しないサーバー側の集計を可能にします。エージェントのないサーバーレス環境では、ディストリビューションメトリクスにより柔軟な集計とタグ付けが可能になります。

AWS Lambda 用のサードパーティのメトリクスライブラリを評価する場合は、それがディストリビューションメトリクスをサポートしていることを確認してください。

[非推奨] CloudWatch ログの使用

このカスタムメトリクスの送信メソッドはもうサポートされておらず、すべての新しいお客様に対しては無効になっています。Lambda からカスタムメトリクスを送信する場合は、Datadog Lambda レイヤーを使うことが推奨されます。

これには、Datadog IAM ポリシーで次の AWS アクセス許可が必要です。

AWS アクセス許可説明
logs:DescribeLogGroups使用可能なロググループを一覧表示します。
logs:DescribeLogStreamsグループで使用可能なログストリームを一覧表示します。
logs:FilterLogEventsストリームの特定のログイベントを取得してメトリクスを生成します。

[非推奨] Lambda ログから Datadog にカスタムメトリクスを送信するには、次の形式を使用してログ行を出力します。

MONITORING|<UNIX_EPOCH_タイムスタンプ>|<メトリクス値>|<メトリクスタイプ>|<メトリクス名>|#<タグリスト>

ここで、

  • MONITORING は、このログエントリを収集する必要があることを Datadog インテグレーションに通知します。
  • <UNIX_EPOCH_TIMESTAMP> は秒単位です。ミリ秒ではありません。
  • <METRIC_VALUE> は、数値 (整数または浮動小数点数) でなければなりません。
  • <METRIC_TYPE> は、countgaugehistogram、または check です。
  • <METRIC_NAME> は、メトリクス命名ポリシーに従ってメトリクスを一意に識別します。
  • <タグリスト> はオプションです。先頭に # が付いたカンマ区切りリストです。カスタムメトリクスには、自動的にタグ function_name:<関数の名前> が適用されます。

: 各タイムスタンプに対する合計がカウントとして使用され、特定のタイムスタンプの最後の値がゲージとして使用されます。メトリクスをインクリメントするたびにログステートメントを出力することは、ログのパースにかかる時間が増大するため、お勧めしません。コードでメトリクスの値を継続的に更新し、関数が終了する前にメトリクスに 1 つのログステートメントを出力してください。

Datadog Lambda レイヤー

Datadog Lambda レイヤーは以下を担当します。

  • 呼び出し、エラー、コールドスタートなどのリアルタイム拡張 Lambda メトリクスを生成する
  • カスタムメトリクスの送信(同期および非同期)
  • アップストリームのリクエストからダウンストリームのサービスにトレースヘッダーを自動的に伝播します。これにより、Lambda 関数、ホスト、コンテナ、および Datadog Agent を実行している他のインフラストラクチャ全体で完全に分散されたトレースが可能になります。
  • dd-trace ライブラリをパッケージ化すると、Datadog のトレースライブラリを使用して Lambda 関数をトレースできるようになります。現在、Node.js、Python、Ruby で利用可能で、今後ランタイムは増える予定です。

Datadog Lambda レイヤーのインストールと使用

Datadog Lambda レイヤーのインストールと使用には、設定手順を参照してください。

収集データ

メトリクス

aws.lambda.duration
(gauge)
Measures the average elapsed wall clock time from when the function code starts executing as a result of an invocation to when it stops executing.
Shown as millisecond
aws.lambda.duration.maximum
(gauge)
Measures the maximum elapsed wall clock time from when the function code starts executing as a result of an invocation to when it stops executing.
Shown as millisecond
aws.lambda.duration.minimum
(gauge)
Measures the minimum elapsed wall clock time from when the function code starts executing as a result of an invocation to when it stops executing.
Shown as millisecond
aws.lambda.duration.sum
(gauge)
Measures the total execution time of the lambda function executing.
Shown as millisecond
aws.lambda.duration.p80
(gauge)
Measures the p80 elapsed wall clock time from when the function code starts executing as a result of an invocation to when it stops executing.
Shown as millisecond
aws.lambda.duration.p95
(gauge)
Measures the p95 elapsed wall clock time from when the function code starts executing as a result of an invocation to when it stops executing.
Shown as millisecond
aws.lambda.duration.p99
(gauge)
Measures the p99 elapsed wall clock time from when the function code starts executing as a result of an invocation to when it stops executing.
Shown as millisecond
aws.lambda.duration.p99.9
(gauge)
Measures the p99.9 elapsed wall clock time from when the function code starts executing as a result of an invocation to when it stops executing.
Shown as millisecond
aws.lambda.timeout
(gauge)
Measures the amount of allowed execution time for the function before the Lambda runtime stops it.
Shown as second
aws.lambda.memorysize
(gauge)
Measures the amount of allocated memory available to the function during execution.
Shown as mebibyte
aws.lambda.errors
(count)
Measures the number of invocations that failed due to errors in the function (response code 4XX).
Shown as error
aws.lambda.invocations
(count)
Measures the number of times a function is invoked in response to an event or invocation API call.
Shown as invocation
aws.lambda.throttles
(count)
Measures the number of Lambda function invocation attempts that were throttled due to invocation rates exceeding the customer's concurrent limits (error code 429). Failed invocations may trigger a retry attempt that succeeds.
Shown as throttle
aws.lambda.iterator_age
(gauge)
Measures the age of the last record for each batch of records processed
Shown as millisecond
aws.lambda.iterator_age.minimum
(gauge)
Measures the minimum age of the last record for each batch of records processed
Shown as millisecond
aws.lambda.iterator_age.maximum
(gauge)
Measures the maximum age of the last record for each batch of records processed
Shown as millisecond
aws.lambda.iterator_age.sum
(gauge)
Measures the sum of the ages of the last record for each batch of records processed
Shown as millisecond
aws.lambda.dead_letter_errors
(count)
Measures the sum of times Lambda is unable to write the failed event payload to your configured Dead Letter Queues.
Shown as error
aws.lambda.concurrent_executions
(gauge)
Measures the average of concurrent executions for a given function at a given point in time.
Shown as execution
aws.lambda.concurrent_executions.minimum
(gauge)
Measures the minimum of concurrent executions for a given function at a given point in time.
Shown as execution
aws.lambda.concurrent_executions.maximum
(gauge)
Measures the maximum of concurrent executions for a given function at a given point in time.
Shown as execution
aws.lambda.concurrent_executions.sum
(gauge)
Measures the sum of concurrent executions for a given function at a given point in time.
Shown as execution
aws.lambda.unreserved_concurrent_executions
(gauge)
Measures the sum of the concurrency of the functions that don't have a custom concurrency limit specified.
Shown as execution
aws.lambda.provisioned_concurrent_executions
(gauge)
Measures the average number of events that are being processed on provisioned concurrency
Shown as execution
aws.lambda.provisioned_concurrent_executions.minimum
(gauge)
Measures the minimum number of events that are being processed on provisioned concurrency
Shown as execution
aws.lambda.provisioned_concurrent_executions.maximum
(gauge)
Measures the maximum number of events that are being processed on provisioned concurrency
Shown as execution
aws.lambda.provisioned_concurrency_invocations
(count)
Measures the number of invocations that are run on provisioned concurrency
Shown as invocation
aws.lambda.provisioned_concurrency_spillover_invocations
(count)
Measures the number of invocations that are run on non-provisioned concurrency when all provisioned concurrency is in use
Shown as invocation
aws.lambda.provisioned_concurrency_utilization
(gauge)
Measures the average fraction of provisioned concurrency in use for a given function at a given point in time
Shown as percent
aws.lambda.provisioned_concurrency_utilization.minimum
(gauge)
Measures the minimum fraction of provisioned concurrency in use for a given function at a given point in time
Shown as percent
aws.lambda.provisioned_concurrency_utilization.maximum
(gauge)
Measures the maximum fraction of provisioned concurrency in use for a given function at a given point in time
Shown as percent

AWS から取得される各メトリクスには、関数名やセキュリティグループなど、AWS コンソールに表示されるタグと同じタグが割り当てられます。

カスタムメトリクスには関数名だけがタグ付けされます。

イベント

AWS Lambda インテグレーションには、イベントは含まれません。

サービスのチェック

AWS Lambda インテグレーションには、サービスのチェック機能は含まれません。

トラブルシューティング

ご不明な点は、Datadog のサポートチームまでお問合せください。

その他の参考資料