

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

# 查看您的 Elastic Beanstalk 环境中的 Amazon EC2 实例的日志
<a name="using-features.logging"></a>

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

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

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

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

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

**检索实例日志**

1. 打开 [Elastic Beanstalk](https://console.amazonaws.cn/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 Amazon Web Services 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择**日志**。

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

1. 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 的日志轮换，请按照[配置实例日志查看](environments-cfg-logging.md#environments-cfg-logging-console)中的过程操作。环境中的实例会尝试每小时上传一次已轮换的日志。

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

要实现实时日志流和长期存储，请将您的环境配置为将[日志流式传输到 Amazon CloudWatch Logs](#health-logs-cloudwatchlogs)。

要获取 AI 支持的环境日志、事件和实例运行状况分析，以确定运行状况问题的根本原因和解决方案，请参阅[人工智能驱动的环境分析](health-ai-analysis.md)。

**Topics**
+ [Amazon EC2 实例上的日志位置](#health-logs-instancelocation)
+ [Amazon S3 中的日志位置](#health-logs-s3location)
+ [Linux 上的日志轮换设置](#health-logs-logrotate)
+ [扩展默认日志任务配置](#health-logs-extend)
+ [将日志文件流式传输到 Amazon CloudWatch 日志](#health-logs-cloudwatchlogs)

## Amazon EC2 实例上的日志位置
<a name="health-logs-instancelocation"></a>

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

**Amazon Linux 2**
+ `/var/log/eb-engine.log`

**亚马逊 Linux AMI (AL1)**

**注意**  
 [2022 年 7 月 18 日，](https://docs.amazonaws.cn/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)**Elastic Beanstalk 将所有基于亚马逊 Linux AMI AL1 () 的平台分支的状态设置为停用。**有关迁移到当前且完全受支持的 Amazon Linux 2023 平台分支的更多信息，请参阅 [将 Elastic Beanstalk Linux 应用程序迁移到 Amazon Linux 2023 或 Amazon Linux 2](using-features.migration-al.md)。
+ `/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`](ebextensions.md)）有关的消息。

各应用程序和 Web 服务器都在其自己的文件夹中存储日志：
+ **Apache** – `/var/log/httpd/`
+ **IIS** – `C:\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 中的日志位置
<a name="health-logs-s3location"></a>

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

例如，来自账户区域的 Elastic `e-mpcwnwheky` Beanstalk Amazon 环境`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 中删除。轮换日志会一直保留，直到您将它们删除或移至 Amazon Glacier。

## Linux 上的日志轮换设置
<a name="health-logs-logrotate"></a>

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

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

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

## 扩展默认日志任务配置
<a name="health-logs-extend"></a>

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\bundlelogs.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](ebextensions.md)`) 将自己的 `.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-cli3.md) 部署示例应用程序。为此，EB CLI 创建一个本地应用程序目录，其中包含 `.ebextentions` 子目录以及示例配置。还可以使用示例应用程序的日志文件来探索本主题中描述的日志检索功能。

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

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

### 在 Linux 上扩展日志轮换
<a name="health-logs-extend-rotation-linux"></a>

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

### 在 Windows Server 上扩展日志轮换
<a name="health-logs-extend-rotation-windows"></a>

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

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

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

## 将日志文件流式传输到 Amazon CloudWatch 日志
<a name="health-logs-cloudwatchlogs"></a>

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

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

您可以使用 Elastic Beanstalk 控制台，在[创建环境期间](environments-create-wizard.md#environments-create-wizard-software)或者[为现有环境配置日志流](environments-cfg-logging.md#environments-cfg-logging-console)。您可以从控制台设置以下选项：启用/禁用日志流式传输到 CloudWatch 日志、设置保留天数，以及从 “生命周期” 选项中进行选择。在以下示例中，日志最多保存七天，甚至在环境已终止时也是如此。

![Elastic Beanstalk 控制台中 CloudWatch 日志设置的屏幕图像。](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/images/log-streaming-screen.png)


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

**Example .ebextensions/log-streaming.config**  

```
option_settings:
  aws:elasticbeanstalk:cloudwatch:logs:
    StreamLogs: true
    DeleteOnTerminate: false
    RetentionInDays: 180
```