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 統合のトラブルシューティングを参照してください。