将 Elastic Beanstalk 和 Amazon CloudWatch Logs 配合使用 - AWS Elastic Beanstalk

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

将 Elastic Beanstalk 和 Amazon CloudWatch Logs 配合使用

利用 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 集成的环境的 Monitoring (监控) 页面和图表。此环境中的示例指标名为 CWLHttp4xxCWLHttp5xx。其中一个图表显示了 CWLHttp4xx 指标根据配置文件指定的条件触发了警报。

下图显示了名为 AWSEBCWLHttp4xxPercentAlarmAWSEBCWLHttp5xxCountAlarm 的示例警报(分别对应于 CWLHttp4xxCWLHttp5xx 指标)的 Alarms(警报)页面和图表。

实例日志流式传输到 CloudWatch Logs 的先决条件

要启用日志从环境的 Amazon EC2 实例流式传输到 CloudWatch Logs,您必须满足以下条件。

  • 平台 – 由于此功能仅在此版本推出时或之后发布的平台版本中可用,因此,如果您使用的是早期平台版本,请将环境更新为当前环境。

  • 如果您的 Elastic Beanstalk 实例配置文件中没有 AWSElasticBeanstalkWebTierAWSElasticBeanstalkWorkerTier Elastic Beanstalk 托管策略,则您必须向配置文件中添加以下内容来启用此功能。

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

Elastic Beanstalk 如何设置 CloudWatch Logs

Elastic Beanstalk 会在其创建的每个实例上安装一个具有默认配置设置的 CloudWatch 日志代理。在 CloudWatch Logs 代理参考中了解更多信息。

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

平台/平台分支

日志

Docker /

平台分支:在 64 位 Amazon Linux 2 上运行的 Docker

  • /var/log/eb-engine.log

  • /var/log/eb-hooks.log

  • /var/log/docker

  • /var/log/docker-events.log

  • /var/log/eb-docker/containers/eb-current-app/stdouterr.log

  • /var/log/nginx/access.log

  • /var/log/nginx/error.log

Docker /

平台分支:在 64 位 Amazon Linux 2 上运行的 ECS

  • /var/log/docker-events.log

  • /var/log/eb-ecs-mgr.log

  • /var/log/eb-engine.log

  • /var/log/eb-hooks.log

  • /var/log/ecs/ecs-agent.log

  • /var/log/ecs/ecs-init.log

Go

.NET Core on Linux

Java /平台分支:在 64 位 Amazon Linux 2 上运行的 Corretto

  • /var/log/eb-engine.log

  • /var/log/eb-hooks.log

  • /var/log/web.stdout.log

  • /var/log/nginx/access.log

  • /var/log/nginx/error.log

Node.js

Python

  • /var/log/eb-engine.log

  • /var/log/eb-hooks.log

  • /var/log/web.stdout.log

  • /var/log/httpd/access_log

  • /var/log/httpd/error_log

  • /var/log/nginx/access.log

  • /var/log/nginx/error.log

Tomcat

PHP

  • /var/log/eb-engine.log

  • /var/log/eb-hooks.log

  • /var/log/httpd/access_log

  • /var/log/httpd/error_log

  • /var/log/nginx/access.log

  • /var/log/nginx/error.log

Windows Server 上的 .NET

  • C:\inetpub\logs\LogFiles\W3SVC1\u_ex*.log

  • C:\Program Files\Amazon\ElasticBeanstalk\logs\AWSDeployment.log

  • C:\Program Files\Amazon\ElasticBeanstalk\logs\Hooks.log

Ruby

  • /var/log/eb-engine.log

  • /var/log/eb-hooks.log

  • /var/log/puma/puma.log

  • /var/log/web.stdout.log

  • /var/log/nginx/access.log

  • /var/log/nginx/error.log

注意

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

  • /var/log/eb-activity.log

  • /var/log/nginx/error.log

  • /var/log/docker-events.log

  • /var/log/docker

  • /var/log/nginx/access.log

  • /var/log/eb-docker/containers/eb-current-app/stdouterr.log

Docker /

平台分支:在 64 位 Amazon Linux 上运行的多容器 Docker

  • /var/log/eb-activity.log

  • /var/log/ecs/ecs-init.log

  • /var/log/eb-ecs-mgr.log

  • /var/log/ecs/ecs-agent.log

  • /var/log/docker-events.log

Glassfish(预配置的 Docker)

  • /var/log/eb-activity.log

  • /var/log/nginx/error.log

  • /var/log/docker-events.log

  • /var/log/docker

  • /var/log/nginx/access.log

Go

  • /var/log/eb-activity.log

  • /var/log/nginx/error.log

  • /var/log/nginx/access.log

Java /

平台分支:在 64 位 Amazon Linux 上运行的 Java 8

平台分支:在 64 位 Amazon Linux 上运行的 Java 7

  • /var/log/eb-activity.log

  • /var/log/nginx/access.log

  • /var/log/nginx/error.log

  • /var/log/web-1.error.log

  • /var/log/web-1.log

Tomcat

  • /var/log/eb-activity.log

  • /var/log/httpd/error_log

  • /var/log/httpd/access_log

  • /var/log/nginx/error_log

  • /var/log/nginx/access_log

Node.js

  • /var/log/eb-activity.log

  • /var/log/nodejs/nodejs.log

  • /var/log/nginx/error.log

  • /var/log/nginx/access.log

  • /var/log/httpd/error.log

  • /var/log/httpd/access.log

PHP

  • /var/log/eb-activity.log

  • /var/log/httpd/error_log

  • /var/log/httpd/access_log

Python

  • /var/log/eb-activity.log

  • /var/log/httpd/error_log

  • /var/log/httpd/access_log

  • /opt/python/log/supervisord.log

Ruby /

平台分支:基于在 64 位 Amazon Linux 上运行的 Ruby 的 Puma

  • /var/log/eb-activity.log

  • /var/log/nginx/error.log

  • /var/log/puma/puma.log

  • /var/log/nginx/access.log

Ruby /

平台分支:基于在 64 位 Amazon Linux 上运行的 Ruby 的 Passenger

  • /var/log/eb-activity.log

  • /var/app/support/logs/passenger.log

  • /var/app/support/logs/access.log

  • /var/app/support/logs/error.log

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 平台,请参阅下表以了解每个日志文件对应的日志组。

实例上日志文件

日志组

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 Logs

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

在启用它之前,请设置 IAM 权限以结合使用 CloudWatch Logs 代理。您可以将以下自定义策略挂载到分配给您的环境的实例配置文件

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

使用 Elastic Beanstalk 控制台进行实例日志流式传输

将实例日志流式传输到 CloudWatch Logs
  1. 打开 Elastic Beanstalk 控制台,然后在 Regions(区域)列表中选择您的 AWS 区域。

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

    注意

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

  3. 在导航窗格中,选择 Configuration(配置)。

  4. Updates, monitoring, and logging(更新、监控和日志记录)配置类别中,选择 Edit(编辑)。

  5. Instance log streaming to CloudWatch Logs (实例日志流式传输到 CloudWatch Logs) 下:

    • 启用 Log streaming (日志流式传输)

    • Retention (保留) 设置为保存日志的天数。

    • 选择 Lifecycle (生命周期) 设置,该设置确定日志是否在环境终止时进行保存。

  6. 要保存更改,请选择页面底部的 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 为您的环境平台流式传输一组默认日志文件。要使用此示例,请将该文本复制到应用程序源代码包的顶层 .ebextensions 目录中扩展名为 .config 的文件。

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

自定义日志文件流式传输

Elastic Beanstalk 与 CloudWatch Logs 集成不直接支持对您的应用程序生成的自定义日志文件进行流式传输。要流式传输自定义日志,请使用配置文件直接安装 CloudWatch Logs 代理和配置要推送的文件。有关示例配置文件,请参阅 logs-streamtocloudwatch-linux.config

注意

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

有关配置 CloudWatch Logs 的更多信息,请参阅《Amazon CloudWatch Logs 用户指南》中的 CloudWatch Logs 代理参考

CloudWatch Logs 集成故障排除

如果您无法在 CloudWatch Logs 中找到所期望的环境的一些实例日志,则可以调查以下常见问题:

  • 您的 IAM 角色缺少所需 IAM 权限。

  • 您在不支持 CloudWatch Logs 的 AWS 区域 中启动了您的环境。

  • 您的其中一个自定义日志文件不存在于您指定的路径中。