AWS Lambda ULM のログとメトリクスの収集
このページでは、AWS Lambda ULM アプリケーションのデータソースと、ログおよびメトリクスの収集をセットアップする方法を説明します。
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 用 Sumo Logic アプリケーションは、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 ソースを設定することで、ホスト型コレクタによって収集されます。
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 ソースを設定するには、次の手順を実行します。
- Amazon S3 バケットに、Sumo Logic へのアクセス権を与えます。
- AWS アカウントで CloudTrail を使用してデータ イベントを設定します。
- ログが、Amazon S3 バケットに配信されることを確認します。
- AWS CloudTrail ソースを Sumo Logic に追加します。
ステップ 3.Amazon CloudWatch メトリクスの収集
Amazon CloudWatch メトリクスの収集方法については、「Amazon CloudWatch メトリクス ソース」を参照してください。
ログ メッセージのサンプル
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