将 Elastic Beanstalk 和 Amazon CloudWatch Logs 配合使用
本主题介绍 Amazon CloudWatch Logs 服务可以为 Elastic Beanstalk 提供的监控功能。它还引导您完成配置设置并列出每个 Elastic Beanstalk 平台的日志位置。
实施 CloudWatch Logs 可让您执行以下监控活动:
-
从您环境的 Amazon EC2 实例监控和存档您的 Elastic Beanstalk 应用程序、系统和自定义日志文件。
-
配置警报,这些警报使您更容易根据指标筛选器提取的特定日志流事件做出响应。
在环境中每个 Amazon EC2 实例上安装的 CloudWatch Logs 代理会针对您配置的每个日志组,将指标数据点发布到 CloudWatch 服务。每个日志组都应用自己的筛选模式,以确定要作为数据点发送到 CloudWatch 的日志流事件。属于同一日志组的各日志流具有相同的保留、监控和访问控制设置。您可以配置 Elastic Beanstalk 自动将日志流式传输到 CloudWatch 服务,如将实例日志流式传输到 CloudWatch Logs 中所述。有关 CloudWatch Logs 的更多信息,包括术语和概念,请参阅 Amazon CloudWatch Logs 用户指南。
除了实例日志之外,如果您为环境启用增强型运行状况,则可以将环境配置为将运行状况信息流式传输至 CloudWatch Logs。请参阅将 Elastic Beanstalk 环境运行状况信息流式传输到 Amazon CloudWatch Logs。
主题
实例日志流式传输到 CloudWatch Logs 的先决条件
要启用日志从环境的 Amazon EC2 实例流式传输到 CloudWatch Logs,您必须满足以下条件。
-
平台 – 由于此功能仅在此版本
推出时或之后发布的平台版本中可用,因此,如果您使用的是早期平台版本,请将环境更新为当前环境。 -
如果您的 Elastic Beanstalk 实例配置文件中没有 AWSElasticBeanstalkWebTier 或 AWSElasticBeanstalkWorkerTier Elastic Beanstalk 托管策略,则您必须向配置文件中添加以下内容来启用此功能。
Elastic Beanstalk 如何设置 CloudWatch Logs
Elastic Beanstalk 会在其创建的每个实例上安装一个具有默认配置设置的 CloudWatch 日志代理。在 CloudWatch Logs 代理参考中了解更多信息。
当您启动实例日志流式传输到 CloudWatch Logs 时,Elastic Beanstalk 会将日志文件从您环境的实例发送至 CloudWatch Logs。不同的平台将流式传输不同的日志。下表按平台列出了日志。
|
平台/平台分支 |
日志 |
|---|---|
|
Docker / 平台分支:在 64 位 Amazon Linux 2 上运行的 Docker |
|
|
Docker / 平台分支:在 64 位 Amazon Linux 2 上运行的 ECS |
|
|
Go(转到) .NET Core on Linux Java /平台分支:在 64 位 Amazon Linux 2 上运行的 Corretto |
|
|
Node.js Python |
|
|
Tomcat PHP |
|
|
Windows Server 上的 .NET |
|
|
Ruby |
|
注意
2022 年 7 月 18 日,Elastic Beanstalk 将基于 Amazon Linux AMI(AL1)的所有平台分支的状态设置为已停用。有关迁移到当前且完全受支持的 Amazon Linux 2023 平台分支的更多信息,请参阅 将 Elastic Beanstalk Linux 应用程序迁移到 Amazon Linux 2023 或 Amazon Linux 2。
下表按平台列出从平台分支上基于 Amazon Linux AMI(Amazon Linux 2 以前的版本)的实例流式传输的日志文件。
|
平台/平台分支 |
日志 |
|---|---|
|
Docker / 平台分支:在 64 位 Amazon Linux 上运行的 Docker |
|
|
Docker / 平台分支:在 64 位 Amazon Linux 上运行的多容器 Docker |
|
|
Glassfish(预配置的 Docker) |
|
|
Go |
|
|
Java / 平台分支:在 64 位 Amazon Linux 上运行的 Java 8 平台分支:在 64 位 Amazon Linux 上运行的 Java 7 |
|
|
Tomcat |
|
|
Node.js |
|
|
PHP |
|
|
Python |
|
|
Ruby / 平台分支:基于在 64 位 Amazon Linux 上运行的 Ruby 的 Puma |
|
| Ruby / 平台分支:基于在 64 位 Amazon Linux 上运行的 Ruby 的 Passenger |
|
Elastic Beanstalk 针对其流式传输的各种日志文件在 CloudWatch Logs 中配置日志组。要从 CloudWatch Logs 中检索特定日志文件,您必须知道相应日志组的名称。日志组命名方案取决于平台的操作系统。
对于 Linux 平台,为实例上日志文件位置加上前缀 /aws/elasticbeanstalk/ 以获得日志组名称。例如,要检索文件 environment_name/var/log/nginx/error.log,请指定日志组 /aws/elasticbeanstalk/。environment_name/var/log/nginx/error.log
有关 Windows 平台,请参阅下表以了解每个日志文件对应的日志组。
|
实例上日志文件 |
日志组 |
|---|---|
|
|
|
|
|
|
|
|
|
将实例日志流式传输到 CloudWatch Logs
您可以使用 Elastic Beanstalk 控制台、EB CLI 或配置选项,启用实例日志流式传输到 CloudWatch Logs。
在启用它之前,请设置 IAM 权限以结合使用 CloudWatch Logs 代理。您可以将以下自定义策略挂载到分配给您的环境的实例配置文件。
使用 Elastic Beanstalk 控制台进行实例日志流式传输
将实例日志流式传输到 CloudWatch Logs
打开 Elastic Beanstalk 控制台
,然后在 Regions(区域)列表中选择您的 Amazon Web Services 区域。 -
在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。
在导航窗格中,选择 Configuration(配置)。
-
在 Updates, monitoring, and logging(更新、监控和日志记录)配置类别中,选择 Edit(编辑)。
-
在 Instance log streaming to CloudWatch Logs (实例日志流式传输到 CloudWatch Logs) 下:
-
启用 Log streaming (日志流式传输)。
-
将 Retention (保留) 设置为保存日志的天数。
-
选择 Lifecycle (生命周期) 设置,该设置确定日志是否在环境终止时进行保存。
-
-
要保存更改,请选择页面底部的 Apply(应用)。
在启用日志流式传输后,您可以返回到软件配置类别或页面并查找日志组链接。单击此链接可在 CloudWatch 控制台中查看您的日志。
使用 EB CLI 进行实例日志流式传输
要使用 EB CLI 启用实例日志流式传输到 CloudWatch Logs,请使用 eb logs 命令。
$ eb logs --cloudwatch-logs enable
您也可以使用 eb logs 来检索 CloudWatch Logs 中的日志。您可以检索环境的所有实例日志,也可以使用该命令的多个选项来指定要检索的日志的子集。例如,以下命令检索您的环境中一组完整的实例日志,并且将它们保存到 .elasticbeanstalk/logs 下的目录。
$ eb logs --all
具体而言,--log-group 选项可让您检索特定日志组的实例日志,对应于特定实例上日志文件。为此,您需要了解对应于要检索的日志文件的日志组的名称。您可以在 Elastic Beanstalk 如何设置 CloudWatch Logs 中找到此信息。
使用配置文件进行日志流式传输
在创建或更新环境时,您可以使用配置文件来设置和配置实例日志流式传输到 CloudWatch Logs。以下示例配置文件启用默认实例日志流式传输。Elastic Beanstalk 为您的环境平台流式传输一组默认日志文件。要使用此示例,请将该文本复制到应用程序源代码包的顶层 .config 目录中扩展名为 .ebextensions 的文件。
option_settings: - namespace: aws:elasticbeanstalk:cloudwatch:logs option_name: StreamLogs value: true
自定义日志文件流式传输
Elastic Beanstalk 与 CloudWatch Logs 集成不直接支持对您的应用程序生成的自定义日志文件进行流式传输。要流式传输自定义日志,请使用配置文件直接安装 CloudWatch 代理和配置要推送的文件。有关示例配置文件,请参阅 logs-streamtocloudwatch-linux.config
注意
该示例在 Windows 平台上不起作用。
有关配置 CloudWatch Logs 的更多信息,请参阅《Amazon CloudWatch 用户指南》中的 CloudWatch 代理配置文件参考。
CloudWatch Logs 集成故障排除
尝试使用 Amazon Q 开发者版 CLI 进行人工智能辅助故障排除
Amazon Q 开发者版 CLI 可以帮助您针对环境问题快速进行故障排除。Q CLI 可通过检查环境状态、审核事件、分析日志和询问澄清问题来提供解决方案。有关更多信息和详细演练,请参阅 Amazon 博客中的 Troubleshooting Elastic Beanstalk Environments with Amazon Q Developer CLI
找不到环境实例日志
如果在 CloudWatch Logs 中找不到一些预期应有的环境实例日志,则可以调查以下常见问题:
-
您的 IAM 角色缺少所需 IAM 权限。
-
您在不支持 CloudWatch Logs 的 Amazon Web Services 区域 中启动了您的环境。
-
您的其中一个自定义日志文件不存在于您指定的路径中。
应用程序日志缺失或出现间歇性记录问题
如果您的 Elastic Beanstalk 应用程序日志 (/var/log/web.stdout.log) 似乎缺失或出现间歇性记录,则这可能是由于 rsyslog 和 journald 中的默认速率限制设置造成的。虽然完全禁用速率限制可以解决此问题,但不建议这样做,因为这可能会导致磁盘过度消耗、潜在服务中断或日志量意外突增时的系统性能下降。但是,您可以使用以下 .ebextensions
configuration
节流问题
如果并发启动大量实例的 Elastic Beanstalk 操作返回类似 Error: fail to create log stream:
ThrottlingException: Rate exceeded 的消息,则该操作会因为对 CloudWatch API 的调用过多而受到节流。
要解决节流问题,执行以下操作之一:
-
使用滚动部署并减小批次规模,以降低并发更新密度。
-
申请提高您 Amazon 账户 CreateLogStream 的每秒交易量(TPS)限制服务配额。有关更多信息,请参阅《Amazon CloudWatch Logs User Guide》中的 CloudWatch Logs quotas 和 Managing your CloudWatch Logs。