查看您的 Elastic Beanstalk 环境中的 Amazon EC2 实例的日志 - AWS Elastic Beanstalk

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

查看您的 Elastic Beanstalk 环境中的 Amazon EC2 实例的日志

本主题介绍 Elastic Beanstalk 提供的实例日志类型。它还提供了检索和管理它们的详细说明。

Elastic Beanstalk 环境中的 Amazon EC2 实例会生成日志,您可以查看这些日志来对应用程序或配置文件进行故障排除。由 Web 服务器、应用程序服务器、Elastic Beanstalk 平台脚本和 AWS CloudFormation 创建的日志在本地存储在各个实例上。您可使用环境管理控制台或 EB CLI 轻松检索这些日志。您还可以将环境配置为将日志实时流式传输到 Amazon CloudWatch Logs。

结尾日志是最常用日志文件的后 100 行,最常用日志文件有 Elastic Beanstalk 操作日志和来自 Web 服务器或应用程序服务器的日志。当您使用环境管理控制台或 eb logs 请求结尾日志时,环境中的一个实例会将最新的日志条目连接为一个文本文件,并将其上传到 Amazon S3。

捆绑日志是包含更多日志文件的完整日志,包括来自 yum 和 cron 的日志以及一些来自 AWS CloudFormation 的日志。当您请求捆绑日志时,环境中的一个实例会将完整日志文件打包为一个 ZIP 存档并上传到 Amazon S3。

注意

Elastic Beanstalk Windows Server 平台不支持捆绑日志。

要将已轮换的日志上传到 Amazon S3,环境中的实例必须有一个实例配置文件,并且具有向您的 Elastic Beanstalk Amazon S3 存储桶写入的权限。这些权限包含在默认实例配置文件中,在 Elastic Beanstalk 控制台中首次启动环境时,Elastic Beanstalk 将提示您创建该配置文件。

检索实例日志
  1. 打开 Elastic Beanstalk 控制台,然后在 Regions(区域)列表中选择您的 AWS 区域。

  2. 在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。

    注意

    如果您有多个环境,请使用搜索栏筛选环境列表。

  3. 在导航窗格中,选择日志

  4. 选择 Request Logs (请求日志),然后选择要检索的日志类型。要检索结尾日志,请选择 Last 100 Lines (最后 100 行)。要检索捆绑日志,请选择 Full Logs (完整日志)

  5. Elastic Beanstalk 完成检索日志后,选择 Download (下载)

Elastic Beanstalk 将结尾和捆绑日志存储在 Amazon S3 存储桶中,并生成可用于访问日志的预签名 Amazon S3 URL。Elastic Beanstalk 会在 15 分钟的持续时间之后,从 Amazon S3 中删除文件。

警告

拥有该预签名 Amazon S3 URL 的任何人都可以在这些文件被删除之前访问这些文件。只能将该 URL 提供给可信方。

注意

您的用户策略必须具有 s3:DeleteObject 权限。Elastic Beanstalk 使用您的用户权限从 Amazon S3 中删除日志。

要保留日志,您可以将环境配置为在日志轮换后自动将它们发布到 Amazon S3。要启用到 Amazon S3 的日志轮换,请按照配置实例日志查看中的过程操作。环境中的实例会尝试每小时上传一次已轮换的日志。

如果应用程序不是在环境平台默认配置的位置生成日志,可以使用配置文件 (.ebextensions) 扩展默认配置。您可以将应用程序的日志文件添加到结尾日志、捆绑日志或日志轮换中。

要实现实时日志流和长期存储,请将您的环境配置为将日志流式传输到 Amazon CloudWatch Logs

Amazon EC2 实例上的日志位置

日志存储在您环境中 Amazon EC2 实例上的标准位置。Elastic Beanstalk 生成以下日志。

Amazon Linux 2

  • /var/log/eb-engine.log

Amazon Linux AMI (AL1)

注意

2022 年 7 月 18 日,Elastic Beanstalk 将基于 Amazon Linux AMI(AL1)的所有平台分支的状态设置为已停用有关迁移到当前且完全受支持的 Amazon Linux 2023 平台分支的更多信息,请参阅 将 Elastic Beanstalk Linux 应用程序迁移到 Amazon Linux 2023 或 Amazon Linux 2

  • /var/log/eb-activity.log

  • /var/log/eb-commandprocessor.log

Windows Server

  • C:\Program Files\Amazon\ElasticBeanstalk\logs\

  • C:\cfn\log\cfn-init.log

这些日志中包含有关部署活动的消息,包括与配置文件(.ebextensions)有关的消息。

各应用程序和 Web 服务器都在其自己的文件夹中存储日志:

  • Apache/var/log/httpd/

  • IISC:\inetpub\wwwroot\

  • Node.js/var/log/nodejs/

  • nginx/var/log/nginx/

  • Passenger/var/app/support/logs/

  • Puma/var/log/puma/

  • Python/opt/python/log/

  • Tomcat/var/log/tomcat/

Amazon S3 中的日志位置

当您从环境请求结尾日志或捆绑日志时,或在实例上传轮换日志时,它们存储在 Amazon S3 中您的 Elastic Beanstalk 存储桶中。Elastic Beanstalk 为您在其中创建环境的每个AWS区域创建一个名为 elasticbeanstalk-region-account-id 的存储桶。在此存储桶内,日志存储在路径 resources/environments/logs/logtype/environment-id/instance-id 下。

例如,Elastic Beanstalk 环境 e-mpcwnwheky(位于账户 123456789012 的AWS区域 us-west-2 中)的实例 i-0a1fd158 的日志存储在以下位置:

  • 结尾日志

    s3://elasticbeanstalk-us-west-2-123456789012/resources/environments/logs/tail/e-mpcwnwheky/i-0a1fd158

  • 捆绑日志

    s3://elasticbeanstalk-us-west-2-123456789012/resources/environments/logs/bundle/e-mpcwnwheky/i-0a1fd158

  • 轮换日志

    s3://elasticbeanstalk-us-west-2-123456789012/resources/environments/logs/publish/e-mpcwnwheky/i-0a1fd158

注意

您可以在环境管理控制台中查找您的环境 ID。

Elastic Beanstalk 在结尾日志和捆绑日志创建 15 分钟后自动将它们从 Amazon S3 中删除。轮换日志会保留到您将它们删除或移入 S3 Glacier。

Linux 上的日志轮换设置

在 Linux 平台上,Elastic Beanstalk 使用 logrotate 来定期轮换日志。如果已配置,则日志在本地轮换后,将由日志轮换任务选取并上传至 Amazon S3。默认情况下,已本地轮换的日志不会显示在结尾日志或捆绑日志中。

您可在 /etc/logrotate.elasticbeanstalk.hourly/ 中找到 logrotate 的 Elastic Beanstalk 配置文件。这些轮换设置是平台特定的,以后的平台版本中可能会有变化。如需有关可用的设置和示例配置的更多信息,请运行 man logrotate

配置文件在 /etc/cron.hourly/ 中由 cron 任务调用。有关 cron 的更多信息,请运行 man cron

扩展默认日志任务配置

Elastic Beanstalk 使用 Amazon EC2 实例上的子文件夹 /opt/elasticbeanstalk/tasks (Linux) 或 C:\Program Files\Amazon\ElasticBeanstalk\config (Windows Server) 中的文件配置结尾日志、捆绑日志和日志轮换任务。

在 Amazon Linux 上:

  • 结尾日志

    /opt/elasticbeanstalk/tasks/taillogs.d/

  • 捆绑日志

    /opt/elasticbeanstalk/tasks/bundlelogs.d/

  • 轮换日志

    /opt/elasticbeanstalk/tasks/publishlogs.d/

在 Windows Server 上:

  • 结尾日志

    c:\Program Files\Amazon\ElasticBeanstalk\config\taillogs.d\

  • 轮换日志

    c:\Program Files\Amazon\ElasticBeanstalk\config\publogs.d\

例如,Linux 上的 eb-activity.conf 文件将两个日志文件添加到结尾日志任务。

/opt/elasticbeanstalk/tasks/taillogs.d/eb-activity.conf

/var/log/eb-commandprocessor.log /var/log/eb-activity.log

您可以使用环境配置文件 (.ebextensions) 将自己的 .conf 文件添加到这些文件夹。.conf 文件列出应用程序特定的日志文件,Elastic Beanstalk 将这些日志文件添加到日志文件任务。

使用 files 部分可将配置文件添加到要修改的任务。例如,以下配置文本向您的环境中的每个实例添加一个日志配置文件。此日志配置文件 (即 cloud-init.conf) 向结尾日志添加 /var/log/cloud-init.log

files: "/opt/elasticbeanstalk/tasks/taillogs.d/cloud-init.conf" : mode: "000755" owner: root group: root content: | /var/log/cloud-init.log

将此文本添加到扩展名为 .config 的文件中,并将该文件添加到您的源包中名为 .ebextensions 的文件夹下。

~/workspace/my-app |-- .ebextensions | `-- tail-logs.config |-- index.php `-- styles.css

在 Linux 平台上,您也可以在日志任务配置中使用通配符。此配置文件将应用程序根目录下 .log 文件夹中扩展名为 log 的所有文件添加到捆绑日志中。

files: "/opt/elasticbeanstalk/tasks/bundlelogs.d/applogs.conf" : mode: "000755" owner: root group: root content: | /var/app/current/log/*.log

在 Windows 平台上,日志任务配置不支持通配符。

注意

为了帮助您自行熟悉日志自定义过程,您可以使用 EB CLI 部署示例应用程序。为此,EB CLI 创建一个本地应用程序目录,其中包含 .ebextentions 子目录以及示例配置。还可以使用示例应用程序的日志文件来探索本主题中描述的日志检索功能。有关如何使用 EB CLI 创建示例应用程序的更多信息,请参阅 EB CLI 基础知识

有关使用配置文件的更多信息,请参阅使用配置文件 (.ebextensions) 进行高级环境自定义

与扩展结尾日志和捆绑日志非常相似,可以使用配置文件来扩展日志轮换。只要 Elastic Beanstalk 轮换自己的日志并将其上传到 Amazon S3,它也轮换和上传您的附加日志。日志轮换扩展的行为因平台的操作系统而异。以下部分介绍两种情况。

在 Linux 上扩展日志轮换

Linux 上的日志轮换设置中所述,Elastic Beanstalk 使用 logrotate 在 Linux 平台上轮换日志。如果配置应用程序的日志文件进行日志轮换,应用程序无需创建日志文件的副本。Elastic Beanstalk 将 logrotate 配置为对每个轮换创建应用程序日志文件的副本。因此,应用程序在未主动向日志文件写入内容时,必须使这些日志文件保持解锁状态。

在 Windows Server 上扩展日志轮换

在 Windows Server 中,如果配置应用程序的日志文件进行日志轮换,该应用程序必须定期轮这些日志文件。Elastic Beanstalk 查找其名称以配置的模式开头的文件,选取这些文件以便上传到 Amazon S3。此外,Amazon S3 忽略文件名中的句点,将句点之前的名称视为基本日志文件名。

Amazon S3 上传基本日志文件的所有版本(最新版本除外),因为它认为最新版本是活动的应用程序日志文件,可能处于锁定状态。因此,应用程序可使活动日志文件在轮换之间保持锁定状态。

例如,应用程序写入名为 my_log.log 的日志文件,您在 .conf 文件中指定该名称。应用程序定期轮换该文件。在 Elastic Beanstalk 轮换周期中,它在日志文件的文件夹中找到以下文件:my_log.logmy_log.0800.logmy_log.0830.log。Elastic Beanstalk 将所有这些文件都视为基本名称 my_log 的版本。文件 my_log.log 的修改时间最晚,因此,Elastic Beanstalk 仅上传其他两个文件:my_log.0800.logmy_log.0830.log

将日志文件流式传输到 Amazon CloudWatch Logs

您可以在 Elastic Beanstalk 控制台中或使用配置选项,将环境配置为流式传输日志到 Amazon CloudWatch Logs。借助 CloudWatch Logs,您环境中的每个实例都会将日志流式传输到日志组。对于日志组,您可以将其配置为保留数周或数年(即使在环境终止后)。

流式传输的日志集根据环境而有所不同,但始终包含 eb-engine.log 和来自在应用程序前运行的 nginx 或 Apache 代理服务器的访问日志。

您可以使用 Elastic Beanstalk 控制台,在创建环境期间或者为现有环境配置日志流。您可以从控制台设置以下选项:启用/禁用日志流式传输到 CloudWatch Logs、设置保留天数以及从生命周期选项中进行选择。在以下示例中,日志最多保存七天,甚至在环境已终止时也是如此。

Elastic Beanstalk 控制台中的 CloudWatch Logs 设置的屏幕图像。

下面的配置文件启用了保留期为 180 天(即使环境已终止)的日志流。

例 .ebextensions/log-streaming.config
option_settings: aws:elasticbeanstalk:cloudwatch:logs: StreamLogs: true DeleteOnTerminate: false RetentionInDays: 180