View a markdown version of this page

查看 Elastic Beanstalk 环境的部署日志 - AWS Elastic Beanstalk

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

查看 Elastic Beanstalk 环境的部署日志

Elastic Beanstalk 会为每次部署到您的环境生成部署日志。部署日志提供了部署期间发生的情况的综合视图,因此您无需自己收集多个日志即可诊断故障。日志包含的内容以及何时可用,取决于该环境是 Beanstalk 标准环境还是 Beanstalk 集群环境。

使用 Beanstalk 标准版,部署日志将在本地写入每个实例。对于通过控制台、CLI、API 或托管更新触发的部署,一个实例在部署期间会持续将其日志上传到 Amazon S3。Elastic Beanstalk 控制台从 Amazon S3 读取日志,因此您无需连接到实例即可监控进度。

标准部署日志的设计简洁明了。成功后,日志仅显示摘要消息(例如,哪些命令已运行和完成)。失败时,日志包含失败步骤的多达 50 行输出,因此您无需筛选详细输出即可看到错误。

使用 Beanstalk 集群,Elastic Beanstalk 会在操作完成后收集部署日志。它收集环境中每个 pod 的容器日志,以及环境命名空间的 Kubernetes 事件,并将它们作为单个 zip 文件上传到环境的 Amazon S3 存储桶中。Elastic Beanstalk 控制台从 Amazon S3 读取压缩文件并显示其内容,因此您无需连接到集群即可读取该文件。可用性不取决于平台版本,而且 Elastic Beanstalk 不会向您的节点写入部署日志文件。

注意

对于 Beanstalk 标准环境,部署日志适用于 2026 年 3 月 11 日当天或之后发布的 Amazon Linux 2 和 Amazon Linux 2023 平台版本,以及 2026 年 4 月 22 日当天或之后发布的 Windows 平台版本。

支持的操作

对于 Beanstalk 标准环境,会为以下操作生成部署日志:

  • 应用程序部署 -将新的应用程序版本部署到您的环境。

  • 配置更新 -更改应用于现有实例的环境配置设置,以及向环境添加新实例的更新。

  • 环境创建 -创建新环境时的初始部署。

  • 重启应用程序服务器 -在您的实例上重新启动应用程序服务器。

  • 托管平台更新 — Elastic Beanstalk 在定期维护时段内自动应用平台更新。

不修改实例上的应用程序或配置状态的操作,例如请求日志、交换 CNAME 或更新标签,不会生成部署日志。

对于 Beanstalk Cluster 环境,为环境创建、应用程序部署、配置更新、重启应用程序服务器和终止环境生成部署日志。终止环境会生成部署日志,而 Beanstalk Standard 不会生成部署日志。托管平台更新不适用,因为 Beanstalk 集群环境运行容器镜像而不是平台版本。

部署步骤完成后,Elastic Beanstalk 会收集 Beanstalk 集群环境的部署日志。如果操作在该步骤之前失败,例如在构建容器镜像、创建集群、配置资源或生成 Kubernetes 规范时,则没有部署日志,环境事件会描述发生的情况。有关更多信息,请参阅 查看 Elastic Beanstalk 环境的事件流。

部署日志内容

对于 Beanstalk 标准环境,部署日志会在部署期间捕获以下信息:

  • 部署生命周期 -每个部署阶段的开始和完成消息,例如Starting Application deployment和Completed Application deployment。

  • .ebextension s 输出 — 成功时显示运行的命令的名称。失败时,使用最后 50 行cfn-init输出来帮助诊断问题。

  • 平台挂钩输出 -成功时显示运行的挂钩脚本的名称。失败时,最后50行挂机输出。

  • 依赖关系安装 — 包管理器的输出npm install,例如pip install、composer install、和bundle install。成功时,仅记录完成消息。失败时,包括最后 50 行输出。

  • 生成输出 -生成命令(如docker buildgo build、和 Java 构建)的输出。失败时,包括最后 50 行输出。

  • 应用程序启动输出 -应用程序启动后的初始输出。来源取决于您的平台:

    • Docker — 来自docker logs或的容器日志 docker compose logs

    • Java SE、Go Node.js、Python、Ruby、.NET — 处理标准输出日志

    • Tomcat — Catalina 日志输出

    • PHP — PHP-FPM 主服务器和池错误日志

    • ECS — 来自每个任务容器的容器日志

    注意

    在应用程序启动 2 秒后开始捕获应用程序输出。仅包含初始启动消息——如果您的应用程序需要更长的时间才能生成输出,则不会出现在部署日志中。要查看完整的应用程序日志,请请求捆绑日志或直接连接到实例。有关更多信息,请参阅 查看实例日志。

当部署步骤失败时,日志会对其进行标记,[ERROR]并包含失败步骤的多达 50 行输出。如果部署日志不包含足够的详细信息,则可以从 “日志” 选项卡检索完整的实例日志(包括eb-engine.logeb-hooks.log、和应用程序日志)。有关更多信息,请参阅 查看您的 Elastic Beanstalk 环境中的 Amazon EC2 实例的日志。

Beanstalk 集群环境的部署日志内容

对于 Beanstalk 集群环境,部署日志是一个 zip 文件。它在目录下保存一个环境范围的事件文件和每个 pod 的一个1-environment/文件:

1-environment/ _k8Events.txt pod-name.txt

_k8Events.txt在环境的命名空间中保存与单个 Pod 无关的 Kubernetes 事件,例如调度、音量、扩展和负载均衡器事件。前面的下划线首先对其进行排序。

每个=====EVENTS=====区块都以一个存放该 pod 事件的区块pod-name.txt开始,最旧的事件排在最前面,然后是存放 pod 中每个容器日志的=====LOGS=====区块。初始化容器以自己的容器块的形式出现,因此,当初始化容器失败时,应用程序容器将出现空日志,而不是第二个问题。

对于正在重启的容器,该 pod 的=====EVENTS=====区块会命名原因(例如,BackOff),该=====LOGS=====区块保存容器截至收集时的日志。不包括容器早期实例的日志。

每个容器的日志上限为 5 MiB,没有行数限制。达到上限的日志被标记为截断。除了该上限之外,无论操作成功还是失败,都不会从日志中删除任何内容。如果 Elastic Beanstalk 无法读取一个容器的日志,则会继续进行收集,该容器的区块会记录错误。

依赖项安装和编译输出不在 Beanstalk 集群环境的部署日志中。这些情况发生在 Elastic Beanstalk 构建您的容器镜像时。有关更多信息,请参阅 为 Beanstalk 集群环境构建容器镜像。

在控制台中查看部署日志

Elastic Beanstalk 控制台在环境仪表板上提供了 “部署” 选项卡,您可以在其中查看部署历史记录和日志。部署历史记录显示过去 42 天(6 周)的部署。

查看部署历史记录

查看部署历史记录
  1. 打开 E lastic Beanstalk 控制台,然后在区域列表中选择您的。 AWS 区域

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

  3. 在环境仪表板中,选择 “部署” 选项卡。

    “部署” 选项卡显示环境的部署表。每行都包含以下信息:

    • 请求 ID -部署的唯一标识符。

    • 状态 - 成功、失败或进行中。

    • 类型 -部署类型,例如环境创建、应用程序部署、配置更新、托管平台更新、重启应用程序服务器、重建环境、还原环境、交换环境域或终止环境。

    • 策略 -部署策略,例如 “一次性全部”、“滚动” 、“滚动” 、“附加批次滚动” 、“不可变” 或 “流量拆分”。

    • 开始时间 -开始部署的时间。

    • 持续时间 -完成部署所需的时间。

部署进行时,该选项卡会自动轮询更新。您也可以选择刷新按钮来手动重新加载列表。

查看部署详细信息和日志

查看部署详细信息
  1. 在 “部署” 选项卡上,选择要检查的部署的 “请求 ID” 链接。

  2. 部署详细信息页面显示摘要部分,其中包含请求 ID、状态、部署类型、开始时间、持续时间和部署策略。当可以根据部署事件确定部署策略(例如,All at Once 、 Rolly(滚动)、附加批次的滚动、不可变或流量拆分)时,就会显示出来。

  3. 在摘要下方,选择以下选项卡之一:

    • 事件 -与此部署相关的事件的时间表,经过筛选后仅显示所选部署的事件。

    • 部署日志 -来自实例的合并部署日志。您可以按日志级别搜索、筛选和下载日志文件。

对于 Beanstalk Standard 环境中正在进行的部署,日志选项卡会自动刷新,以在写入新日志条目时显示这些条目。部署完成后,控制台会获取最终的日志状态,以确保您看到完整的输出。

对于 Beanstalk 集群环境,部署日志会在操作完成后显示,因此操作运行时日志选项卡不会刷新。首先显示环境范围的事件文件,然后显示每个 pod 的文件。如果压缩的 zip 文件大于 5 MiB,控制台会要求您从 Amazon S3 下载该文件而不是显示它。该限制适用于整个存档,不适用于任何单个容器的日志。

重要

在控制台中查看部署日志需要环境的 Amazon S3 存储桶的s3:GetObject权限 (elasticbeanstalk-region-account-id)。如果您的 IAM 政策不包含此权限,则部署历史记录和事件仍可用,但日志选项卡将显示错误。

部署日志存储在哪里

Beanstalk 标准实例上的部署日志文件

部署日志写入到每个实例的/var/log/deployments/目录中。日志文件名取决于触发部署的方式:

  • Workflow-controlled 部署(通过控制台、CLI 或 API 触发)—eb-deployment-request-id.log,其中request-id是唯一的部署请求 ID。

  • Self-startup 部署(实例启动)—eb-deployment-timestamp-instance-id.log,其timestamp中 UTC 格式(例如20260317T151315Z),instance-id是 Amazon EC2 实例 ID。

Elastic Beanstalk 会自动轮换这些文件,保留每个实例上的 50 个最新部署日志。

对于工作流程控制的部署,日志将通过以下路径上传到 Amazon S3:

s3://elasticbeanstalk-region-account-id/resources/environments/logs/deployments/environment-id/log-filename

对于自启动部署,日志将上传到 Amazon S3 的selfstartup/子目录下:

s3://elasticbeanstalk-region-account-id/resources/environments/logs/deployments/environment-id/selfstartup/log-filename

对于工作流控制的部署,第一个开始上传的实例声称拥有整个部署的角色。该实例在部署期间将其日志上传到 Amazon S3。对于自启动部署,每个实例独立上传自己的日志。所有实例仍在本地写入部署日志。

重要

将部署日志上传到 Amazon S3 需要在实例配置文件中获得环境的 Amazon S3 存储桶的s3:PutObject权限,并且 VPC 配置必须允许与 Amazon S3 的连接。

每个文件上传的部署日志上限为 1 MB。如果部署日志超过此大小,则上传的版本将被截断,并显示一条消息,表明该实例上有完整的日志可用。

禁用 S3 日志上传

对于 Beanstalk 标准环境,为防止部署日志上传到 Amazon S3,请在您的环境上设置以下环境属性:

option_settings: - namespace: aws:elasticbeanstalk:application:environment option_name: EB_DEPLOYMENT_LOG_S3_DISABLED value: true

设置此环境属性后,部署日志仍会在本地写入每个实例/var/log/deployments/上,但不会上传到 Amazon S3,也不会在控制台的 “部署” 选项卡中可用。您还可以在配置页面的软件下设置此属性,或者使用 EB CLI 或 AWS CLI。

该EB_DEPLOYMENT_LOG_S3_DISABLED属性是在您的实例上读取的,因此它对 Beanstalk 集群环境没有影响。目前无法阻止 Elastic Beanstalk 上传 Beanstalk 集群环境的部署日志。

Beanstalk 集群环境的部署日志文件

对于 Beanstalk 集群环境,Elastic Beanstalk 会将部署日志上传到您的环境的 Amazon S3 存储桶中,路径如下:

s3://elasticbeanstalk-region-account-id/resources/environments/logs/deployments/environment-id/deployment-environment-name-request-id.zip

Elastic Beanstalk 使用环境的操作角色自行执行上传,因此不涉及实例配置文件权限,也无需从您的节点访问 Amazon S3。

上传是尽力而为。如果不成功,操作仍会完成,不会生成任何环境事件,并且控制台会将部署日志报告为不可用。