メインコンテンツまでスキップ
Sumo Logic Japanese

AWS Lambda ULM アプリケーションのログとメトリクスの収集

AWS Lambda ULM 用 Sumo Logic アプリケーションでログの収集を設定するための手順です。

このページでは、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 関数についての運用とパフォーマンスの傾向を視覚化して、メモリ使用量や実行時間などの実行に関する情報を関数バージョンやエイリアス別に分析できます。

aws_lambda_app_diagram.png

CloudTrail Lambda データ イベント

CloudTrail Lambda データ イベントにより、Lambda 関数の実行アクティビティを継続的にモニタリングして、いつ誰が API コールを行ったかについての詳細を記録します。 

AWS Lambda 用 Sumo Logic アプリケーションは、Lambda 関数でアクティビティをキャプチャして記録する CloudTrail Lambda データ イベントを使用して、関数名、バージョン、AWS サービス、脅威詳細別に Lambda 関数の呼び出しへのインサイトを提供します。

CTDE-Flow.png

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 ログを収集します。 

ステップ 2.CloudTrail Lambda データ イベントの収集

CloudTrail Source を設定するには、次の手順を実行します。

  1. Amazon S3 バケットに、Sumo Logic へのアクセス権を与えます
  2. AWS アカウントで CloudTrail を使用してデータ イベントを設定します。
  3. ログが、Amazon S3 バケットに配信されることを確認します。
  4. 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 で収集するには、次の手順を実行します。

  1. ステップ 3 を実行します。
  2. 次の例のように、AWS マネジメント コンソールで Lambda 関数を作成するときに、Configure Provisioned を設定します。

AWSLambda_PC_Configure.png

Provisioned Concurrency が有効になり、CloudWatch メトリクスの収集を開始したら、次の新しいメトリクスが使用可能になります。

メトリクス 説明
ProvisionedConcurrentExecutions Provisioned Concurrency を使用した同時実行
ProvisionedConcurrencyUtilization Provisioned Concurrency の使用率
ProvisionedConcurrencyInvocations Provisioned Concurrency を使用した呼び出し数
ProvisionedConcurrencySpilloverInvocations Provisioned Concurrency を超えた呼び出し数

次の例のように、これらのメトリクスは、Sumo Logic メトリクス クエリを使用してクエリできます。

AWSLambda_PC_Metircs_example.png

ログ メッセージのサンプル

このセクションでは、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
  • この記事は役に立ちましたか?