Elastic Beanstalk 環境の Amazon EC2 インスタンスからのログの表示 - AWS Elastic Beanstalk

Elastic Beanstalk 環境の Amazon EC2 インスタンスからのログの表示

Elastic Beanstalk 環境の Amazon EC2 インスタンスが、アプリケーションまたは設定ファイルに関する問題を解決する際に表示できるログを生成します。ウェブサーバー、アプリケーションサーバー、Elastic Beanstalk プラットフォームスクリプト、および AWS CloudFormation によって作成されたログは、個々のインスタンスにローカルに保管されます。それらは、環境管理コンソールまたは EB CLI を使用して簡単に検索できます。Amazon CloudWatch Logs へログをリアルタイムでストリーミングするよう環境を設定することもできます。

ログ末尾は、最もよく使われるログファイル — Elastic Beanstalk 運用ログおよびウェブサーバーやアプリケーションサーバーのログの最後の 100 行です。環境管理コンソールで、または eb logs を使用してログ末尾をリクエストすると、環境のインスタンスが最新のログエントリを単一のテキストファイルに連結して、それを Amazon S3 にアップロードします。

バンドルログは、yum および cron のログおよび AWS CloudFormation の複数のログを含むさまざまなログファイルのフルログです。バンドルログをリクエストすると、環境のインスタンスはフルログファイルを ZIP のアーカイブにパッケージ化して、それを Amazon S3 にアップロードします。

注記

Elastic Beanstalk Windows Server プラットフォームは、バンドルログをサポートしません。

ローテーションされたログを Amazon S3 にアップロードするには、環境のインスタンスに Elastic Beanstalk Amazon S3 バケットに書き込むためのアクセス許可をもつインスタンスプロファイルが必要です。これらのアクセス許可は Elastic Beanstalk コンソールで初めて環境を起動する際に Elastic Beanstalk によって作成するよう求められる、デフォルトのインスタンスプロファイルに含まれています。

インスタンスログを取得するには

  1. Elastic Beanstalk コンソールを開き、[リージョン] のリストで AWS リージョンを選択します。

  2. ナビゲーションペインで、[環境] を選択し、リストから環境の名前を選択します。

    注記

    環境が多数ある場合は、検索バーを使用して環境リストをフィルタリングします。

  3. ナビゲーションペインで [ログ] を選択します。

  4. [ログのリクエスト] を選択し、取得するログの種類を選択します。ログ末尾を取得するには、[Last 100 Lines] を選択します。バンドルログを取得するには、[Full Logs] を選択します。

    
          Elastic Beanstalk コンソールの [Environment logs (環境ログ)] ページ
  5. Elastic Beanstalk がログの取得を完了したら、[Download] を選択します。

Elastic Beanstalk は、ログ末尾とバンドルログを Amazon S3 バケットに保存し、ログにアクセスするために使用する署名済み Amazon S3 URL を生成します。Elastic Beanstalk は、15 分の持続時間が経過すると、Amazon S3 からファイルを削除します。

警告

ファイルには、署名済み Amazon S3 URL を所有していれば誰でも、削除前にアクセスできます。URL を使用できるように指定するのは、信頼されたパーティに対してのみにしてください。

注記

ユーザーポリシーには s3:DeleteObject アクセス権限が必要です。Elastic Beanstalk は、ユーザーアクセス権限を使用して Amazon S3 からログを削除します。

ログを保持するために、ログがローテーションされると自動的に Amazon S3 に対してログを発行するように環境を設定できます。Amazon S3 へのログのローテーションを有効にするには、「インスタンスログ表示の設定」の手順に従ってください。環境のインスタンスは 1 時間に一度ローテーションされるログをアップロードしようと試みます。

アプリケーションが、環境のプラットフォームのデフォルトの設定の一部ではない場所にあるログを生成する場合、設定ファイル (.ebextensions) を使用してデフォルトの設定を拡張できます。アプリケーションのログファイルをログ末尾、バンドルログ、またはログローテーションに追加できます。

リアルタイムのログストリーミングや長期ストレージを行う場合は、Amazon CloudWatch Logs にログをストリーミングするよう環境を設定します。

Amazon EC2 インスタンス上のログの場所

ログは、環境内の Amazon EC2 インスタンスで標準の場所に保存されます。Elastic Beanstalk は、以下のログを生成します。

Linux

  • /var/log/eb-activity.log

  • /var/log/eb-commandprocessor.log

Windows Server

  • C:\Program Files\Amazon\ElasticBeanstalk\logs\

  • C:\cfn\logs\cfn-init.log

これらのログには、設定ファイルに関するメッセージなど、デプロイメントアクティビティに関するメッセージが含まれます (.ebextensions)。

各アプリケーションとウェブサーバーは、固有フォルダにログを保存します。

  • Apache/var/log/httpd/

  • IISC:\inetpub\wwwroot\

  • Node.js/var/log/nodejs/

  • nginx/var/log/nginx/

  • Passenger/var/app/support/logs/

  • Puma/var/log/puma/

  • Python/opt/python/log/

  • Tomcat/var/log/tomcat8/

Amazon S3 のログの場所

環境のログ末尾またはバンドルログをリクエストしたり、インスタンスがローテーションされたログをアップロードすると、それらは Amazon S3 の Elastic Beanstalk バケットに格納されます。Elastic Beanstalk は環境を作成する AWS リージョンごとに elasticbeanstalk-region-account-id という名前のバケットを作成します。このバケット内では、ログはパス resources/environments/logs/logtype/environment-id/instance-id 内に保存されます。

たとえば、アカウントが 123456789012 であり、AWS リージョン us-west-2 にある Elastic Beanstalk 環境 e-mpcwnwheky のインスタンス i-0a1fd158 のログは、次の場所に保存されます。

  • ログ末尾

    s3://elasticbeanstalk-us-west-2-123456789012/resources/environments/logs/tail/e-mpcwnwheky/i-0a1fd158

  • バンドルログ

    s3://elasticbeanstalk-us-west-2-123456789012/resources/environments/logs/bundle/e-mpcwnwheky/i-0a1fd158

  • ローテーションされたログ

    s3://elasticbeanstalk-us-west-2-123456789012/resources/environments/logs/publish/e-mpcwnwheky/i-0a1fd158

注記

環境 ID は、環境管理コンソールに表示されます。

Elastic Beanstalk は、ログ末尾とバンドルログを作成から 15 分後に自動的に Amazon S3 から削除します。ローテーションされたログは、削除するか S3 Glacier に移動するまで保持されます。

Linux でのログのローテーション設定

Linux プラットフォームで、Elastic Beanstalk は logrotate を使用して定期的にログのローテーションを行います。設定されている場合、ログがローカルでローテーションされると、そのログはローテーションタスクにより選択され、設定されている場合は Amazon S3 にアップロードされます。ローカルにローテーションされたログは、ログの末尾またはバンドルログにはデフォルトで表示されません。

logrotate の Elastic Beanstalk の設定ファイルは /etc/logrotate.elasticbeanstalk.hourly/ にあります。これらのローテーション設定はプラットフォームに固有で、今後のプラットフォームのバージョンで変更される場合があります。使用できる設定の設定と例の詳細については、man logrotate を実行してください。

設定ファイルは、/etc/cron.hourly/ の cron ジョブで呼び出されます。cron の詳細については、「man cron」を実行してください。

デフォルトのログタスク設定の拡張

Elastic Beanstalk は Amazon EC2 インスタンス上の /opt/elasticbeanstalk/tasks (Linux) または C:\Program Files\Amazon\ElasticBeanstalk\config (Windows Server) のサブフォルダにあるファイルを使用して、ログ末尾、バンドルログ、およびログローテーションを設定します。

Linux の場合:

  • ログ末尾

    /opt/elasticbeanstalk/tasks/taillogs.d/

  • バンドルログ

    /opt/elasticbeanstalk/tasks/bundlelogs.d/

  • ローテーションされたログ

    /opt/elasticbeanstalk/tasks/publishlogs.d/

Windows Server の場合:

  • ログ末尾

    c:\Program Files\Amazon\ElasticBeanstalk\config\taillogs.d\

  • ローテーションされたログ

    c:\Program Files\Amazon\ElasticBeanstalk\config\publogs.d\

たとえば、Linux のファイル eb-activity.conf が 2 つのログファイルを末尾ログのタスクに追加します。

/opt/elasticbeanstalk/tasks/taillogs.d/eb-activity.conf

/var/log/eb-commandprocessor.log /var/log/eb-activity.log

環境設定ファイル (.ebextensions) を使用して、独自の .conf ファイルをこれらのフォルダに追加できます。.conf ファイルでは、お客様のアプリケーションに固有のログファイルが表示されます。これは Elastic Beanstalk によってログファイルタスクに追加されます。

files セクションを使用して、変更するタスクに設定ファイルを追加します。たとえば、次の設定テキストは、ログ設定ファイルを環境の各インスタンスに追加します。このログ設定ファイル cloud-init.conf は、ログ末尾に /var/log/cloud-init.log を追加します。

files: "/opt/elasticbeanstalk/tasks/taillogs.d/cloud-init.conf" : mode: "000755" owner: root group: root content: | /var/log/cloud-init.log

このテキストを .config ファイル名拡張子をもつファイルに追加して .ebextensions という名前のフォルダ内のソースバンドルに追加します。

~/workspace/my-app |-- .ebextensions | `-- tail-logs.config |-- index.php `-- styles.css

Linux プラットフォームでは、ログのタスク設定でワイルドカード文字を使用することもできます。この設定ファイルは .log ファイル名拡張子をもつすべてのファイルをアプリケーションのルートにある log フォルダからバンドルログに追加します。

files: "/opt/elasticbeanstalk/tasks/bundlelogs.d/applogs.conf" : mode: "000755" owner: root group: root content: | /var/app/current/log/*.log
注記

ログタスク設定では、Windows プラットフォームでワイルドカード文字はサポートされません。

設定ファイルの使用方法の詳細については、「設定ファイル (.ebextensions) による高度な環境のカスタマイズ」を参照してください。

ログ末尾やバンドルログを拡張するのと同様に、設定ファイルを使用してログのローテーションを拡張できます。Elastic Beanstalk は、独自のログをローテーションして Amazon S3 にアップロードするたびに、追加のログもローテーションおよびアップロードします。ログのローテーション拡張は、プラットフォームのオペレーティングシステムによって動作が異なります。以下のセクションでは、2 つのケースについて説明します。

Linux でのログのローテーション拡張

Linux でのログのローテーション設定」で説明したように、Elastic Beanstalk は Linux プラットフォームでは logrotate を使用してログをローテーションします。ログのローテーションについてアプリケーションのログファイルを設定すると、アプリケーションはログファイルのコピーを作成する必要はありません。Elastic Beanstalk は logrotate を設定し、ローテーションごとにアプリケーションのログファイルのコピーを作成します。したがって、アプリケーションはログファイルにアクティブに書き込んでいないときは、ログファイルをロック解除した状態を維持する必要があります。

Windows サーバーでのログのローテーション拡張

Windows Server では、アプリケーションのログファイルでログのローテーションを設定する場合、アプリケーションはログファイルを定期的にローテーションする必要があります。Elastic Beanstalk は、設定されたパターンで始まる名前を持つファイルを探し、Amazon S3 へのアップロードのためにそれらのファイルを選択します。さらに、ファイル名のピリオドは無視され、Elastic Beanstalk は、ピリオドまでの名前がログファイルのベース名であると見なします。

Elastic Beanstalk は、最新のものを除くすべてのバージョンのベースログファイルをアップロードします。これは、このファイルがアクティブなアプリケーションログファイルであり、ロックされる可能性があると見なされるためです。したがって、アプリケーションはローテーション間でアクティブなログファイルのロックを維持できます。

たとえば、アプリケーションが my_log.log というログファイルに書き込み、この名前を .conf ファイルで指定するとします。アプリケーションは定期的にファイルをローテーションします。アプリケーションは、Elastic Beanstalk のローテーションサイクル中に、ログファイルのフォルダで my_log.logmy_log.0800.logmy_log.0830.log の各ファイルを検索します。Elastic Beanstalk は、すべてがベース名 my_log のバージョンであると見なします。ファイル my_log.log には最新の変更時間があるため、Elastic Beanstalk は他の 2 つのファイル my_log.0800.log および my_log.0830.log のみをアップロードします。

Amazon CloudWatch Logs へのログファイルのストリーミング

Elastic Beanstalk コンソールで Amazon CloudWatch Logs にログをストリーミングするよう環境を設定するか、設定オプションを使用して設定できます。CloudWatch Logs では、環境の各インスタンスがロググループにログをストリーミングします。ロググループは、環境の終了後も数週間または数年間保持するよう設定できます。

ストリーミングされるログのセットは環境によって異なりますが、アプリケーションの前面で実行される nginx または Apache プロキシサーバーからの eb-activity.log とアクセスログが常に含まれます。

環境の作成時または既存の環境のいずれかの Elastic Beanstalk コンソールで、ログのストリーミングを設定することができます。次の例では、環境が終了した場合でもログは最大 7 日間保存されます。


        CloudWatch LogsX 設定

次の設定ファイルでは、環境が終了した場合でも 180 日間はログストリーミングが可能になります。

例 .ebextensions/log-streaming.config

option_settings: aws:elasticbeanstalk:cloudwatch:logs: StreamLogs: true DeleteOnTerminate: false RetentionInDays: 180