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

Amazon CloudWatch ログ

AWS Lambda 関数を使用して Amazon CloudWatch ログを収集し、CloudWatch ログ グループにサブスクライブすることをお勧めします。AWS Lambda 関数は、CloudWatch ログの形式を Sumo と互換性のある形式に変換してから、データを Sumo HTTP Source に直接 POST します。  これは、Amazon CloudWatch ログから配信される次のタイプのデータに適した方法です。

  • カスタム CloudWatch ログ データ。AWS Lambda 関数は、すべてのログ データを処理する必要があります。ただし、実際のデータでテストを行い、通常とは異なる形式のログが正しく解析されることを確認してください。
  • Amazon VPC フロー ログ。AWS Lambda 関数は、Sumo Amazon VPC フロー ログ アプリケーションと互換性があります。
  • AWS Lambda ログ。この AWS Lambda 関数は、AWS Lambda 関数によって生成されるログ用に構築されており、Sumo AWS Lambda アプリケーションと互換性があります。

CloudFormation テンプレートを使用して CloudWatch ログを収集する

このページに記載された手順は、Sumo が提供する CloudFormation テンプレートを使用して AWS リソースを作成するためのものです。このテンプレートでは、ログを送信するための Lambda 関数、必要に応じてメッセージを再送信するためのデッド レター キューで設定された別の Lambda 関数、関連付けられたロールや権限を含めて、Amazon CloudWatch ログを Sumo に送信するために必要なリソースが指定されます。作成されるリソースの詳細については、「CloudFormation テンプレートをダウンロードする」を参照してください。

CloudFormation の使用は省略可能です。Lambda 関数を手動で設定する場合は、「Lambda 関数を使用して Amazon CloudWatch ログを収集する」を参照してください。

Hosted Collector と HTTP Source を追加する

  1. Sumo Logic で、Hosted Collector を設定します。
  2. Sumo Logic で、HTTP Source を設定します。

CloudFormation テンプレートをダウンロードする

このセクションで説明している省略可能な変更を行う場合は、DLQLambdaCloudFormation.json CloudFormation テンプレートを https://s3.amazonaws.com/appdev-cloudformation-templates/DLQLambdaCloudFormation.json からダウンロードしてください。それ以外の場合は、「AWS CloudFormation コンソールでスタックを作成する」に進みます。

テンプレートを AWS にアップロードすると、下のテーブルで示している AWS リソースが作成されます。

リソース名 説明
SumoCWLogGroup サブスクリプション フィルタ (SumoCWLogSubsriptionFilter) が関連付けられ、リアル タイム ログを Sumo の CloudWatch Lambda 関数 (SumoCWLogsLambda) に配信するログ グループ。
SumoCWLogsLambda データを Sumo HTTP Source URL に送信する役割を果たす Lambda 関数。正常に処理できないメッセージを受信するデッド レター キュー (SumoCWDeadLetterQueue) が設定されています。自身のログ グループを除き、他のログをこの関数にサブスクライブできます。
SumoCWProcessDLQLambda デッド レター キューからメッセージを読み取り、メッセージを再送信する役割を果たす Lambda 関数。この関数は、AWS CloudWatch イベントによってスケジュール ルール (SumoCWProcessDLQScheduleRule) を使用して定期的にトリガされます。
SumoCWLambdaPermission Lambda 関数を呼び出すための CloudWatch ログに対する権限。
SumoCWLambdaExecutionRole 2 つの Lambda 関数の IAM ロール。ロールには、CloudWatch ログを作成し、デッド レター キュー (SumoCWDeadLetterQueue) で CRUD 操作を実行し、Lambda 関数を呼び出すためのポリシーが含まれています。
SumoCWEventsInvokeLambdaPermission SumoCWProcessDLQLambda Lambda 関数をトリガするための CloudWatch イベントの権限。
SumoCWSpilloverAlarm デッド レター キューのメッセージ数が CoudFormation テンプレートで定義されたしきい値 (デフォルトは 100000) を超えた場合にトリガされるアラーム。アラームには「メール送信」アクション (SumoCWEmailSNSTopic) が設定されています。CloudFormation テンプレートで定義されたメール エンドポイントに送信されたメールの受信を確認する必要があります。

CloudFormation テンプレートを調整する

CloudFormation テンプレートをアップロードする前に、省略可能な設定手順がいくつかあります。

CloudFormation テンプレートをそのまま使用する場合は、「AWS CloudFormation コンソールでスタックを作成する」に進みます。

Lambda 関数用の環境変数を設定する

次の AWS Lambda 環境変数は、どちらの Lambda 関数でもサポートされています。不整合を避けるために、両方の関数で同じ環境変数の値を設定する必要があります。

環境変数 説明
SOURCE_CATEGORY_OVERRIDE (省略可能) この変数を使用して、HTTP Source 用に設定された _sourceCategory を上書きできます。
SOURCE_FIELDS_OVERRIDE (省略可能) この変数を使用して、HTTP Source 用に設定されたカスタム メタデータ フィールドを上書きできます。例: key1=value1,key2=value2
SOURCE_HOST_OVERRIDE (省略可能) この変数を使用して、HTTP Source 用に設定された _sourceHost を上書きできます。
SOURCE_NAME_OVERRIDE (省略可能) この変数を使用して、HTTP Source 用に設定された _sourceName を上書きできます。

VPC フロー ログのログ収集を設定している場合は、「CloudFormation を使用して CloudWatch から Amazon VPC フロー ログを収集する」「VPC フロー ログ収集用の環境変数」セクションを参照してください。  

CloudFormation テンプレートの Environment セクションで変数を定義します。

"Environment": {
                 "Variables": {
                     “SOURCE_CATEGORY_OVERRIDE”: "<insert-value-here>"
                     “SOURCE_HOST_OVERRIDE”: "<insert-value-here>"
                     “SOURCE_NAME_OVERRIDE”: "<insert-value-here>"
                     “SOURCE_FIELDS_OVERRIDE”: "<insert-value-here>"
                    }
                }
DeadLetterQueue のしきい値を設定する

CloudFormation テンプレートで、アラーム定義の Threshold 属性を使用して、SumoCWSpilloverAlarm をトリガするデッド レター キューのメッセージ数を定義します。  

"SumoCWSpilloverAlarm":{
            "Type":"AWS::CloudWatch::Alarm",
            "Properties":{
                "AlarmActions":[
                    {
                        "Ref":"SumoCWEmailSNSTopic"
                    }
                ],
                "AlarmDescription":"Notify via email if number of messages in DeadLetterQueue exceeds threshold",
                "ComparisonOperator":"GreaterThanThreshold",
                "Dimensions":[
                  {
                    "Name": "QueueName",
                    "Value": "SumoCWDeadLetterQueue"
                  }
                ],
                "EvaluationPeriods":"1",
                "MetricName":"ApproximateNumberOfMessagesVisible",
                "Namespace":"AWS/SQS",
                "Period":"3600",
                "Statistic":"Sum",
                "Threshold":"100000"
            },
            "DependsOn": ["SumoCWEmailSNSTopic"]
アラーム リソースを削除する

(省略可能) SumoCWSpilloverAlarm アラームを作成しない場合は、SumoCWEmailSNSTopic リソースおよび SumoCWSpilloverAlarm リソースの定義を CloudFormation テンプレートから削除します。下記のセクションを削除します。

"SumoCWEmailSNSTopic": {
            "Type":"AWS::SNS::Topic",
            "Properties":{
                "Subscription":[ {
                    "Endpoint" : "hpal@sumologic.com",
                    "Protocol" : "email"
                }]
            }
        },
        "SumoCWSpilloverAlarm":{
            "Type":"AWS::CloudWatch::Alarm",
            "Properties":{
                "AlarmActions":[
                    {
                        "Ref":"SumoCWEmailSNSTopic"
                    }
                ],
                "AlarmDescription":"Notify via email if number of messages in DeadLetterQueue exceeds threshold",
                "ComparisonOperator":"GreaterThanThreshold",
                "Dimensions":[
                  {
                    "Name": "QueueName",
                    "Value": "SumoCWDeadLetterQueue"
                  }
                ],
                "EvaluationPeriods":"1",
                "MetricName":"ApproximateNumberOfMessagesVisible",
                "Namespace":"AWS/SQS",
                "Period":"3600",
                "Statistic":"Sum",
                "Threshold":"100000"
            },
            "DependsOn": ["SumoCWEmailSNSTopic"]
        }

AWS CloudFormation コンソールでスタックを作成する

  1. AWS マネジメント コンソールにログインします。
  2. [Management Tools (マネジメント ツール)] で、[CloudFormation] を選択します。
  3. [Create Stack (スタックの作成)] をクリックして新しいスタックを作成します。[Select Template (テンプレートの選択)] ウィンドウが表示されます。
    select-template.png
  4. [Select Template (テンプレートの選択)] ウィンドウで次の操作を行います。
    • CloudFormation テンプレートを変更した場合は、[Upload a template to Amazon S3 (テンプレートを Amazon S3 にアップロード)] を選択し、DLQLambdaCloudFormation.json, をアップロードしてから、[Next (次へ)] をクリックします。
    • CloudFormation テンプレートを変更しなかった場合は、[Specify an Amazon S3 template URL (Amazon S3 テンプレート URL を指定)] を選択し、次を入力します。
      https://s3.amazonaws.com/appdev-cloudformation-templates/DLQLambdaCloudFormation.json
      specify-url.png
  5. [Specify Details (詳細の指定)] ウィンドウが表示されます。
    specify-details.png
    次を入力します。
    • Stack Name (スタック名)
    • EmailID: (省略可能) アラートに使用します。
    • NumOfWorkers: (省略可能) デッド レター キュー (DLQ) の処理を高速化するにはこの値を増やします。
    • SumoEndPointURL (必須)。「Hosted Collector と HTTP Source を追加する」の HTTP Source アドレス URL を入力します。
    • LogFormat: VPC ログの場合、VPC-JSON (JSON 形式) と VPC-RAW (未処理のメッセージ) のいずれかを選択します。デフォルト値は [Others (その他)] です。 
    • IncludeLogGroupInfo:  ログに loggroup/logstream の値を含めるには true に設定します。デフォルト値は false です。
  6. [Next (次へ)] をクリックします。
  7. [Review (確認)] ウィンドウで、テンプレートによって IAM リソースが作成されることを理解したことを認めるチェックボックスをクリックして、[Create (作成)] をクリックします。

数分後に、[Status (ステータス)] 列に「CREATE_COMPLETE」と表示されます。

アラーム用のメール アドレスを検証する

上記の「AWS CloudFormation コンソールでスタックを作成する」で説明している設定を実行したときに入力したアドレスのメール アカウントにログインします。下の例のように、「AWS Notification - Subscription Confirmation (AWS 通知 - サブスクリプションの確認)」という件名のメールを探します。

aws-notification.png

メール アドレスを検証するには、メールに記載された [Confirm subscription (サブスクリプションの確認)] をクリックします。

アラームの扱い

前のセクションで示しているようなアラーム メールを受信した場合、デッド レター キューのメッセージ数が CloudFormation テンプレートで定義したしきい値 (デフォルトは 100,000) を超えています。これには、次のような原因が考えられます。

  • SumoCWProcessDLQLambda がメッセージを処理する速度が受信するメッセージに追いつかない。この場合、Lambda コンソールを使用して、NUM_OF_WORKERS 環境変数で指定されるワーカー数を増やす必要がある可能性もあります。

  • メッセージ形式の誤り、または HTTP エンドポイント設定の誤りなどの設定に関する問題が原因で、SumoCWProcessDLQLambda が受信メッセージを処理できない。Lambda コンソールのメッセージで関数をテストし、メッセージを処理して Sumo に送信できるかどうか確認してください。

SumoCWLogsLambda を CloudWatch ログ グループにサブスクライブする

上記の手順では、1 つのログ グループ SumoCWLogGroup,SumoCWLogsLambda 関数にサブスクライブします。追加の CloudWatch ログ グループを SumoCWLogsLambda 関数にサブスクライブするには、以下のセクションの手順に従ってください。

SumoCWLogsLambda を既存の CloudWatch ログ グループに手動でサブスクライブする

ログを収集する必要がある追加の CloudWatch ログ グループが少数の場合、以下の手順に従い、SumoCWLogsLambda 関数を手動で既存の CloudWatch ログ グループにサブスクライブできます。

  1. AWS マネジメント コンソールにログインします。
  2. [Management Tools (マネジメント ツール)] で [CloudWatch] を選択し、左側のナビゲーション メニューで [Logs (ログ)] をクリックします。
  3. Sumo Logic にストリーミングする CloudWatch ログ グループの横にあるラジオ ボタンを選択して、[Actions (アクション)] をクリックし、[Stream to AWS Lambda (AWS Lambda にストリーミング)] をクリックします。
    stream-to-aws-lambda.png
  4. 「SumoCWLogsLambda」で始まる Lambda 関数を選択し、[Next (次へ)] をクリックします。
    lambda-function.png
  5. 適切なログ形式を選択し、[Next (次へ)] をクリックします。
  6. 次の画面で詳細を確認し、[Start Streaming (ストリーミングの開始)] をクリックします。

他のログ グループを SumoCWLogsLambda 関数に自動サブスクライブする

 複数のログ グループからログを収集する場合は、Sumo の LogGroup Lambda コネクタを使用して追加のログ グループを Lambda 関数にサブスクライブできます。そのためには、「AWS ログ グループを Lambda 関数に自動サブスクライブする」の手順に従ってください。  コネクタ用に CloudFormation テンプレートを編集する場合、LAMBDA_ARN 環境変数を SumoCWLogsLambda 関数にポイントします。

別の収集方法 

AWS Lambda または CloudFormation を使用して CloudWatch からログを収集できない場合、次のいずれかの方法を選択してください。

  • CloudFormation なしでの Lambda 関数。Lambda 関数を手動で設定するには、「Lambda 関数を使用して Amazon CloudWatch ログを収集する」を参照してください。
  • Amazon Kinesis。AWS Lambda が使用できない場合、または配信の信頼性を高める必要がある場合は、「Amazon Kinesis を使用して Amazon CloudWatch ログを収集する」に記載されている、Amazon Kinesis を統合に追加する方法を確認してください。
  • Sumo Logic Collector とスクリプト。収集する CloudWatch ログの量は比較的少なく、追加の AWS インフラストラクチャのセットアップを好まない場合は、Sumo Logic Collector エージェントをローカルでインストールし、Amazon VPC フロー ログに特化して CloudWatch ログ用に開発されたスクリプトを実行することができます。  Collector スクリプトを使用して CloudWatch ログを収集する手順を参照してください。
  • この記事は役に立ちましたか?