在 Elastic Beanstalk 环境中查看来自亚马逊EC2实例的日志 - AWS Elastic Beanstalk

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

在 Elastic Beanstalk 环境中查看来自亚马逊EC2实例的日志

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

您的 Elastic Beanstalk 环境中的亚马逊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 控制台,然后在 “区域” 列表中,选择您的。 AWS 区域

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

    注意

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

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

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

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

Elastic Beanstalk 将尾部日志和捆绑日志存储在亚马逊 S3 存储桶中,并生成一个预签名的亚马逊 S3URL,你可以用它来访问日志。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

亚马逊 Linux AMI (AL1)

注意

2022 年 7 月 18 日,Elastic Beanstalk 将所有基于亚马逊 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 e-mpcwnwheky Beanstalk AWS 环境us-west-2中的日志存储123456789012在以下位置: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 使用EC2亚马逊实例上 (LinuxC:\Program Files\Amazon\ElasticBeanstalk\config) 或 (Windows Server) /opt/elasticbeanstalk/tasks 子文件夹中的文件来配置尾部日志、捆绑日志和日志轮换的任务。

在 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,请参阅 E B 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 日志

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

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

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

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

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

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