AWS Lambda アプリケーションのログの収集
Amazon CloudWatch ログ
AWS Lambda は、Lambda 関数をモニタリングして、Amazon CloudWatch 経由でメトリクスをレポートします。次いで、Lambda は関数で処理されたすべてのリクエストをログに記録し、CloudWatch ログとして格納します。
Amazon CloudWatch ログの収集方法については、「Amazon CloudWatch ログ」を参照してください。
AWS Lambda アプリケーションは、CloudWatch からの Lambda ログを使用し、ご使用のアカウントのすべての Lambda 関数についての運用とパフォーマンスの傾向を視覚化して、メモリ使用量や実行時間などの実行に関する情報を関数バージョンやエイリアス別に分析できます。
CloudTrail Lambda データ イベント
CloudTrail Lambda データ イベントにより、Lambda 関数の実行アクティビティを継続的にモニタリングして、いつ誰が API コールを行ったかについての詳細を記録します。
AWS Lambda 用 Sumo Logic アプリケーションは、Lambda 関数でアクティビティをキャプチャして記録する CloudTrail Lambda データ イベントを使用して、関数名、バージョン、AWS サービス、脅威詳細別に Lambda 関数の呼び出しへのインサイトを提供します。
CloudTrail Source を設定するには、次の手順を実行します。
- Amazon S3 バケットに、Sumo Logic へのアクセス権を与えます。
- AWS アカウントで CloudTrail を使用してデータ イベントを設定します。
- ログが、Amazon S3 バケットに配信されることを確認します。
- AWS CloudTrail Source を 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
| transpose row _timeslice column function