

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

# 将 Elastic Bean CloudWatch stalk 与亚马逊日志一起使用
<a name="AWSHowTo.cloudwatchlogs"></a>

本主题介绍亚马逊 CloudWatch 日志服务可以为 Elastic Beanstalk 提供的监控功能。它还引导您完成配置设置并列出每个 Elastic Beanstalk 平台的日志位置。

通过实施 CloudWatch 日志，您可以执行以下监控活动：
+ 从您环境的 Amazon EC2 实例监控和存档您的 Elastic Beanstalk 应用程序、系统和自定义日志文件。
+ 配置警报，这些警报使您更容易根据指标筛选器提取的特定日志流事件做出响应。

安装在您环境中每个 Amazon EC2 实例上的 CloudWatch 日志代理会将您配置的每个日志组的指标数据点发布到该 CloudWatch 服务。每个日志组都应用自己的过滤器模式来确定要 CloudWatch 作为数据点发送到哪些日志流事件。属于同一日志组的各日志流具有相同的保留、监控和访问控制设置。您可以将 Elastic Beanstalk 配置为自动将日志流式传输到服务 CloudWatch ，如中所述。[将实例日志流式传输到 CloudWatch 日志](#AWSHowTo.cloudwatchlogs.streaming)有关 CloudWatch 日志的更多信息，包括术语和概念，请参阅 [Amazon CloudWatch Logs 用户指南](https://docs.amazonaws.cn/AmazonCloudWatch/latest/DeveloperGuide/WhatIsCloudWatchLogs.html)。

除了实例日志外，如果您为环境启用[增强型运行状况](health-enhanced.md)，则可以将环境配置为将运行状况信息流式传输到 CloudWatch 日志。请参阅[将 Elastic Beanstalk 环境运行状况信息流式传输到亚马逊日志 CloudWatch](AWSHowTo.cloudwatchlogs.envhealth.md)。

**Topics**
+ [将日志流式传输到日志的 CloudWatch 先决条件](#AWSHowTo.cloudwatchlogs.prereqs)
+ [Elastic Beanstalk 是如何设置日志 CloudWatch 的](#AWSHowTo.cloudwatchlogs.loggroups)
+ [将实例日志流式传输到 CloudWatch 日志](#AWSHowTo.cloudwatchlogs.streaming)
+ [故障排除 CloudWatch 日志集成](#AWSHowTo.cloudwatchlogs.troubleshoot)
+ [将 Elastic Beanstalk 环境运行状况信息流式传输到亚马逊日志 CloudWatch](AWSHowTo.cloudwatchlogs.envhealth.md)

## 将日志流式传输到日志的 CloudWatch 先决条件
<a name="AWSHowTo.cloudwatchlogs.prereqs"></a>

要启用将日志从您环境的 Amazon EC2 实例流式传输到 CloudWatch 日志，您必须满足以下条件。
+ *平台* – 由于此功能仅在[此版本](https://www.amazonaws.cn/releasenotes/6677534638371416)推出时或之后发布的平台版本中可用，因此，如果您使用的是早期平台版本，请将环境更新为当前环境。
+ 如果您的 E *AWSElasticBeanstalkWorkerTier*lastic Beanstalk 实例配置文件中没有*AWSElasticBeanstalkWebTier*或 El [astic Beanstalk 托管策略，则必须在配置文件中添加](concepts-roles-instance.md)以下内容才能启用此功能。

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:PutLogEvents",
        "logs:CreateLogStream"
      ],
      "Resource": [
      "*"
      ]
    }
    ]
  }
  ```

------

## Elastic Beanstalk 是如何设置日志 CloudWatch 的
<a name="AWSHowTo.cloudwatchlogs.loggroups"></a>

Elastic Beanstalk 在其创建的 CloudWatch 每个实例上安装一个使用默认配置设置的日志代理。要了解更多信息，请参阅[CloudWatch 日志代理参考](https://docs.amazonaws.cn/AmazonCloudWatch/latest/logs/AgentReference.html)。

当您启用将实例日志流式传输到 CloudWatch 日志时，Elastic Beanstalk 会将您的环境实例中的日志文件发送到日志。 CloudWatch 不同的平台将流式传输不同的日志。下表按平台列出了日志。


****  

|  平台/平台分支  |  日志  | 
| --- | --- | 
|  Docker / 平台分支：在 64 位 Amazon Linux 2 上运行的 Docker  |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html)  | 
|  Docker / 平台分支：在 64 位 Amazon Linux 2 上运行的 ECS  |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html)  | 
|  Go .NET Core on Linux Java /平台分支：在 64 位 Amazon Linux 2 上运行的 Corretto  |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html)  | 
|  Node.js Python  |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html)  | 
|  Tomcat PHP  |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html)  | 
|  Windows Server 上的 .NET  |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html)  | 
|  Ruby  |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html)  | 

### Amazon Linux AMI 平台上的日志文件
<a name="AWSHowTo.cloudwatchlogs.loggroups.alami"></a>

**注意**  
 [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)。

下表按平台列出从平台分支上基于 Amazon Linux AMI（Amazon Linux 2 以前的版本）的实例流式传输的日志文件。


****  

|  平台/平台分支  |  日志  | 
| --- | --- | 
|  Docker /  平台分支：在 64 位 Amazon Linux 上运行的 Docker  |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html)  | 
|  Docker /  平台分支：在 64 位 Amazon Linux 上运行的多容器 Docker  |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html)  | 
|  Glassfish（预配置的 Docker）  |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html)  | 
|  Go  |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html)  | 
|  Java / 平台分支：在 64 位 Amazon Linux 上运行的 Java 8 平台分支：在 64 位 Amazon Linux 上运行的 Java 7  |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html)  | 
|  Tomcat  |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html)  | 
|  Node.js  |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html)  | 
|  PHP  |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html)  | 
|  Python  |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html)  | 
|  Ruby / 平台分支：基于在 64 位 Amazon Linux 上运行的 Ruby 的 Puma  |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html)  | 
| Ruby / 平台分支：基于在 64 位 Amazon Linux 上运行的 Ruby 的 Passenger  |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html)  | 

Elastic Beanstalk 在日志中为其流式 CloudWatch 传输的各种日志文件配置日志组。要从 Logs 中检索特定的 CloudWatch 日志文件，您必须知道相应日志组的名称。日志组命名方案取决于平台的操作系统。

对于 Linux 平台，为实例上日志文件位置加上前缀 `/aws/elasticbeanstalk/environment_name` 以获得日志组名称。例如，要检索文件 `/var/log/nginx/error.log`，请指定日志组 `/aws/elasticbeanstalk/environment_name/var/log/nginx/error.log`。

有关 Windows 平台，请参阅下表以了解每个日志文件对应的日志组。


|  实例上日志文件  |  日志组  | 
| --- | --- | 
|  `C:\Program Files\Amazon\ElasticBeanstalk\logs\AWSDeployment.log`  |  `/aws/elasticbeanstalk/<environment-name>/EBDeploy-Log`  | 
|  `C:\Program Files\Amazon\ElasticBeanstalk\logs\Hooks.log`  |  `/aws/elasticbeanstalk/<environment-name>/EBHooks-Log`  | 
|  `C:\inetpub\logs\LogFiles` (整个目录)  |  `/aws/elasticbeanstalk/<environment-name>/IIS-Log`  | 

## 将实例日志流式传输到 CloudWatch 日志
<a name="AWSHowTo.cloudwatchlogs.streaming"></a>

您可以使用 Elastic Beanstalk 控制台、EB CLI 或配置选项启用将实例 CloudWatch 日志流式传输到日志。

在启用它之前，请设置与 L CloudWatch ogs 代理一起使用的 IAM 权限。您可以将以下自定义策略挂载到分配给您的环境的[实例配置文件](concepts-roles-instance.md)。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogGroups",
        "logs:DescribeLogStreams"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
```

------

### 使用 Elastic Beanstalk 控制台进行实例日志流式传输
<a name="AWSHowTo.cloudwatchlogs.streaming.console"></a>

**将实例日志流式传输到 CloudWatch 日志**

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

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

1. 在导航窗格中，选择 **Configuration**（配置）。

1. 在 **Updates, monitoring, and logging**（更新、监控和日志记录）配置类别中，选择 **Edit**（编辑）。

1. 在 “将**实例日志流式传输到 CloudWatch 日志”** 下：
   + 启用 **Log streaming (日志流式传输)**。
   + 将 **Retention (保留)** 设置为保存日志的天数。
   + 选择 **Lifecycle (生命周期)** 设置，该设置确定日志是否在环境终止时进行保存。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

在启用日志流式传输后，您可以返回到**软件**配置类别或页面并查找**日志组**链接。单击此链接可在 CloudWatch 控制台中查看您的日志。

### 使用 EB CLI 进行实例日志流式传输
<a name="AWSHowTo.cloudwatchlogs.streaming.ebcli"></a>

要使用 EB CLI 启用将实例 CloudWatch 日志流式传输到日志，请使用[**eb logs**](eb3-logs.md)命令。

```
$ eb logs --cloudwatch-logs enable
```

您也可以使用**eb logs**从日志中检索 CloudWatch 日志。您可以检索环境的所有实例日志，也可以使用该命令的多个选项来指定要检索的日志的子集。例如，以下命令检索您的环境中一组完整的实例日志，并且将它们保存到 `.elasticbeanstalk/logs` 下的目录。

```
$ eb logs --all
```

具体而言，`--log-group` 选项可让您检索特定日志组的实例日志，对应于特定实例上日志文件。为此，您需要了解对应于要检索的日志文件的日志组的名称。您可以在 [Elastic Beanstalk 是如何设置日志 CloudWatch 的](#AWSHowTo.cloudwatchlogs.loggroups) 中找到此信息。

### 使用配置文件进行日志流式传输
<a name="AWSHowTo.cloudwatchlogs.files"></a>

创建或更新环境时，您可以使用配置文件来设置和配置向日志传输的实例 CloudWatch 日志。以下示例配置文件启用默认实例日志流式传输。Elastic Beanstalk 为您的环境平台流式传输一组默认日志文件。要使用此示例，请将该文本复制到应用程序源代码包的顶层 `.ebextensions` 目录中扩展名为 `.config` 的文件。

```
option_settings:
  - namespace: aws:elasticbeanstalk:cloudwatch:logs
    option_name: StreamLogs
    value: true
```

### 自定义日志文件流式传输
<a name="AWSHowTo.cloudwatchlogs.streaming.custom"></a>

Elastic Beanstalk 与日志的 CloudWatch 集成不直接支持您的应用程序生成的自定义日志文件的流式传输。要流式传输自定义日志，请使用配置文件直接安装 CloudWatch 代理并配置要推送的文件。有关示例配置文件，请参阅 [https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/instance-configuration/logs-streamtocloudwatch-linux.config](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/instance-configuration/logs-streamtocloudwatch-linux.config)。

**注意**  
该示例在 Windows 平台上不起作用。

有关配置 CloudWatch 日志的更多信息，请参阅 *Amazon CloudWatch 用户指南*中的[CloudWatch 代理配置文件参考](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html)。

## 故障排除 CloudWatch 日志集成
<a name="AWSHowTo.cloudwatchlogs.troubleshoot"></a>

**尝试使用 Amazon Q 开发者版 CLI 进行人工智能辅助故障排除**  
 Amazon Q 开发者版 CLI 可以帮助您针对环境问题快速进行故障排除。Q CLI 可通过检查环境状态、审核事件、分析日志和询问澄清问题来提供解决方案。有关更多信息和详细演练，请参阅博客中的使用 [Amazon Q Developer CLI 对 Elastic Beanstalk 环境进行故障排除](https://www.amazonaws.cn/blogs/devops/troubleshooting-elastic-beanstalk-environments-with-amazon-q-developer-cli/)。 Amazon 

**找不到环境实例日志**  
如果您在日志中找不到预期的某些环境实例日 CloudWatch 志，请调查以下常见问题：
+ 您的 IAM 角色缺少所需 IAM 权限。
+ 您在不支持 Logs Amazon Web Services 区域 的环境中启动了您的 CloudWatch 环境。
+ 您的其中一个自定义日志文件不存在于您指定的路径中。

**应用程序日志缺失或出现间歇性记录问题**  
如果您的 Elastic Beanstalk 应用程序日志 (`/var/log/web.stdout.log`) 似乎缺失或出现间歇性记录，则这可能是由于 rsyslog 和 journald 中的默认速率限制设置造成的。虽然完全禁用速率限制可以解决此问题，但不建议这样做，因为这可能会导致磁盘过度消耗、潜在服务中断或日志量意外突增时的系统性能下降。但是，您可以使用以下 [https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/instance-configuration/logs-ratelimitcloudwatchlogs-linux.config](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/instance-configuration/logs-ratelimitcloudwatchlogs-linux.config) 配置调整速率限制。该配置将速率限制间隔延长至 600 秒并放宽突增限制，在确保日志完整性与系统保护之间取得平衡：

**节流问题**  
如果同时启动大量实例的 Elastic Beanstalk 操作返回类似的`Error: fail to create log stream: ThrottlingException: Rate exceeded`消息，则会因为对 API 的调用过多而受到限制。 CloudWatch 

要解决节流问题，执行以下操作之一：
+ 使用滚动部署并减小批次规模，以降低并发更新密度。
+ 申请提高您 Amazon 账户的每秒交易量 (TPS) 限制服务配额。*CreateLogStream*有关更多信息，请参阅 *Amazon [ CloudWatch L](https://docs.amazonaws.cn/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html) ogs 用户指南中的 CloudWatch 日志配额和管理您的 CloudWatch 日志*[服务配额](https://docs.amazonaws.cn/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html#service-quotas-manage)。