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 の請求に影響する可能性があることに注意してください。

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

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

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

オーバープロビジョン

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

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

脅威を検出

サーバーレス アプリケーションを標的とする攻撃試行が検出されました。

解決策: AAP で Security Signals ボタンをクリックして攻撃試行を調査し、対応方法を判断してください。緊急対応が必要な場合は、Workflows インテグレーション を通じて WAF で攻撃元 IP をブロックできます。

割り当て不足

この関数の CPU 使用率は平均で 80% を超えていました。これは、追加の CPU リソースを付与することで性能が向上する可能性があることを意味します。

解決策: Lambda 関数の 割り当てメモリ を増やすことを検討してください。メモリの容量を増やすと、利用可能な CPU リソースもスケールします。なお、AWS の請求額に影響する可能性があります。

プロビジョンド コンカレンシーの過剰割り当て

この関数のプロビジョンド コンカレンシーの利用率は 60% 未満でした。AWS によると、プロビジョンド コンカレンシーは、利用率が一貫して 60% を超える場合にコスト面で最適化されます

解決策: 関数に設定しているプロビジョンド コンカレンシーの設定値を減らすことを検討してください。

サポート終了のランタイム

この関数のランタイムは サポート終了 です。

解決策: 最新のセキュリティ、パフォーマンス、信頼性の標準に追従するため、最新のランタイムにアップグレードしてください。

最大実行時間に接近

選択した期間内の少なくとも 1 回の呼び出しが、最大実行時間の上限である 15 分に近づきました。

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

解決策: 最大タイムアウトである 15 分に近づいた Lambda 関数は、Lambda ランタイムによって強制終了されるリスクがあります。これにより、受信リクエストへの応答が遅くなったり、失敗したりする可能性があります。Lambda 関数のパフォーマンス改善、Step Functions における小さな関数への分割、またはワークロードを ECS Fargate のような長時間実行の環境へ移行することを検討してください。

再帰呼び出しのドロップ

この関数の呼び出しには再帰ループがあり、一般的には AWS エンティティ間の再帰的なトリガー (例: Lambda -> SQS -> Lambda) が原因です。これが maxReceiveCount (既定値 16) を超えると、このメトリクスに加算されます。詳細は、Lambda の再帰ループ検出を使用して無限ループを防止する を参照してください。

解決策: この関数に関連する AWS エンティティ内の再帰呼び出しを特定してください。SQS、SNS、S3 などの関連エンティティを確認します。

その他の参考資料