AWS Lambda¶
AWS Lambda の表示メトリクスには、コールドスタート時間、実行時間、同時実行数、メモリ使用量が含まれ、これらは Lambda 関数の応答速度、スケーラビリティ、リソース使用状況を示します。
設定¶
Func のインストール¶
Guance の統合 - 拡張 - マネージド版 Func を有効にすることを推奨します。前提条件はすべて自動でインストールされるため、引き続きスクリプトのインストールを行ってください。
Func を自前でデプロイする場合は、Func の自前デプロイ を参照してください
スクリプトのインストール¶
ヒント: 要件を満たす AWS の AK を事前に用意してください。簡単のため、CloudWatch の読み取り専用権限
CloudWatchReadOnlyAccessを直接付与してもかまいません。
マネージド版の有効化スクリプト¶
- Guance コンソールにログインします
- 【統合】メニューをクリックし、【クラウドアカウント管理】を選択します
- 【クラウドアカウントの追加】をクリックし、【AWS】を選択して画面に必要な情報を入力します。以前にクラウドアカウント情報を設定済みの場合は、この手順は省略できます
- 【テスト】をクリックし、成功したら【保存】をクリックします。失敗した場合は関連設定が正しいか確認してから再度テストしてください
- 【クラウドアカウント管理】一覧で追加済みのクラウドアカウントを確認できます。該当するクラウドアカウントをクリックして詳細ページに入ります
- クラウドアカウント詳細ページの【統合】ボタンをクリックし、
未インストール一覧でAWS Lambdaを見つけて【インストール】をクリックすると、インストール画面が表示されます
手動有効化スクリプト¶
-
Func コンソールにログインし、【スクリプトマーケット】をクリックして、Guance スクリプトマーケットに入り、
integration_aws_lambdaを検索します -
【インストール】をクリックし、必要なパラメータとして AWS AK ID、AK Secret、およびアカウント名を入力します
-
【デプロイして起動スクリプトを有効化】をクリックすると、システムが自動的に
Startupスクリプトセットを作成し、対応する起動スクリプトを自動で設定します -
有効化後は、「管理 / 自動トリガー設定」で対応する自動トリガー設定を確認できます。【実行】をクリックすると、定期実行を待たずにすぐ 1 回実行できます。しばらくすると、実行タスクの記録と対応するログを確認できます
検証¶
- 「管理 / 自動トリガー設定」で対応するタスクに自動トリガー設定が存在するか確認し、あわせてタスク記録とログを見て異常がないか確認します
- Guance の「インフラストラクチャ / カスタム」でアセット情報が存在するか確認します
- Guance の「メトリクス」で対応する監視データがあるか確認します
メトリクス¶
AWS CloudWatch を設定すると、デフォルトのメトリクスセットは次のとおりです。設定により、さらに多くのメトリクスを収集できます:
Amazon CloudWatch Lambda メトリクスの詳細
呼び出しメトリクス¶
| メトリクス | 説明 |
|---|---|
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 にはカウントされません。 |
ProvisionedConcurrencyInvocations |
プロビジョンド同時実行を使って関数コードが呼び出された回数です。 |
ProvisionedConcurrencySpilloverInvocations |
すべてのプロビジョンド同時実行が使用中のときに、標準同時実行で関数コードが呼び出された回数です。 |
RecursiveInvocationsDropped |
Lambda が、関数が無限再帰ループの一部であると検出して、その関数の呼び出しを停止した回数です。Lambda の再帰ループ検出では、対応する AWS SDK が追加するメタデータを追跡し、関数がリクエストチェーンの一部として呼び出された回数を監視します。関数がリクエストチェーンの一部として 16 回を超えて呼び出されると、Lambda は次の呼び出しを中断します。 |
パフォーマンスメトリクス¶
パフォーマンスメトリクスは、単一の関数呼び出しのパフォーマンス詳細を提供します。たとえば、Duration メトリクスは、関数がイベントの処理に費やした時間をミリ秒単位で示します。関数がイベントをどれだけ速く処理しているかを把握するには、Average または Max の統計値でこれらのメトリクスを確認します。
| メトリクス | 説明 |
|---|---|
Duration |
関数コードがイベントを処理するのに要した時間です。呼び出しの課金対象継続時間は、Duration の値を最も近いミリ秒に四捨五入した値です。 |
PostRuntimeExtensionsDuration |
関数コードが完了したあと、ランタイムが拡張機能のコードを実行するために費やした累積時間です。 |
IteratorAge |
ストリームから読み取るイベントソースマッピングの場合、イベント内の最後のレコードの経過時間です。このメトリクスは、ストリームがレコードを受信した時刻から、イベントソースマッピングがイベントを関数へ送信した時刻までの時間を測定します。 |
OffsetLag |
自己管理 Apache Kafka および Amazon Managed Streaming for Apache Kafka(Amazon MSK)イベントソースの場合、トピックに書き込まれた最後のレコードと、関数のコンシューマーグループが処理した最後のレコードとの間のオフセット差です。Kafka トピックには複数のパーティションを含めることができますが、このメトリクスはトピックレベルでオフセット遅延を測定します。 |
同時実行メトリクス¶
Lambda は、関数、バージョン、エイリアス、または AWS リージョンをまたいでイベントを処理しているインスタンス数の合計を、同時実行メトリクスとして報告します。同時実行上限にどれだけ近いかを確認するには、Max の統計値でこれらのメトリクスを確認します。
| メトリクス | 説明 |
|---|---|
ConcurrentExecutions |
イベントを処理している関数インスタンス数です。この数がリージョンの同時実行クォータ、または関数に設定した予約済み同時実行の上限に達すると、Lambda は他の呼び出しリクエストを制限します。 |
ProvisionedConcurrentExecutions |
プロビジョンド同時実行を使ってイベントを処理している関数インスタンス数です。プロビジョンド同時実行を持つエイリアスまたはバージョンへの各呼び出しに対して、Lambda は現在のカウントを発行します。 |
ProvisionedConcurrencyUtilization |
バージョンまたはエイリアスに対して、ProvisionedConcurrentExecutions の値を割り当て済みのプロビジョンド同時実行総数で割った比率です。たとえば、0.5 は、割り当て済みのプロビジョンド同時実行の 50% が使用中であることを示します。 |
UnreservedConcurrentExecutions |
リージョンにおいて、予約済み同時実行を持たない関数が処理しているイベント数です。 |
非同期呼び出しメトリクス¶
非同期呼び出しメトリクスは、イベントソースからの非同期呼び出しと直接呼び出しの詳細を提供します。しきい値とアラートを設定して、特定の変化を通知できます。たとえば、処理待ちのイベント数が予期せず増加したとき(AsyncEventsReceived)や、イベントの処理完了までに長時間待機したとき(AsyncEventAge)です。
| メトリクス | 説明 |
|---|---|
AsyncEventsReceived |
Lambda が処理待ちとして正常にキューに入れたイベント数です。このメトリクスにより、Lambda 関数が受信したイベント数の把握に役立ちます。このメトリクスを監視し、しきい値アラートを設定して問題の有無を確認します。たとえば、Lambda に送信された不正なイベント数を検出したり、トリガーや関数設定の誤りによる問題を迅速に診断したりできます。AsyncEventsReceived と Invocations の不一致は、処理の差異、イベントの破棄、またはキューの滞留の可能性を示します。 |
AsyncEventAge |
Lambda がイベントを正常にキューに入れてから、その関数を呼び出すまでの時間です。呼び出し失敗やスロットリングによってイベントが再試行されると、このメトリクス値は増加します。このメトリクスを監視し、キュー滞留が発生した場合は、異なる統計値に対してしきい値アラートを設定します。このメトリクスの増加を解消するには、Errors メトリクスで関数エラーを特定し、Throttles メトリクスで同時実行の問題を確認します。 |
AsyncEventsDropped |
関数の正常実行に至らないまま破棄されたイベント数です。デッドレターキュー(DLQ)または OnFailure 送信先を設定している場合、イベントは破棄前にそこへ送信されます。イベントはさまざまな理由で破棄されます。たとえば、イベントが最大有効期限を超えた場合や最大再試行回数を使い切った場合、または予約済み同時実行が 0 に設定されている場合です。このメトリクスの破棄を解消するには、Errors メトリクスで関数エラーを特定し、Throttles メトリクスで同時実行の問題を確認します。 |
Lambda で S3 データを収集¶
AWS 上の Lambda を使って、AWS 上の S3 データを収集し、Guance に報告します
ELB ログの有効化方法については AWS ELB ログ収集 を参照してください
1. コンソールで Lambda 関数を作成する¶
-
Lamba コンソールの関数ページを開きます。
-
関数の作成を選択します
-
一から作成を選択します
-
関数名を入力します
-
ランタイムオプションをPython 3.10に設定します -
Execution Role(実行ロール)で、Create a new role with basic Lambda permissions(基本的な Lambda 権限を持つ新しいロールを作成)を選択します。必要な権限の一覧は付録を参照してください。最小権限のロールがすでにある場合は、そのロールを直接使用できます。Lambda は実行ロールを作成し、そのロールに、関数が Amazon CloudWatch Logs へログをアップロードする権限を付与します。関数の呼び出し時、Lambda 関数は実行ロールを引き受け、その実行ロールを使用して Amazon SDK の認証情報を作成し、イベントソースからデータを読み取ります
-
関数の作成をクリックします
-
GitHub から同期コードを取得し、下のコードソースにある
lambda-forward.pyの内容をlambda-function.pyにコピーします -
lambda-function.pyと同じディレクトリにsetting.py、datakit.py、dataway.pyを新規作成し、GitHub 上の対応するファイルのコードをコピーします -
環境変数を追加します
- DATAKIT_IP:datakit がデプロイされている IP アドレス。送信先データソースは datakit。必須です
- DATAKIT_PORT:datakit のサービスポート。送信先データソースは datakit。任意です。既定値は
9529 - DATAWAY_URL: dataway の URL (Eg: https://xx-openway.xxx.com) 送信先データソースは
dataway - WORKSPACE_TOKEN:プラットフォームのワークスペース
Token。送信先データソースはdataway
注意:送信先データソースは datakit と dataway のどちらか一方を必ず設定してください。datakit を選ぶ場合は
DATAKIT_IPを設定し、dataway を選ぶ場合はDATAWAY_URLとWORKSPACE_TOKENを設定してください -
datakit のポートが既定の
9529ではない場合は、環境変数 DATAKIT_PORT を追加し、正しいポート番号を入力します(この変数は必須ではありません) -
Deployをクリックして公開します
2. Lambda トリガーを設定する¶
-
トリガーを追加をクリックします -
ソースの選択をS3に設定します -
監視したい
bucketを選択します -
Lambda 関数をトリガーするイベント Event types を選択します
-
入力と出力に同じ S3 bucket を使うことは推奨されず、この設定は再帰呼び出し、Lambda 使用量の増加、コスト増加につながる可能性があることを承諾します
-
追加をクリックします
ELB でログを生成する¶
ELB 上のアプリケーションにアクセスすると、ELB は生成されたログを S3 にアップロードし、Lambda 関数がそれを収集して Guance に送信します
オブジェクト¶
収集された AWS Lambda オブジェクトのデータ構造。オブジェクトデータは「インフラストラクチャ - カスタム」で確認できます
{
"measurement": "aws_lambda",
"tags": {
"account_name" :"AWS_Lambda",
"class" :"aws_lambda",
"cloud_provider" :"aws",
"FunctionName" :"dataflux-alb",
"name" :"dataflux-alb",
"PackageType" :"Zip",
"RegionId" :"cn-northwest-1",
"RevisionId" :"5e52ff51-615a-4ecb-96b7-40083a7b4b62",
"Role" :"arn:aws-cn:iam::294654068288:role/service-role/s3--xxxx-role-3w34zo42",
"Runtime" :"python3.7",
"Version" :"$LATEST"
},
"fields": {
"CreatedTime" : "2022-03-09T06:13:31Z",
"ListenerDescriptions": "{JSON データ}",
"AvailabilityZones" : "{アベイラビリティゾーンの JSON データ}",
"message" : "{インスタンスの JSON データ}"
}
}
注意:
tagsとfieldsのフィールドは、今後の更新で変更される可能性がありますヒント 1:
tags.account_nameの値はインスタンス ID で、固有識別子として使用されます
