Lambda 関数のメトリクスを表示する - AWS Lambda

Lambda 関数のメトリクスを表示する

AWS Lambda 関数がイベントの処理を終了すると、Lambda は呼び出しに関するメトリクスを Amazon CloudWatch に送信します。これらのメトリクスについては料金は発生しません。

CloudWatch コンソールでは、これらのメトリクスを使用してグラフとダッシュボードを作成できます。使用率、パフォーマンス、エラー率の変化に対応するようにアラームを設定できます。Lambda は、メトリクスデータを 1 分間隔で CloudWatch に送信します。Lambda 関数をより迅速に把握するには、Serverless Land で説明されている高解像度のカスタムメトリクスを作成できます。料金は、カスタムメトリクスと CloudWatch アラームに対して適用されます。詳細については、「Amazon CloudWatch 料金表」をご覧ください。

このページでは、CloudWatch コンソールで使用可能な Lambda 関数の呼び出し、パフォーマンス、および同時実行のメトリクスについて説明します。

CloudWatch コンソールでのメトリクスの表示

CloudWatch コンソールを使用して、関数名、エイリアス、またはバージョンで関数メトリクスをフィルターおよびソートできます。

CloudWatch コンソールでメトリクスを表示するには
  1. CloudWatch コンソールで [Metrics] (メトリクス) ページ (AWS/Lambda 名前空間) を開きます。

  2. [参照] タブの [メトリクス] で、次のいずれかのディメンションを選択します。

    • 関数名を基準 (FunctionName) - 関数のすべてのバージョンおよびエイリアスの集計メトリクスを表示します。

    • リソースを基準 (Resource) - 関数のバージョンまたはエイリアスのメトリクスを表示します。

    • 実行バージョンを基準 (ExecutedVersion) - エイリアスおよびバージョンの組み合わせのメトリクスを表示します。ExecutedVersion ディメンションを使用して、両方とも加重エイリアスのターゲットである 2 つのバージョンの関数のエラー率を比較します。

    • [全関数] (なし) - 現在の AWS リージョン 内のすべての関数の集計メトリクスを表示します。

  3. メトリクスを選択し、[グラフに追加] または別のグラフオプションを選択します。

デフォルトでは、グラフはすべてのメトリクスで Sum 統計を使用します。別の統計を選択してグラフをカスタマイズするには、[Graphed metrics] タブのオプションを使用します。

注記

メトリクスのタイムスタンプには、関数が呼び出された時間が反映されます。呼び出し時間によっては、数分後にメトリクスが生成される場合があります。例えば、関数のタイムアウトが 10 分の場合は、正確なメトリクスを得るために過去 10 分以上を確認します。

Amazon CloudWatch の詳細については、Amazon CloudWatch ユーザーガイドを参照してください。

メトリクスの種類

次のセクションでは、CloudWatch コンソールで使用できる Lambda メトリクスのタイプについて説明します。

呼び出しメトリクス

呼び出しメトリクスは、Lambda 関数の呼び出しの結果を示すバイナリインジケータです。例えば、関数がエラーを返した場合、Lambda は値 1 の Errors メトリクスを送信します。1 分ごとに発生した関数エラーの数を取得するには、1 分間の Errors メトリクスの Sum を表示します。

注記

Sum 統計と共に、次の呼び出しメトリクスを表示します。

  • Invocations – 関数コードが呼び出された回数 (成功した呼び出しや関数エラーが発生した呼び出しを含む)。呼び出しリクエストがスロットリングされた場合、呼び出しは記録されません。それ以外の場合は、呼び出しエラーになります。Invocations の値は請求対象リクエストの数に等しくなります。

  • Errors - 関数エラーが発生した呼び出しの数。関数エラーには、コードによってスローされた例外と、Lambda ランタイムによってスローされた例外が含まれます。ランタイムは、タイムアウトや設定エラーなどの問題に対してエラーを返します。エラー率を計算するには、Errors の値を Invocations の値で割ります。エラーメトリクスのタイムスタンプは、エラーが発生した時点ではなく、関数が呼び出された時間を反映していることに注意してください。

  • DeadLetterErrors非同期呼び出しの場合、Lambda がイベントをデッドレターキュー (DLQ) に送信しようとしたが、失敗した回数。デッドレターエラーは、リソースの誤設定またはサイズ制限が原因で発生する可能性があります。

  • DestinationDeliveryFailures– 非同期呼び出しおよびサポートされているイベントソースマッピングの場合、Lambda がイベントを送信先に送信しようとして失敗した回数。イベントソースマッピングの場合、Lambda はストリームソース (DynamoDB および Kinesis) の送信先をサポートします。配信エラーは、アクセス許可エラー、リソースの誤設定、またはサイズ制限が原因で発生する可能性があります。設定した送信先が Amazon SQS FIFO キューまたは Amazon SNS FIFO トピックなどのサポートされていないタイプの場合にも、エラーが発生する可能性があります。

  • Throttles - スロットリングされた呼び出しリクエストの数。すべての関数インスタンスがリクエストを処理していて、スケールアップできる同時実行がない場合、Lambda は TooManyRequestsException エラーを出して追加のリクエストを拒否します。スロットリングされたリクエストやその他の呼び出しエラーは、Invocations または Errors のいずれかとしてカウントされません。

  • OversizedRecordCount — Amazon DocumentDB イベントソースの場合における、関数が変更ストリームから受け取るイベントのうちサイズが 6 MB を超えるイベントの数。Lambda はメッセージをドロップし、このメトリクスを送信します。

  • ProvisionedConcurrencyInvocations - プロビジョニングされた同時実行を使用して関数コードが呼び出された回数。

  • ProvisionedConcurrencySpilloverInvocations - プロビジョニングされたすべての同時実行が使用されているときに、標準同時実行を使用して関数コードが呼び出された回数。

  • RecursiveInvocationsDropped – 関数が無限再帰ループの一部である問題が検出されたことが原因で、Lambda が関数の呼び出しを停止した回数。再帰ループ検出機能は、サポートされている AWS SDK によって追加されたメタデータを追跡することで、リクエストチェーンの一部として関数が呼び出された回数をモニタリングします。デフォルトでは、関数がリクエストチェーンの一部として約 16 回呼び出された場合、Lambda は次の呼び出しをドロップします。再帰ループ検出機能を無効にすると、このメトリクスは出力されません。この機能の詳細については、「Lambda 再帰ループ検出を使用した無限ループの防止」を参照してください。

パフォーマンスメトリクス

パフォーマンスメトリクスは、単一の関数呼び出しに関するパフォーマンスの詳細を提供します。たとえば、Duration メトリクスは、関数がイベントの処理に費やす時間をミリ秒単位で示します。関数がイベントを処理する速度を把握するには、Average または Max 統計を使用してこれらのメトリクスを表示します。

  • Duration - 関数コードがイベントの処理に費やす時間。呼び出しの請求期間は、最も近いミリ秒に切り上げた Duration の値です。Duration にコールドスタート時間は含まれません。

  • PostRuntimeExtensionsDuration - 関数コードの完了後、拡張のためにランタイムがコードの実行に費やした累積時間。

  • IteratorAge — DynamoDB、Kinesis、および Amazon DocumentDB イベントソースの場合における、イベントの最後のレコードの経過時間。このメトリクスは、ストリームがレコードを受信してから、イベント ソース マッピングがイベントを関数に送信するまでの時間を測定します。

  • OffsetLag - セルフマネージド Apache Kafka および Amazon Managed Streaming for Apache Kafka (Amazon MSK) イベントソースの場合、トピックに書き込まれた最後のレコードと関数が処理した最後のレコードとのオフセットの差分。Kafka トピックは複数のパーティションを持つことができますが、このメトリクスはトピックレベルでのオフセット遅延を測定します。

また、Duration はパーセンタイル (p) 統計もサポートしています。Average 統計と Maximum 統計を歪める外れ値を除外するには、パーセンタイルを使用します。例えば、p95 統計は、呼び出しの 95% の最大所要時間を示します。ただし、最も遅い 5% は除きます。詳細については、「Amazon CloudWatch ユーザーガイド」の「パーセンタイル」を参照してください。

同時実行メトリクス

Lambda は、関数、バージョン、エイリアス、または AWS リージョン 全体でイベントを処理するインスタンスの総数として同時実行メトリクスを報告します。同時実行の制限に達するまであとどれくらいかを確認するには、Max 統計とともにこれらのメトリクスを表示します。

  • ConcurrentExecutions - イベントを処理している関数インスタンスの数。この数値がリージョンの同時実行クォータ、または関数で設定した予約済み同時実行制限に達すると、Lambda は追加の呼び出しリクエストをスロットリングします。

  • ProvisionedConcurrentExecutions - プロビジョニングされた同時実行を使用してイベントを処理している関数インスタンスの数。Lambda は、プロビジョニングされた同時実行を使用するエイリアスまたはバージョンの呼び出しごとに、現在の数を出力します。

  • ProvisionedConcurrencyUtilization - バージョンまたはエイリアスの場合、ProvisionedConcurrentExecutions の値をプロビジョニングされた同時実行の合計量で割ります。例えば、関数に 10 のプロビジョニングされた同時実行数を設定して ProvisionedConcurrentExecutions が 7 の場合、ProvisionedConcurrencyUtilization は 0.7 になります。

  • UnreservedConcurrentExecutions – リージョンの場合、同時実行が予約されていない関数によって処理されているイベントの数。

  • ClaimedAccountConcurrency — リージョンに関する、オンデマンド呼び出しでは使用できない同時実行の量。ClaimedAccountConcurrency は、UnreservedConcurrentExecutions に割り当てられた同時実行数を加えたものに等しくなります (つまり、予約された同時実行数の合計にプロビジョニングされた同時実行数の合計を加えたもの)。詳細については、「ClaimedAccountConcurrency メトリクスの処理」を参照してください。

非同期呼び出しメトリクス

非同期呼び出しメトリクスは、イベントソースからの非同期呼び出しおよび直接呼び出しに関する詳細を提供します。しきい値とアラームを設定して、特定の変更を通知できます。例えば、処理用にキューに入れられるイベントの数が意図せず増えた場合 (AsyncEventsReceived) や、イベントが処理されるのを長時間待っていた場合 (AsyncEventAge) です。

  • AsyncEventsReceived — Lambda が処理のために正常にキューに入れられたイベントの数。このメトリクスは、Lambda 関数が受け取るイベントの数に関するインサイトを提供します。このメトリクスをモニタリングし、しきい値のアラームを設定して問題がないか確認します。例えば、Lambda に送信された望ましくない数のイベントを検出したり、誤ったトリガーや関数設定に起因する問題を迅速に診断したりします。AsyncEventsReceivedInvocations が一致しない場合は、処理にばらつきがあるか、イベントがドロップされているか、キューが未処理になっている可能性があります。

  • AsyncEventAge — Lambda がイベントを正常にキューに入れてから、関数が呼び出されるまでの時間。このメトリクスの値は、呼び出しの失敗またはスロットリングによってイベントが再試行されるときに増加します。このメトリクスをモニタリングし、キューの蓄積が発生したときのさまざまな統計のしきい値にアラームを設定します。このメトリクスの増加をトラブルシューティングするには、Errors メトリクスを調べて関数エラーを特定し、Throttles メトリクスを見て同時実行の問題を特定します。

  • AsyncEventsDropped — 関数を正常に実行せずにドロップされたイベントの数。デッドレターキュー (DLQ) または OnFailure 送信先を設定すると、イベントはドロップされる前にそこに送信されます。イベントは、さまざまな理由でドロップされます。例えば、イベントがイベントの最大有効期間を超えたり、再試行回数が上限に達したり、予約された同時実行数が 0 に設定されたりすることがあります。イベントがドロップされる理由をトラブルシューティングするには、関数エラーを特定する Throttlesメトリクスと、同時実行の問題を特定する Errors メトリクスを調べてください。