将 Elastic Bean CloudWatch stalk 与亚马逊日志一起使用 - Amazon Elastic Beanstalk
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

将 Elastic Bean CloudWatch stalk 与亚马逊日志一起使用

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

通过实施 CloudWatch 日志,您可以执行以下监控活动:

  • 监控和存档您环境中的 EC2 亚马逊实例中的您的 Elastic Beanstalk 应用程序、系统和自定义日志文件。

  • 配置警报,这些警报使您更容易根据指标筛选器提取的特定日志流事件做出响应。

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

除了实例日志外,如果您为环境启用增强型运行状况,则可以将环境配置为将运行状况信息流式传输到 CloudWatch 日志。请参阅 将 Elastic Beanstalk 环境运行状况信息流式传输到亚马逊日志 CloudWatch

将日志流式传输到日志的 CloudWatch 先决条件

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

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

  • 如果您的 E AWSElasticBeanstalkWorkerTierlastic Beanstalk 实例配置文件中没有AWSElasticBeanstalkWebTier或 El astic Beanstalk 托管策略,则必须在配置文件中添加以下内容才能启用此功能。

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

Elastic Beanstalk 是如何设置日志 CloudWatch 的

Elastic Beanstalk 在其创建的 CloudWatch 每个实例上安装一个使用默认配置设置的日志代理。要了解更多信息,请参阅CloudWatch 日志代理参考

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

平台/平台分支

日志

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\\ W3 LogFilesSVC1\ 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 将所有基于亚马逊 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 日志文件,您必须知道相应日志组的名称。日志组命名方案取决于平台的操作系统。

对于 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 日志

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

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

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

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

将实例日志流式传输到 CloudWatch 日志
  1. 打开 Elastic Beanstalk 控制台,然后在 “区域” 列表中,选择您的。 Amazon Web Services 区域

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

    注意

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

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

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

  5. 在 “将实例日志流式传输到 CloudWatch 日志” 下:

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

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

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

  6. 要保存更改,请选择页面底部的 Apply(应用)。

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

使用 EB CLI 进行实例日志流式传输

要使用 EB CLI 启用将实例 CloudWatch 日志流式传输到日志,请使用eb logs命令。

$ eb logs --cloudwatch-logs enable

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

$ eb logs --all

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

使用配置文件进行日志流式传输

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

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

自定义日志文件流式传输

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

注意

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

有关配置 CloudWatch 日志的更多信息,请参阅 Amazon CloudWatch 用户指南中的CloudWatch 代理配置文件参考

故障排除 CloudWatch 日志集成

找不到环境实例日志

如果您在日志中找不到预期的某些环境实例日 CloudWatch 志,请调查以下常见问题:

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

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

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

应用程序日志丢失或间歇性出现

如果您的 Elastic Beanstalk 应用程序日志 /var/log/web.stdout.log () 似乎缺失或出现间歇性,则这可能是由于 rsyslog 和 journald 中的默认速率限制设置造成的。虽然完全禁用速率限制可以解决此问题,但不建议这样做,因为这可能会导致磁盘使用过多、拒绝服务或在意外日志突发期间导致系统性能下降。相反,您可以使用以下方法调整速率限制.ebextensions configuration。此配置将速率限制间隔增加到 600 秒,同时具有更高的突发限制,从而在适当的日志记录和系统保护之间取得平衡。

节流问题

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

要解决限制问题,请执行以下操作之一:

  • 使用较小的批量进行滚动部署,以减少并发更新。

  • 申请提高您 Amazon 账户的每秒交易量 (TPS) 限制服务配额。CreateLogStream有关更多信息,请参阅 Amazon CloudWatch L ogs 用户指南中的 CloudWatch 日志配额和管理您的 CloudWatch 日志服务配额