Datadog は、エラーとパフォーマンスの問題を解決するための提案を自動的に生成し、サーバーレスアプリケーションのコストを最適化します。

Watchdog for Serverless が提供するインサイトに加え、Datadog Serverless Monitoring は、関数に関する多くの問題を検出し、警告を作成します。

セットアップ

Datadog は、AWS CloudWatch メトリクス、Datadog 拡張 AWS Lambda メトリクス、Lambda REPORT ログラインを使用して、警告を提案します。これらを設定するには、

  1. Amazon Web Services インテグレーションをセットアップします。
  2. Datadog Forwarder を設定し、Lambda の REPORT ログが Datadog でインデックスに登録されていることを確認します。
  3. 関数に対して拡張 Lambda メトリクスを有効にします。

: Datadog は、AWS インテグレーションを設定した後、すぐに High ErrorsHigh DurationThrottledHigh Iterator Age 警告を生成します。個々の呼び出しで生成されたものを含む他のすべての警告には、Datadog Forwarder拡張 Lambda メトリクスが必要です。

生成された警告

エラー

関数の呼び出しの 1% 以上が、選択した時間範囲のエラーでした。

解決策: 関数のログを調べ、Deployment Tracking で最近のコードまたはコンフィギュレーションの変更を確認するか、分散型トレーシングでマイクロサービス全体の障害を探します。

エラー率が高い

関数の呼び出しの 10% 以上が、選択した時間範囲のエラーでした。

解決策: 関数のログを調べ、Deployment Tracking で最近のコードまたはコンフィギュレーションの変更を確認するか、分散型トレーシングでマイクロサービス全体の障害を探します。

メモリ使用率が高い

選択した時間範囲内の少なくとも 1 回の呼び出しで、割り当てられたメモリの 95% 以上が使用されました。

分散型トレーシングは、メモリ制限が低い Lambda 関数と、過剰なメモリを使用しているアプリケーションの一部を特定するのに役立ちます。

解決策: 構成された最大メモリに近い値を使用する Lambda 関数は、Lambda ランタイムによって強制終了されるリスクがあり、ユーザー向けのエラーが発生します。関数に構成されているメモリの量を増やすことを検討してください。これは AWS の請求に影響する可能性があることに注意してください。

継続時間が長い

選択した時間範囲内の少なくとも 1 回の呼び出しが、構成されたタイムアウトの 95% を超えました。

分散型トレーシングは、アプリケーションの遅い API 呼び出しを特定するのに役立ちます。

解決策: 構成されたタイムアウトに近い時間実行されている Lambda 関数は、Lambda ランタイムによって強制終了されるリスクがあります。これにより、着信リクエストへの応答が遅くなったり失敗したりする可能性があります。関数にさらに実行時間が必要になると予想される場合は、構成されたタイムアウトを増やすことを検討してください。これは AWS の請求に影響する可能性があることに注意してください。

コールドスタート

関数の呼び出しの 1% 以上が、選択した時間範囲でのコールドスタートでした。

Datadog の拡張メトリクスおよび分散型トレーシングは、今日のアプリケーションに対するコールドスタートの影響を理解するのに役立ちます。

解決策: コールドスタートは、サーバーレスアプリケーションがトラフィックの突然の増加を受信したときに発生し、関数が以前に非アクティブだったとき、または比較的一定数のリクエストを受信していたときに発生する可能性があります。ユーザーは、コールドスタートを遅い応答時間または遅延として認識する場合があります。コールドスタートに先行するには、影響を受ける Lambda 関数でプロビジョニングされた同時実行を有効にすることを検討してください。これは AWS の請求に影響する可能性があることに注意してください。

メモリ不足

選択した時間範囲内の少なくとも 1 回の呼び出しでメモリが不足しました。

解決策: 割り当てられた量を超えるメモリを使用する Lambda 関数は、Lambda ランタイムによって強制終了される可能性があります。ユーザーにとって、これはアプリケーションへのリクエストの失敗のように見える場合があります。分散型トレーシングは、過剰な量のメモリを使用してアプリケーションの一部を特定するのに役立ちます。Lambda 関数が使用できるメモリの量を増やすことを検討してください。

Timeouts

選択した時間範囲内の少なくとも 1 回の呼び出しがタイムアウトしました。これは、関数が設定されたタイムアウトまたはグローバル Lambda タイムアウトより長く実行された場合に発生します。

解決策: 分散型トレーシングは、API やその他のマイクロサービスへの遅いリクエストを特定するのに役立ちます。関数のタイムアウトを増やすことも検討できます。これは AWS の請求に影響する可能性があることに注意してください。

Throttles

選択した時間範囲での呼び出しの 10% 以上が抑制されました。サーバーレス Lambda アプリケーションが適切な同時実行性なしで高レベルのトラフィックを受信すると、抑制が発生します。

解決策: Lambda 同時実行メトリクスを確認し、aws.lambda.concurrent_executions.maximum が AWS アカウントの同時実行レベルに近づいているかどうかを確認します。その場合は、予約済みの同時実行を構成するか、AWS にサービスクォータの増加をリクエストしてください。これは AWS の請求に影響する可能性があることに注意してください。

イテレータ経過時間が長い

関数のイテレータが 2 時間以上経過していました。イテレータの経過時間は、ストリームから処理されたレコードの各バッチの最後のレコードの経過時間を測定します。この値が増加すると、関数がデータを十分に高速に処理できないことを意味します。

解決策: 分散型トレーシングを有効にして、関数に大量のデータがストリーミングされている理由を特定します。関数が読み取るストリームのシャード数とバッチサイズを増やすことも検討できます。

オーバープロビジョン

選択した時間範囲で、割り当てられたメモリの 10% を超える呼び出しは使用されませんでした。これは、関数に必要以上の請求可能なリソースが割り当てられていることを意味します。

解決策: Lambda 関数に割り当てられるメモリの量を減らすことを検討してください。これは AWS の請求に影響する可能性があることに注意してください。

その他の参考資料

お役に立つドキュメント、リンクや記事: