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

AWS ログ グループを Lambda 関数に自動サブスクライブする

Amazon CloudWatch ログ グループのサブスクリプションを使用して、CloudWatch ログからのログ イベントにリアル タイムでアクセスし、Sumo Logic に送信できます。

Amazon CloudWatch ログ グループのサブスクリプションを使用して、CloudWatch ログからのログ イベントにリアル タイムでアクセスし、Sumo Logic に送信できます。 

Sumo の LogGroup Lambda コネクタは、Amazon CloudWatch ログ グループのサブスクリプションを作成するプロセスを自動化する Lambda 関数です。  このコネクタは、https://github.com/SumoLogic/sumologic-aws-lambda にある Sumo Lambda 関数、または自分で作成した Lambda 関数と組み合わせて使用できます。

このソリューションは、次の方法でデプロイできます。

このページでは両方のデプロイ方法の手順を紹介するだけでなく、コネクタのトラブルシューティングについても説明します。

サーバレス リポジトリから SAM アプリケーションをデプロイする (推奨)

このセクションでは、サーバレス リポジトリから SAM アプリケーションをデプロイする方法を説明します。関連するタスクのリンクをクリックします。

LogGroup Lambda コネクタをデプロイするには、次の手順を実行します。
  1. ブラウザ ウィンドウを開いて、https://serverlessrepo.aws.amazon.com/applications の URL を入力します:

  2. [Serverless Application Repository (サーバレス アプリケーション リポジトリ)] で、sumologic を検索します。

  3. [Show apps that create custom IAM roles or resource policies (カスタム IAM ロールまたはリソース ポリシーを作成するアプリケーションを表示)] チェック ボックスをオンにします。

  4. sumologic-loggroup-connector リンクをクリックし、[Deploy (デプロイ)] をクリックします。

  5. [AWS Lambda] > [Functions (関数)] > [Application Settings (アプリケーション設定)] パネルで、このセクションで説明しているようにパラメータを設定します。

  6. ウィンドウの一番下までスクロールして [Deploy (デプロイ)] をクリックします。

  7. Lambda 関数をテストします

CloudFormation テンプレートを使用して関数をデプロイする

このセクションでは、CloudFormation テンプレートを使用して関数をデプロイする方法を説明します。 

ステップ 1: CloudFormation テンプレートをダウンロードする

Sumo 提供の CloudFormation テンプレート loggroup-lambda-cft.json をダウンロードします。このテンプレートは、LogGroup Lambda コネクタのデプロイを自動化します。 

ステップ 2: スタックを作成する

このステップでは、AWS CloudFormation コンソールを使用してスタックを作成します。

  1. AWS マネジメント コンソールにログインします。
  2. [Management Tool (マネジメント ツール)] で、[CloudFormation] を選択します。
  3. [Create Stack (スタックの作成)] をクリックして新しいスタックを作成します。
  4. [Select Template (テンプレートの選択)] ウィンドウで、[Upload a template to Amazon S3 (テンプレートを Amazon S3 にアプロード)] を選択して loggroup-lambda-cft.json をアップロードします。

    select-template.png
  5. [Next (次へ)] をクリックします。
  6. スタック名を指定して、[Next (次へ)] をクリックします。[Specify Details (詳細の指定)] ウィンドウが表示されます。

    loggroup-connector-details.png
  7. [Specify Details (詳細の指定)] ウィンドウで、このセクションで説明しているようにパラメータを設定します。
  8. [Options (オプション)] ウィンドウで、もう一度 [Next (次へ)] をクリックします。
  9. [Review (確認)] ウィンドウで、テンプレートによって IAM リソースが作成されることを理解したことを認めるチェックボックスをクリックして、[Create (作成)] をクリックします。数分後に、[Status (ステータス)] 列に「CREATE_COMPLETE」と表示されます。
  10. 既存のログ グループの自動サブスクライブを続行します。
  11. Lambda 関数をテストします

Configuring parameters

このセクションでは、Lambda 関数に設定できるパラメータについて説明します。

  • LambdaARN—ターゲット Lambda 関数 (Log Group サブスクリプションを通じて CloudWatch ログを受信する関数) の Amazon リソース ネーム (ARN) を入力します。関数の ARN を見つけるには、AWS Lambda コンソールを開き、リストから関数を選択します。関数の ARN はページの右上に表示されています。

AWS_Lambda-function-parameters.png

  • LogGroupPattern—ログ グループを絞り込むための Javascript 正規表現。正規表現に一致するログ グループがコネクタにサブスクライブされます。一致は大文字と小文字が区別されません。プレースホルダ正規表現の Test は、testlogroup、logtestgroup、LogGroupTest に一致します。Test は、必要に応じてログ グループを絞り込む Javascript 正規表現に置換してください。
  • UseExistingLogs—この関数が既存のログ グループのサブスクリプション フィルタを作成するために使用されるかどうかを制御します。既存のログ グループをサブスクライブするために関数を使用する場合は [True] を選択します。

関数を使用して既存のログ グループを自動サブスクライブする

下記の手順に従い、コネクタを使用して既存のログ グループにサブスクライブします。スタックを作成したときに UseExistingLogs オプションで [True] を選択しました。 

  1. AWS コンソールから CloudWatch イベント トリガを無効にします。https://aws.amazon.com/lambda/ にアクセスして、SumoLogGroupLambdaConnector-<unique_string> をクリックします。[CloudWatch Events Trigger (CloudWatch イベント トリガ)] を選択します。CreateLogGroup イベントでトリガを無効にして、[Save (保存)] をクリックします。

loggroup-connector-trigger.png

  1. USE_EXISTING_LOG_GROUPS 環境変数を変更します。この操作は、テンプレートをデプロイして UseExistingLogs パラメータを true に設定 (「ステップ 2: スタックを作成する」を参照) するときに実行できます。すでにスタックを作成している場合は、AWS コンソールにログインしてから、https://aws.amazon.com/lambda/ にアクセスして SumoLogGroupLambdaConnector-<unique_string> をクリックし、その USE_EXISTING_LOG_GROUPS 環境変数を [True] に設定することができます。
    loggroup-connector-variables.png
  2.  関数を手動で呼び出します。関数は、AWS マネジメント コンソールまたは AWS CLI を使用して呼び出すことができます。
    • コンソールを使用するには、AWS Lambda ヘルプの「Lambda 関数を呼び出し、結果、ログ、メトリクスを確認する」を参照してください。
    • AWS CLI を使用するには、次の Lambda CLI 呼び出しコマンドを実行して関数を呼び出します。このコマンドでは、非同期実行が要求されます。または、RequestResponse を呼び出しタイプのパラメータ値として指定し、非同期的に呼び出すこともできます。

      aws lambda invoke 
      --invocation-type Event  
      --function-name SumoLogGroupLambdaConnector-<unique_string> 
      --region us-east-2 
      --log-type Tail outputfile.txt

       

Lambda 関数をテストする

このセクションでは、Lambda 関数をテストしてコネクタが正常に機能することを確認するする方法を説明します。

Lambda 関数をテストするには、次の手順を実行します。
  1. LogGroupPattern について指定した正規表現に一致する名前でログ グループを作成します。 

AWS_LambdaFunction_LoggroupPattern.png

数秒後に、ARN を LAMBDA_ARN 環境変数で指定した Lambda 関数にログ グループがサブスクライブされます。

AWS_LambdaFunction_Loggroup-specified.png

  1. Lambda 関数のログを表示します。 
    SumoLogGroupLambdaConnector-<unique_string> によって生成されたログは /aws/lambda/SumoLogGroupLambdaConnector-<unique_string> ログ グループの CloudWatch で表示できます。
  2. (省略可能) コネクタのトラブルシューティングを続行します。

コネクタをトラブルシューティングする

このセクションでは、コネクタに関して発生する可能性がある一般的なエラーと、問題を解決するための手順について説明します。

権限エラー 

Lambda 関数で権限エラーが発生した場合、Lambda 関数を呼び出すための CloudWatchLogs 権限を付与する必要がある場合があります。

次のエラー メッセージは、CloudWatch Logs に Lambda 関数を呼び出す権限がないことを示しています。

{
    "errorMessage": "Could not execute the lambda function. Make sure you have given CloudWatch Logs permission to execute your function.",
    "errorType": "InvalidParameterException",
    "stackTrace": [
        "Request.extractError (/var/runtime/node_modules/aws-sdk/lib/protocol/json.js:48:27)",
        "Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:105:20)",
        "Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:77:10)",
        "Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:683:14)",
        "Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)",
        "AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)",
        "/var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10",
        "Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)",
        "Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:685:12)",
        "Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:115:18)"
    ]
}

Lambda 関数を呼び出すための CloudWatch Logs 権限を付与するには、次の AWS CLI コマンドを実行します。

aws lambda add-permission --function-name "<function_name>" --statement-id "lambdapermission" --principal "logs.<region>.amazonaws.com" --action "lambda:InvokeFunction" --source-arn "arn:aws:logs:<region>:<account_id>:log-group:*:*" --source-account "<account_id>" --region=<region>

各パラメータの説明

  • <function_name> はターゲット lambda 関数の FunctionName 属性です
  • <region> は関数がデプロイされる AWS リージョンです
  • <account> は aws アカウントの AWS アカウント ID です

AWS CLI のインストールおよび設定の詳細については、「AWS Command Line Interface をインストールする」を参照してください。

ログ グループが生成元の Lambda 関数に属する

ログ グループが生成元の Lambda 関数に属する場合、関数によって次の例外が発生します。 

{ "errorMessage": "The log group provided is reserved for the function logs of the 
destination function.", "errorType": "InvalidParameterException", "stackTrace": 
[ 
"Request.extractError (/var/runtime/node_modules/aws-sdk/lib/protocol/json.js:48:27)", 
"Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:105:20)", 
"Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:77:10)", 
"Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:683:14)", 
"Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)", 
"AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)", 
"/var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10", 
"Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)", 
"Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:685:12)", 
"Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:115:18)" 
] }
  • この記事は役に立ちましたか?