Amazon CloudWatch Lambda Insights を使用した関数パフォーマンスのモニタリング - AWS Lambda

Amazon CloudWatch Lambda Insights を使用した関数パフォーマンスのモニタリング

Amazon CloudWatch Lambda Insights は、サーバーレスアプリケーションの Lambda 関数ランタイムパフォーマンスメトリクスとログを収集および集計します。このページでは、Lambda Insights を有効にして Lambda 関数に関する問題の診断に使用する方法について説明します。

Lambda Insights によるサーバーレスアプリケーションのモニタリング方法

CloudWatch Lambda Insights は、 で実行されているサーバーレスアプリケーション用のモニタリングおよびトラブルシューティングソリューションですAWS Lambda このソリューションでは、CPU 時間、メモリ、ディスク、ネットワーク使用率などのシステムレベルのメトリクスが収集、集約、要約されます。また、コールドスタートや Lambda ワーカーシャットダウンなどの診断情報が収集、集約、要約されるため、Lambda 関数に関する問題を特定し、迅速に解決できます。

Lambda Insights は、Lambda レイヤーとして提供される新しい CloudWatch Lambda 拡張機能を使用します。この拡張機能を、サポートされているランタイムで、Lambda 関数で有効にすると、システムレベルのメトリクスが収集され、その Lambda 関数の呼び出しごとに 1 つのパフォーマンスログイベントが発生します。CloudWatch は、埋め込みメトリクスフォーマットを使用して、ログイベントからメトリクスを抽出します。詳細については、「AWS Lambda 拡張機能の使用」を参照してください。

Lambda Insights レイヤーは、/aws/lambda-insights/ ロググループ用に CreateLogStream および PutLogEvents を拡張します。

料金

Lambda 関数に対して Lambda Insights を有効にすると、Lambda Insights は関数ごとに 8 つのメトリックスを報告し、関数呼び出しごとに約 1 KB のログデータが CloudWatch に送信されます。料金は、Lambda Insights によって関数に関してレポートされたメトリックスとログに対してのみ発生します。最低料金やサービス使用義務はありません。関数が呼び出されない場合、Lambda Insights に対する支払いはありません。料金の例については、Amazon CloudWatch の料金を参照してください。

ランタイムのサポート

Lambda Insights は、Lambda 拡張機能をサポートする任意のランタイムで使用できます。

Lambda コンソールで Lambda Insights を有効にする

新規および既存の Lambda 関数で、Lambda Insights 拡張モニタリングを有効にできます。サポートされているランタイムの Lambda コンソールの関数で Lambda Insights を有効にすると、Lambda は Lambda Insights 拡張機能をレイヤーとして関数に追加し、関数の実行ロールに必要な CloudWatchLambdaInsightsExecutionRolePolicy ポリシーを検証するか、アタッチしようとします。

Lambda コンソールで Lambda Insights を有効にするには
  1. Lambda コンソールの [関数ページ] を開きます。

  2. 関数を選択します。

  3. [設定] タブを選択します。

  4. 左側のメニューで [モニタリングおよび運用ツール] を選択します。

  5. [その他の監視ツール] ペインで、[編集] を選択します。

  6. [CloudWatch Lambda インサイト] で、[拡張モニタリング] をオンにします。

  7. [Save] を選択します。

Lambda Insights をプログラムで有効にする

Lambda Insights は、AWS Command Line Interface (AWS CLI)、AWS Serverless Application Model (SAM) CLI、AWS CloudFormation、または、AWS Cloud Development Kit (AWS CDK)を使用して有効にすることもできます。Lambda Insights を、プログラムを使って、サポートされているランタイムの関数で有効にすると、CloudWatch は、CloudWatchLambdaInsightsExecutionRolePolicy ポリシーを関数の実行ロールにアタッチします。

詳細については、Amazon CloudWatch ユーザーガイドLambda Insights を使用するを参照してください。

Lambda Insights ダッシュボードの使用

Lambda Insights のダッシュボードには、CloudWatch コンソールに multi-function overview と single-function view という 2 つの画面があります。multi-function overview では、現在の AWS アカウントとリージョンの Lambda 関数のランタイムメトリクスが集計されます。single-function view では、単一の Lambda 関数で使用可能なランタイムメトリクスが表示されます。

Lambda Insights ダッシュボードの CloudWatch コンソールにある multi-function overview を使用して、使用率の高い Lambda 関数と使用率の低い Lambda 関数を識別できます。Lambda Insights ダッシュボードの CloudWatch コンソールにある single-function view を使用して、個々のリクエストのトラブルシューティングを行うことができます。

すべての関数のランタイムメトリクスを表示するには
  1. CloudWatch コンソールで [Multi-function (複数の関数)] ページを開きます。

  2. 定義済みの時間範囲から選択するか、カスタムの時間範囲を選択します。

  3. (オプション) CloudWatch ダッシュボードにウィジェットを追加するには、[Add to dashboard (ダッシュボードに追加)] を選択します。

    Lambda Insights ダッシュボードの multi-function overview。
1 つの関数のランタイムメトリクスを表示するには
  1. CloudWatch コンソールで [Single-function (単一の関数)] ページを開きます。

  2. 定義済みの時間範囲から選択するか、カスタムの時間範囲を選択します。

  3. (オプション) CloudWatch ダッシュボードにウィジェットを追加するには、[Add to dashboard (ダッシュボードに追加)] を選択します。

    Lambda Insights ダッシュボードの single-function view。

詳細については、CloudWatch ダッシュボードでのウィジェットの作成と操作を参照してください。

関数の異常を検出するワークフローの例

Lambda Insights ダッシュボードの multi-function overview を使用して、関数でのコンピュートメモリの異常を特定および検出できます。例えば、multi-function overview で、関数が大量のメモリを使用していることが示されている場合、[Memory Usage] ペインで詳細なメモリ使用率メトリクスを表示できます。その後、[Metrics] ダッシュボードに移動して、異常検出を有効にするか、アラームを作成できます。

関数の異常検出を有効にするには
  1. CloudWatch コンソールで [Multi-function (複数の関数)] ページを開きます。

  2. [Function summary] で、関数の名前を選択します。

    single-function view が開き、関数のランタイムメトリクスが表示されます。

    Lambda Insights ダッシュボードの関数概要ペイン。
  3. [Memory Usage] ペインで、3 つの縦のドットを選択し、[View in metrics] を選択して [Metrics] ダッシュボードを開きます。

    [Memory Usage (メモリ使用状況)] ペインのメニュー。
  4. [Graphed Metrics] タブの [Actions] 列で、最初のアイコンを選択して関数の異常検出を有効にします。

    [Memory Usage (メモリ使用状況)] ペインの [Graphed Metrics (グラフ化されたメトリクス)] タブ

詳細については、CloudWatch の異常検出の使用方法を参照してください。

クエリを使用して関数のトラブルシューティングを行うワークフローの例

Lambda Insights ダッシュボードの single-function view を使用して、関数の所要時間が急増する根本原因を特定できます。例えば、multi-function overview で関数の所要時間が大きく増加している場合は、[Duration] ペインで一時停止するか、各関数を選択して、どの関数が増加の原因になっているかを判断できます。次に、single-function view に移動し、[Application logs] を確認して、根本原因を特定できます。

関数に対してクエリを実行するには
  1. CloudWatch コンソールで [Multi-function (複数の関数)] ページを開きます。

  2. [Duration] ペインで、所要時間メトリクスをフィルタリングする関数を選択します。

    [Duration (所要時間)] ペインで選択された関数。
  3. [Single-function (単独の関数)] ページを開きます。

  4. [Filter metrics by function name] ドロップダウンリストを選択し、関数を選択します。

  5. [Most recent 1000 application logs] を表示するには、[Application logs] タブを選択します。

  6. [Timestamp] と [Message] を確認し、トラブルシューティングを行う呼び出しリクエストを特定します。

  7. 最新の 1000 の呼び出し] を表示するには、[Invocations (呼び出し)] タブを選択します。

  8. トラブルシューティングを行う呼び出しリクエストの [Timestamp] または [Message] を選択します。

    最近の呼び出しリクエストを選択します。
  9. [View logs] ドロップダウンリストを選択し、[View performance logs] を選択します。

    関数の自動生成されたクエリが [Logs Insights] ダッシュボードで開きます。

  10. [Run query] を選択して、呼び出しリクエストの [Logs] メッセージを生成します。

    [Logs Insights] (ログインサイト) ダッシュボードで選択した関数をクエリします。

次のステップ

  • CloudWatch Logs ダッシュボードの作成方法については、Amazon CloudWatch ユーザーガイドCreate a Dashboard を参照してください。

  • CloudWatch Logs ダッシュボードにクエリを追加する方法については、Amazon CloudWatch ユーザーガイドAdd Query to Dashboard or Export Query Results を参照してください。