AWS Lambda ULM アプリケーションのログとメトリクスの収集
このページでは、AWS Lambda ULM アプリケーションのデータ Source と、ログおよびメトリクスの収集をセットアップする方法を説明します。
AWS Lambda ULM アプリケーションの収集について
AWS Lambda ULM アプリケーションは、AWS CloudWatch ログ、CloudTrail Lambda データ イベント、および AWS Lambda CloudWatch メトリクスを使用します。以下のセクションでは、このアプリケーションがこれらのデータ ソースを活用して AWS Lambda へのインサイトをどのように提供するかを説明します。
AWS CloudWatch ログ
AWS Lambda は、Lambda 関数をモニタリングして、Amazon CloudWatch 経由でメトリクスをレポートします。次いで、Lambda は関数で処理されたすべてのリクエストをログに記録し、AWS CloudWatch ログとして格納します。
AWS Lambda ULM アプリケーションは、CloudWatch からの Lambda ログを使用し、ご使用のアカウントのすべての Lambda 関数についての運用とパフォーマンスの傾向を視覚化して、メモリ使用量や実行時間などの実行に関する情報を関数バージョンやエイリアス別に分析できます。
CloudTrail Lambda データ イベント
CloudTrail Lambda データ イベントにより、Lambda 関数の実行アクティビティを継続的にモニタリングして、いつ誰が API コールを行ったかについての詳細を記録します。
AWS Lambda 用 Sumo Logic アプリケーションは、Lambda 関数でアクティビティをキャプチャして記録する CloudTrail Lambda データ イベントを使用して、関数名、バージョン、AWS サービス、脅威詳細別に Lambda 関数の呼び出しへのインサイトを提供します。
AWS Lambda CloudWatch メトリクス
AWS Lambda は、ユーザに代わって自動的に関数をモニタリングして、Amazon CloudWatch 経由で AWS Lambda メトリクスをレポートします。これらのメトリクスは、Amazon CloudWatch Source を設定することで、Hosted Collector によって収集されます。
AWS Lambda 用 Sumo Logic アプリケーションは、Lambda 関数呼び出し、ストリーム ベース呼び出しのイテレータ エイジ、エラー、デッド レター エラー、同時実行、予約されていない同時実行、期間、関数ごとのスロットリング、および時間ベースの比較へのインサイトを提供します。
AWS Lambda ULM アプリケーションのログの収集
このセクションでは、AWS Lambda ULM アプリケーションで使用されるログとメトリクス データについて説明します。
ステップ 1.Amazon CloudWatch ログの収集
Sumo では、Amazon CloudWatch からいくつかの方法で Lambda ログを収集します。
- Amazon CloudWatch ログの収集は、「Amazon CloudWatch ログ」で説明されているように、Sumo が提供する CloudFormation テンプレートを使用した AWS Lambda 関数を使用して行うように設定できます。
- CloudFormation を使用しない収集の設定方法については、「Lambda 関数を使用した Amazon CloudWatch ログの収集」を参照してください。
ステップ 2.CloudTrail Lambda データ イベントの収集
CloudTrail Source を設定するには、次の手順を実行します。
- Amazon S3 バケットに、Sumo Logic へのアクセス権を与えます。
- AWS アカウントで CloudTrail を使用してデータ イベントを設定します。
- ログが、Amazon S3 バケットに配信されることを確認します。
- AWS CloudTrail Source を Sumo Logic に追加します。
ステップ 3.Amazon CloudWatch メトリクスの収集
Amazon CloudWatch メトリクスの収集方法については、「Amazon CloudWatch メトリクス Source」を参照してください。
必要に応じて、Lambda 関数の Provisoned Concurrency 設定を有効にするプロセスを続行します。
Lambda 関数の Provisoned Concurrency 設定の有効化
AWS Lambda は、Lambda 関数の起動時間をより強力に制御するための Provisoned Concurrency を提供しています。Provisioned Concurrency を有効にすると、関数は初期化されて数十ミリ秒で応答できる状態に保たれます。AWS Lambda は、CloudWatch を使用して Provisioned Concurrency のメトリクスも提供します。
これらのメトリクスを Sumo Logic で収集するには、次の手順を実行します。
- ステップ 3 を実行します。
- 次の例のように、AWS マネジメント コンソールで Lambda 関数を作成するときに、Configure Provisioned を設定します。
Provisioned Concurrency が有効になり、CloudWatch メトリクスの収集を開始したら、次の新しいメトリクスが使用可能になります。
メトリクス | 説明 |
---|---|
ProvisionedConcurrentExecutions | Provisioned Concurrency を使用した同時実行 |
ProvisionedConcurrencyUtilization | Provisioned Concurrency の使用率 |
ProvisionedConcurrencyInvocations | Provisioned Concurrency を使用した呼び出し数 |
ProvisionedConcurrencySpilloverInvocations | Provisioned Concurrency を超えた呼び出し数 |
次の例のように、これらのメトリクスは、Sumo Logic メトリクス クエリを使用してクエリできます。
ログ メッセージのサンプル
このセクションでは、Amazon CloudWatch ログと CloudTrail Lambda データ イベント ログ メッセージのサンプルを示します。
Amazon CloudWatch ログ
{"id":"32563142671071560797760688825700039436306340248688066573","timestamp":1511808906799,"message":"REPORT RequestId: cf75cfa3-fe16-11e5-9b16-e3e4c70845f2 Duration: 50.23 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 24 MB ","requestID":null,"logStream":"2017/11/27/[Prod]1108153ced144f8cbb161aef096218d1","logGroup":"/aws/lambda/AWSlambda1"}
CloudTrail Lambda データ イベント
{ "eventVersion":"1.06", "userIdentity":{ "type":"IAMUser", "principalId":"AIDAJ45Q7YFFAREXAMPLE", "arn":"arn:aws:iam::111111111111:user/duc", "accountId":"111111111111", "accessKeyId":"AKIAIOSFODNN7EXAMPLE", "userName":"duc" }, "eventTime":"2017-11-27T19:05:20.524Z", "eventSource":"lambda.amazonaws.com", "eventName":"Invoke", "awsRegion":"us-west-1", "sourceIPAddress":"155.14.186.236", "userAgent":"aws-cli/1.11.129 Python/2.7.8 botocore/1.5.92", "requestParameters":{ "invocationType":"RequestResponse", "functionName":"arn:aws:lambda:us-west-1:111111111111:function:function237", "clientContext":"ew0KICAiB99udGV6lGtleSIgOiAiY29udGV4dHZhbEXAMPLE==" }, "responseElements":null, "additionalEventData":{ "functionVersion":"arn:aws:lambda:us-west-1:111111111111:function:function238:$LATEST" }, "requestID":"e38fb262-8f45-11e7-9845-e5f2f205b110", "eventID":"277a6881-66f4-4f3e-ade5-ba76255b7d93", "readOnly":false, "resources":[ { "accountId":"111111111111", "type":"AWS::Lambda::Function", "ARN":"arn:aws:lambda:us-west-1:111111111111:function:function239" } ], "eventType":"AwsApiCall", "managementEvent":false, "recipientAccountId":"111111111111" }
クエリのサンプル
CloudTrail Lambda 関数を呼び出した IAM ユーザ数
_sourceCategory=cloudtrail/lambda "lambda.amazonaws.com" Invoke | json field=_raw "eventName" as event_name | json field=_raw "sourceIPAddress" as src_ip | json field=_raw "requestParameters.functionName" as func_name nodrop | json field=_raw "additionalEventData.functionVersion" as func_version nodrop | parse regex field=func_name "\w+:\w+:\S+:[\w-]+:\S+:\S+:(?<function_name>[\S]+)$" | parse regex field=func_version "\w+:\w+:\S+:[\w-]+:\S+:\S+:(?<function_version>[\S]+:[\S ]+)$" | json field=_raw "userAgent" as user_agent | json field=_raw "userIdentity.type" as caller_type | json field=_raw "userIdentity.invokedBy"as invoked_by nodrop | json field=_raw "userIdentity.userName"as user_name nodrop | if (isNull(user_name), invoked_by, user_name ) as caller | if (isNull(invoked_by), user_name, invoked_by ) as caller | where caller_type = "IAMUser" | count by caller | sort by _count
使用最大メモリ量 (MB)
_sourceCategory=aws_lambda/lambda*| json "message","logStream","logGroup" | parse field=message "REPORT RequestId: *Duration: * ms\tBilled Duration: * ms \tMemory Size: * MB\tMax Memory Used: * MB" as RequestId, Duration,BilledDuration,MemorySize,MaxMemoryUsed | parse field=logstream "*/[*]*" as logstreamDate,version,logstreamID | parse field=loggroup "/aws/lambda/*" as function | timeslice 1h | sum(MaxMemoryUsed) as MaxMemoryUsed by function, _timeslice | sort by _timeslice