AWS Elastic Beanstalk
開発者ガイド

Amazon CloudWatch Logs で Elastic Beanstalk を使用する

CloudWatch Logs を使用すると、お使いの環境の Amazon EC2 インスタンスから、Elastic Beanstalk アプリケーション、システム、およびカスタムログファイルを監視してアーカイブすることができます。また、アラームを設定することで、メトリックスフィルタが抽出する特定のログストリームイベントに反応してアクションを簡単に実行できるようになります。環境の各 Amazon EC2 インスタンスにインストールされた CloudWatch Logs エージェントは、設定した各ロググループの CloudWatch サービスに対してメトリクスのデータポイントを発行します。各ロググループは、独自のフィルタパターンを適用して、どのログストリームイベントをデータポイントとして CloudWatch に送信するかを決定します。同じロググループに属するログストリームは、保持、監視、アクセス制御について同じ設定を共有します。「CloudWatch Logs にインスタンスログをストリーミングするには」に示すように、CloudWatch サービスに自動的にログをストリーミングするよう Elastic Beanstalk を設定できます。用語と概念を含めた CloudWatch Logs の詳細については、Amazon CloudWatch Logs ユーザーガイドを参照してください。

インスタンスログに加えて、環境の拡張ヘルスを有効にすると、CloudWatch Logs にヘルス情報をストリーミングするように環境を設定できます。「Amazon CloudWatch Logs への Elastic Beanstalk 環境ヘルス情報のストリーミング」を参照してください。

次の図は、CloudWatch Logs を統合して設定された環境で [モニタリング] ページに表示されるグラフを示しています。この環境のサンプルメトリクスには、CWLHttp4xx および CWLHttp5xx という名前が付けられています。画像の 1 つでは、[CWLHttp4xx] メトリクスが、設定ファイルで指定された条件に基づいてアラームをトリガしています。

次の図は、それぞれ [CWLHttp4xx] および [CWLHttp5xx] メトリクスに対応する、[AWSEBCWLHttp4xxPercentAlarm] および [AWSEBCWLHttp5xxCountAlarm] というサンプルアラームについて [アラーム] ページおよび図に表示されるグラフを示しています。

CloudWatch Logs へのログ・ストリーミングの前提条件

環境の Amazon EC2 インスタンスから CloudWatch Logs へのログのストリーミングを有効にするには、以下の条件を満たす必要があります。

  • プラットフォーム - この機能はこのリリース以降にリリースされたプラットフォーム構成でのみ使用可能であるため、以前のプラットフォーム構成を使用している場合は、現在の環境に更新してください。

  • Elastic Beanstalk インスタンスプロファイルAWSElasticBeanstalkWebTier または AWSElasticBeanstalkWorkerTier Elastic Beanstalk 管理ポリシーがない場合は、プロファイルに以下を追加して、この機能を有効にする必要があります。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:PutLogEvents", "logs:CreateLogStream" ], "Resource": [ "*" ] } ] }

Elastic Beanstalk が CloudWatch Logs を設定する方法

Elastic Beanstalk は、作成する各インスタンスにデフォルト設定を使用して CloudWatch ログエージェントをインストールします。詳細については、「CloudWatch Logs エージェントリファレンス」を参照してください。

インスタンスログストリーミングを CloudWatch Logs に使用可能にすると、Elastic Beanstalk は環境のインスタンスからのログファイルを CloudWatch Logs に送信します。プラットフォームによって、ストリーミングされるログが異なります。次の表に、プラットフォーム別のログを示します。

プラットフォーム

ログ

Docker

  • /var/log/eb-activity.log

  • /var/log/nginx/error.log

  • /var/log/docker-events.log

  • /var/log/docker

  • /var/log/nginx/access.log

  • /var/log/eb-docker/containers/eb-current-app/stdouterr.log

Multi-Docker(generic)

  • /var/log/eb-activity.log

  • /var/log/ecs/ecs-init.log

  • /var/log/eb-ecs-mgr.log

  • /var/log/ecs/ecs-agent.log

  • /var/log/docker-events.log

Glass fish (Preconfigured Docker)

  • /var/log/eb-activity.log

  • /var/log/nginx/error.log

  • /var/log/docker-events.log

  • /var/log/docker

  • /var/log/nginx/access.log

Go (Preconfigured Docker)

  • /var/log/eb-activity.log

  • /var/log/nginx/error.log

  • /var/log/docker-events.log

  • /var/log/docker

  • /var/log/nginx/access.log

Python (Preconfigured Docker)

  • /var/log/eb-activity.log

  • /var/log/nginx/error.log

  • /var/log/docker-events.log

  • /var/log/docker

  • /var/log/nginx/access.log

Go

  • /var/log/eb-activity.log

  • /var/log/nginx/error.log

  • /var/log/nginx/access.log

Java

  • /var/log/eb-activity.log

  • /var/log/nginx/access.log

  • /var/log/nginx/error.log

  • /var/log/web-1.error.log

  • /var/log/web-1.log

Tomcat

  • /var/log/eb-activity.log

  • /var/log/httpd/error_log

  • /var/log/httpd/access_log

  • /var/log/nginx/error_log

  • /var/log/nginx/access_log

.NET on Windows Server

  • C:\inetpub\logs\LogFiles\W3SVC1\u_ex*.log

  • C:\Program Files\Amazon\ElasticBeanstalk\logs\AWSDeployment.log

  • C:\Program Files\Amazon\ElasticBeanstalk\logs\Hooks.log

Node.js

  • /var/log/eb-activity.log

  • /var/log/nodejs/nodejs.log

  • /var/log/nginx/error.log

  • /var/log/nginx/access.log

  • /var/log/httpd/error.log

  • /var/log/httpd/access.log

PHP

  • /var/log/eb-activity.log

  • /var/log/httpd/error_log

  • /var/log/httpd/access_log

Python

  • /var/log/eb-activity.log

  • /var/log/httpd/error_log

  • /var/log/httpd/access_log

  • /opt/python/log/supervisord.log

Ruby (Puma)

  • /var/log/eb-activity.log

  • /var/log/nginx/error.log

  • /var/log/puma/puma.log

  • /var/log/nginx/access.log

Ruby (Passenger)

  • /var/log/eb-activity.log

  • /var/app/support/logs/passenger.log

  • /var/app/support/logs/access.log

  • /var/app/support/logs/error.log

Elastic Beanstalk は、ストリームするさまざまなログファイルに対して、CloudWatch Logs 内のロググループを構成します。CloudWatch Logs から特定のログファイルを検索するには、対応するロググループの名前を知る必要があります。ロググループの命名方式は、プラットフォームのオペレーティングシステムによって異なります。

Linux プラットフォームの場合は、インスタンス上のログファイルの場所に /aws/elasticbeanstalk/environment_name というプレフィックスを付けてロググループ名を取得します。たとえば、ファイル /var/log/nginx/error.log を取得するには、ロググループ /aws/elasticbeanstalk/environment_name/var/log/nginx/error.log を指定します

Windows プラットフォームの場合は、各ログファイルに対応するロググループについて、次の表を参照してください。

インスタンス上のログ

ロググループ

C:\Program Files\Amazon\ElasticBeanstalk\logs\AWSDeployment.log

/aws/elasticbeanstalk/<environment-name>/EBDeploy-Log

C:\Program Files\Amazon\ElasticBeanstalk\logs\Hooks.log

/aws/elasticbeanstalk/<environment-name>/EBHooks-Log

C:\inetpub\logs\LogFiles (ディレクトリ全体)

/aws/elasticbeanstalk/<environment-name>/IIS-Log

CloudWatch Logs にインスタンスログをストリーミングするには

Elastic Beanstalk コンソール、EB CLI、または設定オプションを使用して、CloudWatch Logs へのインスタンスログのストリーミングを使用可能にすることができます。

Elastic Beanstalk コンソールを使用したインスタンスログのストリーミング

CloudWatch Logs へのインスタンスログのストリーミング

  1. Elastic Beanstalk コンソール を開きます。

  2. お客様の環境の管理ページに移動します。

  3. [Configuration] を選択します。

  4. [ソフトウェア] 設定カードで、[変更] を選択します。

  5. [Instance log streaming to CloudWatch Logs (CloudWatch Logs へのインスタンスログのストリーミング)]:

    • [ログのストリーミング] を有効にします。

    • [保持期間] でログを保存する日数を指定します。

    • 環境が終了した後にログを保存するかどうかを決定する [ライフサイクル] 設定を選択します。

  6. [Apply] を選択します。

次の図の例では、ログを 7 日間保存し、環境を終了した後にログを保持しています。

ログストリーミングが有効になったら、[ソフトウェア] カードまたはページに戻り、[Log Groups (ロググループ)] のリンクを検索します。CloudWatch コンソールでログを表示するには、このリンクをクリックします。

EB CLI を使用したインスタンスログのストリーミング

EB CLI を使用してインスタンスログストリーミングを CloudWatch Logs に有効にするには、eb logs コマンドを使用します。

$ eb logs --cloudwatch-logs enable

また、eb logs を使用して、CloudWatch Logs からログを取得することもできます。すべての環境のインスタンスログを取り出すことも、コマンドの多くのオプションを使用して検索するログのサブセットを指定することもできます。たとえば、次のコマンドは、環境の一連のインスタンスログを取得し、.elasticbeanstalk/logs ディレクトリに保存します。

$ eb logs --all

特に、--log-group オプションを使用すると、インスタンス上の特定のログファイルに対応する特定のロググループのインスタンスログを取得できます。そのためには、取得するログファイルに対応するロググループの名前を知る必要があります。この情報は、「Elastic Beanstalk が CloudWatch Logs を設定する方法」にあります。

設定ファイルを使用したインスタンスログのストリーミング

環境を作成または更新する場合は、設定ファイルを使用して、CloudWatch Logs にインスタンスログストリーミングをセットアップして設定することができます。カスタムログファイルのストリーミングを設定することもできます。以下の各例を使用するには、アプリケーションソースバンドルの最上位にある .ebextensions ディレクトリに、.config 拡張子を持つファイルにテキストをコピーします。それぞれの例を個別に使用することも、単一の設定ファイルに組み合わせることもできます。

次の設定ファイルの例では、デフォルトのインスタンスログのストリーミングを有効にしています。Elastic Beanstalk は、環境のプラットフォーム用のログファイルのデフォルトセットをストリーミングします。

option_settings: - namespace: aws:elasticbeanstalk:cloudwatch:logs option_name: StreamLogs value: true

次の設定ファイルの例は、アプリケーションが生成するカスタムログファイルのストリーミングを設定します。この例では、環境のインスタンスに CloudWatch Logs エージェントを構成して、各ログファイルをログファイルの後に名前の付いた CloudWatch Logs ロググループにストリーミングして、検出と検索を容易にします。

注記

Elastic Beanstalk は、Windows プラットフォームでのカスタムログファイルストリーミングをサポートしていません。この例は、Linux 環境でのみ動作します。

files: "/etc/awslogs/config/customlogs.conf": mode: "000600" owner: root group: root content: | [stdouterr.log] log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Ref":"AWSEBEnvironmentName" }, "var/log/eb-docker/containers/eb-current-app/stdouterr.log"]]}` log_stream_name = {instance_id} file = /var/log/eb-docker/containers/eb-current-app/*stdouterr.log* [sample-app.log] log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Ref":"AWSEBEnvironmentName" }, "var/log/eb-docker/containers/eb-current-app/sampleapp.log"]]}` log_stream_name = {instance_id} file = /var/log/eb-docker/containers/eb-current-app/sample-app.log* commands: "01": command: chkconfig awslogs on "02": command: service awslogs restart

CloudWatch Logs の設定の詳細については、Amazon CloudWatch Logs User Guide の「CloudWatch Logs エージェントのリファレンス」を参照してください。

設定ファイルを使用して CloudWatch Logs との統合を設定する前に、CloudWatch Logs エージェントで使用する IAM アクセス許可をセットアップする必要があります。環境に割り当てるインスタンスプロファイルに次のカスタムポリシーをアタッチできます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:GetLogEvents", "logs:PutLogEvents", "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:PutRetentionPolicy" ], "Resource": [ "*" ] } ] }

CloudWatch Logs 統合のトラブルシューティング

CloudWatch Logs で予想される環境のインスタンスログの一部が見つからない場合は、次の一般的な問題を調査できます。

  • IAM ロールが必要な IAM アクセス許可を持っていません。

  • CloudWatch Logs をサポートしていない AWS リージョンで環境を立ち上げました。

  • カスタムログファイルの 1 つが、指定されたパスに存在しません。