ログファイルが空か、ログストリームが突然ログメッセージのストリーミングを停止しました。AWS Elastic Beanstalk でこの問題を解決したいと思っています。
解決策
発生したロギングの問題に応じて、次のオプションのいずれかを選択します。
空のログファイルを見つける
デフォルトでは、Elastic Beanstalk は環境内の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのすべてのログを保持します。Elastic Beanstalk は定期的にログをローテーションしてファイルサイズを管理し、ディスク容量を節約します。Elastic Beanstalk はログを Amazon Simple Storage Service (Amazon S3) にエクスポートします。詳細については、「Linux のログローテーション設定」を参照してください。最近ローテーションされたログメッセージにアクセスするには、/var/log/rotated をチェックしてください。
ログファイルとログストリームが新しいログメッセージを出力しなくなった理由を特定する
Elastic Beanstalk EC2 インスタンスからログファイルを継続的にストリーミングするには、Amazon CloudWatch Logs を使用してください。
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 エージェントをインストールし、プッシュするファイルを設定します。
たとえば、次の .eb 拡張子は、Node.js アプリケーションログファイルの _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 統合のトラブルシューティング」を参照してください。
関連情報
Amazon CloudWatch Logs でのエラスティックビーンストークの使用
カスタムログファイルストリーミング
GitHub ウェブサイトの logs-streamtocloudwatch-linux.config