如何解决 Elastic Beanstalk 中的日志记录问题?

1 分钟阅读
0

我的日志文件是空的,或者我的日志流突然停止流式传输日志消息。我想解决 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

AWS 官方
AWS 官方已更新 10 个月前