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 コンソールの環境ログページ
  5. Elastic Beanstalk でログの取得が完了したら、[ダウンロード] を選択します。

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 プラットフォームでワイルドカード文字はサポートされません。

注記

ログのカスタマイズ手順に慣れるために、EB CLI を使用してサンプルアプリケーションをデプロイできます。このために、EB CLI によって、サンプル設定の .ebextentions サブディレクトリを含むローカルアプリケーションディレクトリが作成されます。サンプルアプリケーションのログファイルを使用して、このトピックで説明されているログ取得機能をさまざまに試すこともできます。EB CLI を使用してサンプルアプリケーションを作成する方法の詳細については、「EB CLI の基本」を参照してください。

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

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

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

Linux でのログのローテーション設定」で説明したように、Linux プラットフォームでは Elastic Beanstalk が 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 へのログファイルのストリーミング

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

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

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


        CloudWatch Logs の設定

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

例 .ebextensions/log-streaming.config

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