Lambda Insights | さゆフィクション http://it.kensan.net/it aws wordpress などなどゆるーく書いてます Tue, 25 Apr 2023 21:22:38 +0000 ja hourly 1 https://wordpress.org/?v=6.5.2 https://it.kensan.net/wp-content/uploads/2023/03/cropped-icon-32x32.png Lambda Insights | さゆフィクション http://it.kensan.net/it 32 32 AWS Lambda InsightsとX-Rayを併用した場合にどんなことができるか https://it.kensan.net/lambda-insights-x-ray.html Thu, 23 Feb 2023 00:37:33 +0000 http://3.113.9.194/it/?p=509 Lambda InsightsとX-Rayを併用した場合にできることを記載します。

結論:Lambda Insightsでシステムレベルのメトリクスを確認し、気になる箇所があればX-Rayでパフォーマンスを視覚的に確認することができます。

Lambda InsightsとX-Rayはそれぞれざっくり以下のような特徴があります。

それでは、まずLambda InsightsとX-Rayを有効化していきます。

Lambda InsightsとX-Rayの有効化

関数作成して、Lambda InsightsとX-Rayを有効化していきます。

既存関数の有効化を行いたい場合は、関数作成を読み飛ばしてください。

関数の作成

Lambda関数を作成します。(既存の関数のLambda InsightsとX-Rayの有効化をする場合は、この手順をスキップしてください)

  • 関数名:適切なもの
  • ランタイム:Node.js 18.x

ソースコードを以下のソースコードに置き換えデプロイします。

1秒スリープ後にレスポンスを返すソースコードになります。


const sleep = (m) => {
  return new Promise((resolve) => setTimeout(resolve, m));
};
export const handler = async(event) => {
    console.log("Start!");
    await sleep(1000);
    console.log("End!");
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

ロールの設定

次のロールを割り当てます。

Lambda InsightsとX-Rayを開始するために必要な権限となります。


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

Lambda InsightsとX-Rayを有効化(開始)する

「設定タブ→モニタリングおよび運用ツール」から開始します。

以下の画面で拡張モニタリング」とAWS X-Ray」をONにします。

Lambda Insights X-Ray有効化

Lambda Insights X-Ray有効化

Lambda InsightsとX-Rayの併用した場合にどんなことができるか

まず以下の手順でLambda InsightsとX-Rayを有効化した関数のパフォーマンスのモニタリング画面へいきます。

  1. CloudWatch->Lambda Insightsとメニューをたどる
  2. シングルファンクションを選択する
  3. Lambda InsightsとX-Rayを有効化した関数を選択する

パフォーマンスのモニタリング画面の下の方に以下の表示があります。

Lambda Insights パフォーマンスのモニタリング画面

Lambda Insights パフォーマンスのモニタリング画面

トレース項目の表示リンクを押下するとX-Rayのトレース画面(以下の画面)に遷移し、パフォーマンスの可視化が可能です。

一部のリクエストにしか表示リンクがないのは、トレースがサンプリングで行われているためです。(X-Rayは全てをトレースしているわけではなく、サンプリングでトレースしている)

X-Rayトレース

X-Rayトレース

Lambda Insightsでシステムレベルのメトリクスを確認し、気になる箇所があればX-Rayでパフォーマンスを視覚的に確認することができます。

まとめ

Lambda InsightsとX-Rayを併用した場合にできることみてきましたー

便利そうですが、費用もかかるので調査等で必要な時だけ、Lambda InsightsとX-Rayを有効化し、不要な時は無効化しておいた方が良さそうです

X-Rayの料金

料金- AWS X-Ray | AWS
AWS X-Ray では、使用した分のみ料金が発生します。最低料金設定はありません。1 か月に保存されたトレースの数、および 1 か月にスキャンまたは取得されたトレースの数に対して課金されます。トレースが保持される期間は、記録後 30 日間のみです。

Lambda Insightsの料金

料金 - Amazon CloudWatch | AWS
Amazon CloudWatch は無料で始めることができ、また 、無料利用枠内でご利用いただけるアプリケーションも多数ご用意しています。このページでは Amazon CloudWatch に関する各種お見積もりや API 使用時のコスト予測についてご説明します。
]]>
AWS Lambdaのコールドスタートの有無とコールドスタートに要した時間を確認する方法 https://it.kensan.net/aws-lambda-cold-start.html Tue, 21 Feb 2023 05:19:04 +0000 http://3.113.9.194/it/?p=489 Lambdaのコールドスタートの有無やコールドスタートにかかった時間を調査する方法を記載します。

コールドスタートの情報を得るには、Lambda InsightsまたはAWS X-Rayのどちらかを使用する必要があります。

コールドスタート調査

Lambda Insights
AWS X-Ray

 

本記事ではLambda Insightsを使用したコールドスタートの調査方法を記載します。

なお、Lambda Insightsを有効化済みであることを前提に記載しますので、Lambda Insightsの有効化をしていない方は、以下の記事を参考に有効化くださいー

AWS LambdaでX-Rayを有効化する方法と無効化する方法
AWS Lambda で X-Rayの有効化と無効化の切り替えは簡単に行えます。X-Rayは有料ですので、パフォーマンスに問題発生時など調査が必要な時だけ有効化、不要な時は無効化した方がいいと思います。Lambda関数の実行数に応じて(トレースする数に応じて)料金も増えていくので、実行数が多い場合は要注意かと思います

また、AWS X-Rayを使用したコールドスタートの調査方法は以下の記事をご参照ください。

AWS LambdaでX-Ray使用時のX-Ray画面の見方
LambdaでX-Rayを使用すると、Service Mapでサービス全体の性能を見ることができます。トレースではリクエスト毎の性能を見ることができます。トレースではコールドスタートの情報を取得することも可能です。Lambda 関数コード内の処理を AWS X-Ray でトレースすることもできます。

それでは、Lambda Insightsを使用したコールドスタートの調査について記載していきます。

 

コールドスータートの調査方法

Lambda Insightsを有効にすることによって出力されるパフォーマンスログから調査を行います。

ログは、CloudWatch->ログ->ロググループ->「/aws/lambda-insights」->Log insightsで表示とメニューをたどると確認できます

まずは、コールドスタートの有無について、確認する方法を記載します。

コールドスタートの有無について

Log insightsでパフォーマンスログを見ると「cold_start」という項目があります。

  • cold_start
    • 値が「1」の場合はコールドスタート
    • 値が「0」の場合はコールドスタートではない

上記のように読み取ることができます。

以下のクエリでコールドスタートの回数をカウントすることができます。

fields @timestamp, @message, @logStream, @log
| filter cold_start = 1
| stats count(cold_start)
| sort @timestamp desc
| limit 20

次はコールドスタートに要した時間について記載します。

コールドスタートに要した時間について

コールドスタートの有無の調査と同様にLog insightsでパフォーマンスログを検索して、確認することができます。

「init_duration」という項目がコールドスタートに要した時間になります。

以下のようなクエリで、コールドスタートに要した最大の時間を取得可能です。

fields @timestamp, @message, @logStream, @log
| stats max(init_duration)
| sort @timestamp desc
| limit 20

クエリを変更することで様々なデータを取得できます。

クエリの作り方は公式ページを参考にさせてもらいましょう。

CloudWatch Logs Insights クエリ構文 - Amazon CloudWatch Logs
CloudWatch Logs Insights では、クエリ言語を使用してロググループをクエリします。クエリ構文は、一般的な関数、算術演算と比較演算、正規表現など、さまざまな関数とオペレーションをサポートしています。

まとめ

以下の2つを使って、コールドスタートの有無とコールドスタートに要した時間を求めることができましたー

使用したもの

パフォーマンスログ
Log insights
→Log insightsを使用してパフォーマンスログを検索することで、コールドスタートの情報を得られました!

]]>
AWS Lambda Insightsを有効化後に出力されるパフォーマンスログの活用方法 https://it.kensan.net/aws-lambda-insights-log.html Tue, 21 Feb 2023 05:01:25 +0000 http://3.113.9.194/it/?p=486 Lambda Insightsを有効にすると、関数が呼び出されるたびに

  • 実行時間
  • CPU
  • メモリ
  • コールドスタート

などのリソース情報がパフォーマンスログとして出力されます。

本記事ではパフォーマンスログの確認方法や活用方法ついて記載します。

本記事はLambda Insightsが有効化されていることを前提に記載しますので、有効化する方法を知りたい方は以下の記事をご参照ください

AWS Lambda Insightsを有効化する方法と無効化する方法
AWS Lambda Insightsの有効化と無効化の切り替えは簡単に行えます。Lambda Insightsは有料ですので、エラー発生時など調査が必要な時だけ有効化、不要な時は無効化した方がいいと思います。Lambda関数の実行数に応じて料金も増えていくので、実行数が多い場合は要注意かと思います

まず、パフォーマンスログの確認方法について記載します。

パフォーマンスログの確認方法

CloudWatch->ログ->ロググループ->「/aws/lambda-insights」->Log insightsで表示とメニューをたどります。

クエリ実行するとLambda Insightsを有効化したことで出力されているログを確認できます。→このログをパフォーマンスログと呼んでいます。

次に、パフォーマンスログに出力されている情報について記載します。

パフォーマンスログにはどんな情報が出力されているか

以下のような情報が出力されています

  • agent_memory_avg
  • agent_memory_max
  • agent_version
  • billed_duration
  • billed_mb_ms
  • cold_start
    • コールドスタートの有無
  • cpu_system_time
  • cpu_total_time
  • cpu_user_time
  • duration
  • event_type
  • fd_max
  • fd_use
  • function_name
  • init_duration
    • コールドスタートの所要時間
  • memory_utilization
  • request_id
    • リクエストID
  • rx_bytes
  • threads_max
  • tmp_free
  • tmp_max
  • tmp_used
  • total_memory
  • total_network
  • tx_bytes
  • used_memory_max

次にパフォーマンスログの活用方法について記載します。

パフォーマンスログの活用方法

Log insightsの機能を使ってログを活用できます。

どうやって活用するかについて、「コールドスタートの調査」「リクエストIDをキーとして、リソース情報を調査」を例として、記載していきます。

まずは、パフォーマンスログの活用方法例として、コールドスタートの調査を例に記載していきます。

コールドスタートの調査(コールドスタートの平均時間と最大時間を調査)

例えば、init_duration(コールドスタート)の平均を知りたい場合
以下のクエリを実行することで平均を出すことが可能です。
fields @timestamp, @message, @logStream, @log
| stats avg(init_duration)
| sort @timestamp desc
| limit 20

init_duration(コールドスタート)の最大を知りたい場合は以下のようなクエリになります。

fields @timestamp, @message, @logStream, @log
| stats max(init_duration)
| sort @timestamp desc
| limit 20

次に、リクエストIDをキーとして、リクエスト実行時のリソース状況を調査する方法を記載します。

リクエストIDをキーとして、リソース情報を調査

問題があるリクエストなど、調査したいリクエストIDがある場合、以下のクエリでリクエストIDのリソース情報を調査することが可能です。


fields @timestamp, @message, @logStream
| filter request_id = "{リクエストID}"
| sort @timestamp desc
| limit 20

ログインサイトの使い方は以下の公式記事が参考になりそうですー

CloudWatch Logs Insights クエリ構文 - Amazon CloudWatch Logs
CloudWatch Logs Insights では、クエリ言語を使用してロググループをクエリします。クエリ構文は、一般的な関数、算術演算と比較演算、正規表現など、さまざまな関数とオペレーションをサポートしています。

まとめ

パフォーマンスログを使用することで、以下のような調査ができることがわかりましたー

活用例

コールドスタートの状況
リクエスト毎のリソース状態

 

パフォーマンスログから色々な情報が得られるため、上記以外にも活用方法はありそう!

]]>
AWS Lambda Insightsを有効化後に追加されるメトリクスの確認方法 https://it.kensan.net/aws-lambda-insightsde-metrics.html Tue, 21 Feb 2023 00:12:03 +0000 http://3.113.9.194/it/?p=471 Lambda Insightsを有効化後の次の点について記載します。

本記事の記載内容

CloudWatchに追加されるメトリクス
追加されたメトリクスの確認方法

Lambda Insightsを有効にする方法は以下の記事をご参照ください

AWS Lambda Insightsを有効化する方法と無効化する方法
AWS Lambda Insightsの有効化と無効化の切り替えは簡単に行えます。Lambda Insightsは有料ですので、エラー発生時など調査が必要な時だけ有効化、不要な時は無効化した方がいいと思います。Lambda関数の実行数に応じて料金も増えていくので、実行数が多い場合は要注意かと思います

Lambda Insightsの画面の見方については以下の記事をご参照ください

AWS Lambda Insightsの見方
Lambda Insightsではマルチファンクションとシングルファンクションのどちらかを選択可能。 マルチファンクション→すべての関数のメトリクスを確認するときに使う。シングルファンクションー1つの関数を指定してメモリクスを確認するときに使う。「最新の 1000 回の呼び出し」からコールドスタートも確認可能

それでは、CloudWatchに追加されるメトリクスについてみていきます。

Lambda Insightsを有効化後に、CloudWatchに追加されるメトリクス

以下のメトリクスが追加になります。

  • cpu_total_time
    • cpu_system_time と cpu_user_time の合計。
  • init_duration
    • Lambda 実行環境のライフサイクルの init フェーズで費やされた時間。
      • 要するにコールドスタートに要した時間ですね
  • memory_utilization
    • 最大メモリは、関数に割り当てられたメモリのパーセンテージとして測定されます。
  • rx_bytes
    • 関数の受信バイト数。
  • tx_bytes
    • 関数の送信バイト数。
  • total_memory
    • Lambda 関数に割り当てられたメモリの量。これは関数のメモリサイズと同じです。
  • total_network
    • rx_bytes と tx_bytes の合計。
  • used_memory_max
    • 関数サンドボックスの測定されたメモリ。

 

AWSの情報を参考にさせていただいています。

Lambda Insights によって収集されたメトリクス - Amazon CloudWatch
Lambda Insights は、インストールされている Lambda 関数からいくつかのメトリクスを収集します。これらのメトリクスの一部は、CloudWatch Metrics で時系列集計データとして使用できます。その他のメトリクスは、時系列データには集計されませんが、CloudWatch Logs Insigh...

追加されたメトリクスの確認方法

追加されたメトリクスはCloudWatchのメトリクスから確認できます。

(EC2などのメトリクス確認と同様の確認方法で確認できます。)

「CloudWatch->メトリクス->全てのメトリクス->LambdaInsights->function_name」とメニューをたどります。

CloudWatchのメトリクスに追加される情報」で記載したメトリクスが表示されるので、確認したいメトリクスを選択するとグラフが表示されます。

メトリクス「used memory max」を選択時の表示例です

Lambda Insights used memory max

Lambda Insights used memory max

まとめ

Lambda Insightsを有効化後に、CloudWatchに追加されるメトリクスについて、EC2などのメトリクスと同様の確認方法で確認できました。

確認方法は簡単かと思います!

注意点として、Lambda Insightsを有効化前に取得できる情報を確認し、Lambda Insightsを導入すべきか、導入することで達成したいことが達成できるのかチェックしておいた方がいいと思いますー

また、Lambda Insightsを有効化後に、パフォーマンスログというものが出力されますが、パフォーマンスログには多くの情報があるので、こちらもチェックしておくといいと思います。以下、パフォーマンスログについての記事です。

AWS Lambda Insightsを有効化後に出力されるパフォーマンスログの活用方法
Lambda Insightsを有効にすると、関数が呼び出されるたびに 「実行時間」「CPU」「メモリ」「コールドスタート」などの情報がパフォーマンスログとして出力されます。 ログインサイトを利用したパフォーマンスログの活用方法について記載します。コールドスタートやリクエスト毎のリソース状態の調査をすることが可能です。
]]>
AWS Lambda Insightsを有効化する方法と無効化する方法 https://it.kensan.net/lambda-insights-start-end.html Mon, 20 Feb 2023 00:14:21 +0000 http://3.113.9.194/it/?p=465 Lambda Insightsの有効化と無効化の操作方法について記載します。

有効化後のLambda Insightsの使い方や収集できる情報については以下の記事をご参照ください。

Lambda Insightsの有効化で追加されるCloudWatchメトリクスについて

AWS Lambda Insightsを有効化後に追加されるメトリクスの確認方法
Lambda Insightsを有効化後に「CloudWatchに追加されるメトリクス」「メトリクスの確認方法」について記載します。 メトリクスはCloudWatchのメトリクスから確認可能。EC2などのメトリクスと同様の確認方法。追加されるメトリクスは「init_duration(コールドスタート)」など8つです。

CloudWatchのLambda Insights画面について

AWS Lambda Insightsの見方
Lambda Insightsではマルチファンクションとシングルファンクションのどちらかを選択可能。 マルチファンクション→すべての関数のメトリクスを確認するときに使う。シングルファンクションー1つの関数を指定してメモリクスを確認するときに使う。「最新の 1000 回の呼び出し」からコールドスタートも確認可能

Lambda Insightsの有効化で出力されるパフォーマンスログについて

AWS Lambda Insightsを有効化後に出力されるパフォーマンスログの活用方法
Lambda Insightsを有効にすると、関数が呼び出されるたびに 「実行時間」「CPU」「メモリ」「コールドスタート」などの情報がパフォーマンスログとして出力されます。 ログインサイトを利用したパフォーマンスログの活用方法について記載します。コールドスタートやリクエスト毎のリソース状態の調査をすることが可能です。

コールドスタータの確認方法について

AWS Lambdaのコールドスタートの有無とコールドスタートに要した時間を確認する方法
Lambdaのコールドスタートの有無やコールドスタートにかかった時間を調査する方法を記載します。 コールドスタートの情報を得るにはLambda Insightsを有効にしておく必要があります。 Lambda Insightsを有効にすることによって出力されるパフォーマンスログからコールスタートの情報を取得できます。

それでは、本題のLambda Insightsの有効化について記載していきます。

Lambda Insightsの有効化は、以下の設定を行うだけで簡単に始められます。

有効化する方法
  • 新規関数作成時
    • 関数の作成
    • ロールの設定
    • Lambda Insightsの設定
  • 既存関数使用時
    • ロール設定
    • Lambda Insightsの設定

 

まず、関数作成から始めていきます。

Lambda Insightsを無効化したい場合は「Lambda Insightsの無効化(終了)方法」まで読み飛ばして大丈夫です。

Lambda Insightsの有効化方法

関数作成して、Lambda Insightsを有効化していきます。

やること

関数の作成
→既存関数のLambda Insightsを有効化する場合はこのステップはスキップしてください
ロールの設定
Lambda Insightsの設定

Lambda関数作成

Lambda関数を作成します。既存関数のLambda Insightsを有効化する場合はこのステップはスキップしてください。

  • 関数名:適切なもの
  • ランタイム:Node.js 18.x
Lambda関数作成

Lambda関数作成

ソースコードを以下のソースコードに置き換えデプロイします。

1秒スリープ後にレスポンスを返すソースコードになります。


const sleep = (m) => {
  return new Promise((resolve) => setTimeout(resolve, m));
};
export const handler = async(event) => {
    console.log("Start!");
    await sleep(1000);
    console.log("End!");
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

Lambdaのロール設定

Lambda Insightsを開始のため、必要なロールを割り当てます。

必要なロールはCloudWatchlogsへのアクセス権限の追加のみです。


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

Lambda Insightsを有効化(開始)する

「設定タブ→モニタリングおよび運用ツール」から開始します。

以下の画面で「拡張モニタリング」をONにします。

Lambda Insights 開始

Lambda Insights 開始

Lambda Insightsの確認

「CloudWatch->インサイト->Lambda Insights」から確認できます。

グラフが表示されればOKです。

Lambda Insightsの無効化(終了)方法

「設定タブ→モニタリングおよび運用ツール」から終了します。

拡張モニタリング」をOFFにすればOKです。

まとめ

AWS Lambda Insightsの有効化と無効化の切り替えは簡単に行えます。

Lambda Insightsは有料ですので、エラー発生時など調査が必要な時だけ有効化、不要な時は無効化した方がいいと思います。

料金の詳細は以下を参照していただければと思いますが、Lambda関数の実行数に応じて料金も増えていくので、実行数が多い場合は要注意かと思いますー

料金 - Amazon CloudWatch | AWS
Amazon CloudWatch は無料で始めることができ、また 、無料利用枠内でご利用いただけるアプリケーションも多数ご用意しています。このページでは Amazon CloudWatch に関する各種お見積もりや API 使用時のコスト予測についてご説明します。

計画的に使いましょ!

]]>