我的日志文件是空的,或者我的日志流突然停止流式传输日志消息。我想解决 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 日志。
如果在 EC2 实例上进行第一次日志轮换后日志流不工作,有可能是因为您的应用程序无法记录唯一的行。您的应用程序日志可能类似于以下示例:
Hello my application!- at time 1:00 PM
Hello my application!
- at time 2:00 PM
...
在前面的示例中,不是每一行都是唯一的。有一个唯一条目跨了两行。至少需要两行才能唯一标识此日志文件。
注意: 为了检测何时发生日志轮换,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 集成故障排除。
相关信息
将 Elastic Beanstalk 与 Amazon CloudWatch Logs 一起使用
自定义日志文件流式传输
GitHub 网站上的 logs-streamtocloudwatch-linux.config