Elastic Beanstalk でのログ記録の問題をトラブルシューティングする方法を教えてください。

最終更新日: 2019 年 10 月 29 日

ログファイルが空であるか、ログストリームがログメッセージのストリーミングを突然停止しました。AWS Elastic Beanstalk でこの問題を解決する方法を教えてください。

解決方法

発生しているログ記録の問題に基づいて、次のオプションのいずれかを選択します。

空のログファイルを見つける

デフォルトでは、Elastic Beanstalk はすべてのログを環境内の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに保持し、定期的にログをローテーションしてファイルサイズを管理し、ディスク容量を節約します。Elastic Beanstalk は、ログを Amazon Simple Storage Service (Amazon S3) にエクスポートします。詳細については、Linux でのログのローテーション設定を参照してください。

最近ローテーションされたログメッセージにアクセスするには、/var/log/rotated を確認します。

ログファイルとログストリームが新しいログメッセージの出力を停止した理由を調べる

Amazon CloudWatch Logs を使用して、Elastic Beanstalk EC2 インスタンスからログファイルを継続的にストリーミングします。

EC2 インスタンスで最初のログのローテーションが発生した後にログストリーミングが機能しなくなった場合、アプリケーションは一意の行をログに記録していない可能性があります。たとえば、アプリケーションログは次のようになります。

Hello my application!
- at time 1:00 PM
Hello my application!
- at time 2:00 PM
...

前の例で、すべての行が一意であるわけではありません。一意のエントリは 2 行にまたがっています。このログファイルを一意に識別するには、最低 2 行が必要です。

注意: CloudWatch Logs エージェント はログファイルを識別し、ファイルに含まれる一意の行数を使用して、ログのローテーションが発生したことを検出します。

ログストリーミングを再び機能させるには、次のいずれかを試してください。

アプリケーションログ形式を編集して、各行の先頭に一意の識別子 (タイムスタンプなど) を含めます。

- または -

file_fingerprint_lines エントリを編集して、ファイルを一意に識別するために十分な行が含まれるまで、ファイルの行数をカウントします。

注意: この設定を編集するには、CloudWatch Logs エージェント設定をカスタマイズする必要があります。Elastic Beanstalk と CloudWatch Logs との統合では、アプリケーションが生成するカスタムログファイルのストリーミングを直接サポートしていません。カスタムログをストリーミングするには、設定ファイルを使用して CloudWatch Logs エージェントを直接インストールし、プッシュするファイルを設定します。

たとえば、次の .ebextension は Node.js アプリケーションログファイルの file_fingerprint_lines をカスタマイズします。

files:
  "/etc/awslogs/config/beanstalklogs.conf":
    mode: "000644"
    user: root
    group: root
    content: |
      [/var/log/nodejs/nodejs.log]
      log_group_name=/aws/elasticbeanstalk/streamlogs/var/log/nodejs/nodejs.log
      log_stream_name={instance_id}
      file=/var/log/nodejs/nodejs.log*
      file_fingerprint_lines=2-5
 
      [/var/log/nginx/error.log]
      log_group_name=/aws/elasticbeanstalk/streamlogs/var/log/nginx/error.log
      log_stream_name={instance_id}
      file=/var/log/nginx/error.log*
 
      [/var/log/nginx/access.log]
      log_group_name=/aws/elasticbeanstalk/streamlogs/var/log/nginx/access.log
      log_stream_name={instance_id}
      file=/var/log/nginx/access.log*
 
      [/var/log/httpd/error.log]
      log_group_name=/aws/elasticbeanstalk/streamlogs/var/log/httpd/error.log
      log_stream_name={instance_id}
      file=/var/log/httpd/error.log*
 
      [/var/log/httpd/access.log]
      log_group_name=/aws/elasticbeanstalk/streamlogs/var/log/httpd/access.log
      log_stream_name={instance_id}
      file=/var/log/httpd/access.log*
 
      [/var/log/eb-activity.log]
      log_group_name=/aws/elasticbeanstalk/streamlogs/var/log/eb-activity.log
      log_stream_name={instance_id}
      file=/var/log/eb-activity.log*
 
commands:
  01_remove_eb_stream_config:
    command: 'rm -fr /etc/awslogs/config/beanstalklogs.conf.bak'
  02_restart_log_agent:
    command: 'service awslogs restart'

ログストリームの作成失敗のトラブルシューティング

ログストリーミングを有効にしても、ログストリームが表示されない場合は、CloudWatch Logs 統合のトラブルシューティングを参照してください。