View a markdown version of this page

监控 Beanstalk 集群环境 - Amazon Elastic Beanstalk
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

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

监控 Beanstalk 集群环境

Beanstalk Cluster 环境通过与 Beanstalk 标准环境相同的 Elastic Beanstalk 运行状况模型和 API 来报告环境级别的运行状况。您可以在 Elastic Beanstalk 控制台中查看其生命值颜色和状态,DescribeEnvironmentHealth也可以致电阅读当前颜色、状态和解释它的原因。在这两种模式下,Health 颜色和状态的含义相同。

当 Beanstalk 集群环境使用应用程序负载均衡器时,Elastic Beanstalk 会根据环境的负载均衡器指标来确定应用程序的运行状况:请求速率、返回 HTTP 4xx 和 5xx 响应的请求比例以及响应延迟。为请求提供服务的环境成功报告运行状况良好。随着失败请求比例的上升,状态会逐渐变得更加严重。如果环境收到的流量太少,Elastic Beanstalk 无法进行评估,则报告请求速率不足以确定运行状况,这对于空闲环境来说是预期的。如果您将负载均衡器类型设置为None,则此负载均衡器评估不适用。

与 Beanstalk 标准环境不同,Beanstalk Cluster 环境不报告每个实例的运行状况。Beanstalk Cluster 不使用实例运行状况代理,适用于标准环境的实例级运行状况报告设置也不适用。

容器探测器控制应用程序副本何时接收流量以及何时重启:就绪探测器会从服务中移除未就绪的副本,存活探测器会重新启动保持不健康的副本,启动探测器为启动缓慢的副本提供初始化时间。将探测器配置为下方的探测器命名空间。aws:elasticbeanstalk:eks:environment请参阅容器探测命名空间。

指标、日志和跟踪

应用程序的可观察性与环境运行状况是分开的。您可以使用aws:elasticbeanstalk:eks:observability命名空间中的配置选项为应用程序的指标、日志和跟踪选择后端。默认情况下,Elastic Beanstalk 会将您的应用程序的指标和日志发送到 CloudWatch CloudWatch亚马逊 (),并且跟踪没有后端。您可以改为向 Amazon S3 发送日志,将指标发送到适用于 Prometheus 的亚马逊托管服务,然后将跟踪发送到。 Amazon X-Ray您也可以将三者中的任何一个发送到接受 OpenTelemetry 数据的第三方后端;请参阅向第三方后端发送可观测性数据。有关可用选项,请参阅aws: elasticbeanstalk: eks: 可观察性。

Elastic Beanstalk 会代表您配置和操作收集组件,并发布基础设施指标。您负责对应用程序进行检测以使其发出所需的指标、日志和跟踪,并负责提供和维护对您选择的任何目标的访问权限。

您的应用程序必须向后端发送 OpenTelemetry 数据才能接收任何内容。要在不更改应用程序的情况下实现这一点,请将aws:elasticbeanstalk:eks:environment命名空间中的language选项设置为应用程序的运行时。Elastic OpenTelemetry Beanstalk 在您的容器中添加了该运行时的自动检测功能,该功能适用于所有后端和第三方。 Amazon Auto-instrumentation 可用于 Java、 Node.js、Python 和.NET 应用程序。对于 Java 应用程序,该代理还桥接 Log4j2、Logback 和java.util.logging,因此您的应用程序的日志无需更改任何应用程序即可到达日志后端。

与日志后端分开,Elastic Beanstalk 会为每个环境操作收集部署日志。它包含你的 pod 的容器日志和操作中的 Kubernetes 事件,这使得它成为操作失败时查看的地方。有关更多信息,请参阅 部署日志。

在中查找您的日志和指标 CloudWatch

使用默认后端,Elastic Beanstalk 会向四个日志组写入数据。 CloudWatch 日志组名称是固定的,您无法对其进行更改。

CloudWatch Beanstalk Cluster 环境的日志组
日志组 内容 日志流名称 当它存在时

/aws/elasticbeanstalk/application/logs

来自应用程序容器的输出。

eb-environment-name.pod-name

当logs-backend为cloudwatch,则为默认值。

/aws/elasticbeanstalk/application/metrics

您的应用程序发出的指标。

eb-environment-name

何时metrics-backend为cloudwatch默认值,您的应用程序会发出指标。

/aws/elasticbeanstalk/infrastructure/logs

Elastic Beanstalk 代表你在集群上运行的组件的输出。

kubernetes-namespace.pod-name

永远。

/aws/elasticbeanstalk/infrastructure/metrics

Elastic Beanstalk 以嵌入式指标格式为您发布的指标。

kubernetes-namespace

永远。

注意

这些日志组是共享的。一个 Amazon 账户和区域中的每个 Beanstalk 集群环境都写入每个集群中相同的四个组。您的环境数据是按日志流名称分隔的,而不是按日志组分隔的。Elastic Beanstalk 在 Kubern eb- etes 命名空间中运行每个环境,命名后跟环境名称。无论该表显示在哪里kubernetes-namespace,都是关于您的环境eb-environment-name的直播以及系统命名空间,例如 Elastic Beanstalk 在集群上运行的组件。kube-system因此,您的应用程序的日志流以eb-environment-name和开头,其应用程序指标和基础架构指标都位于一个名为的流中eb-environment-name。

Elastic Beanstalk 在没有保留策略的情况下创建这些日志组,因此其内容永不过期。在保存日志的两个日志组中,流名称包含 pod 名称,因此每次部署都会创建新的流,并且之前部署的流仍然保留。保存指标的两个日志组每个 Kubernetes 命名空间都有一个流,因此部署会添加到环境的现有流中;每条指标记录仍能标识其 pod。为每个日志组设置保留策略以限制存储的内容。

Elastic Beanstalk 为你发布的指标来自三个命名空间。 CloudWatch 这三个都是自定义命名空间,您需要按指标付费。Beanstalk 标准环境改为发布到AWS/ElasticBeanstalk命名空间,命名空间 CloudWatch 免费提供。Beanstalk Cluster 环境会为其每个副本发布以下容器指标,因此自定义指标的数量会随着您运行的副本数量的增加而增加。有关当前费率,请参阅 Amazon CloudWatch 定价。

CloudWatch Beanstalk 集群环境的指标
命名空间 Metrics Dimensions

ElasticBeanstalk/Infrastructure

对于应用程序的容器:container_cpu_usage_seconds_totalcontainer_memory_working_set_bytes、和EnvironmentReplicas,已准备就绪的副本数量。

这两个容器指标是使用namespace、发布的 podcontainer,再次是namespace单独发布的。 EnvironmentReplicasnamespace仅与一起发布。

ElasticBeanstalk/System

两个容器指标相同,分别是 Elastic Beanstalk 代表您而不是您的应用程序在集群上运行的组件。

namespace、pod、container,再一次namespace单独使用。

ElasticBeanstalk/Application

您的应用程序发出的指标,包括自动检测生成的运行时指标。

EnvironmentName。 请求持续时间还与http.methodhttp.route、和一起发布http.status_code。

namespace维度是 Kubernetes 命名空间,因此它的值eb-后面跟着你的环境名称。相反,ElasticBeanstalk/Application命名空间使用其值本身就是环境名称的EnvironmentName维度。使用与您正在查询的命名空间相匹配的值。

如果您设置为 logs-backends3,则 Elastic Beanstalk 会将应用程序的日志写入名为的存储桶,该elasticbeanstalk-logs-account-id-region-an存储桶位于从 Kubernetes 命名空间、容器名称和日期构建的密钥下,任何内容都不会生成。/aws/elasticbeanstalk/application/logsElastic Beanstalk 会对这些上传进行批处理,因此对象可能需要长达一分钟的时间才能显示。如果将logs-backend或metrics-backend设置为custom,则该数据将发送到您配置的后端,并且不会出现在这些日志组中的任何一个中。请参阅向第三方后端发送可观测性数据。

向第三方后端发送可观测性数据

Beanstalk Cluster 使用收集 OpenTelemetry 器收集应用程序的遥测数据,因此您可以将其发送到任何接受 OpenTelemetry 数据的后端,例如 Datadog 或 Splunk,而不是发送到目的地。 Amazon 您提供管道配置及其所需的凭证,然后 Elastic Beanstalk 在应用程序的 pod 中将您的管道作为边车容器运行。

配置第三方后端需要做四件事:

  1. 设置要重定向到的每个信号custom。信号是独立的,因此您可以在跟踪继续进入的同时将指标和日志发送到第三方后端 Amazon X-Ray。在aws:elasticbeanstalk:eks:observability命名空间traces-backend中使用metrics-backendlogs-backend、和。

  2. 设置custom-config为收集器的管道配置,格式为 JSON。将每个凭据作为${NAME}占位符引用,而不是将值放在配置中。

  3. 将凭证存储在中 Amazon Secrets Manager 并设置custom-credentials为密钥的 ARN。密钥值必须是一个 JSON 对象,其密钥与配置中的占位符名称相匹配。

  4. 在aws:elasticbeanstalk:eks:environment命名空间中设置application-role选项,并授予该角色读取密钥的权限。收集器在运行时使用应用程序角色,而不是可观察性角色,它通过 pod 的身份获得秘密,该身份application-role仅在设置后才存在。没有它,装载就会失败,复制副本永远无法启动。

以下示例向 Datadog 发送指标和日志,并保持对这些指标和日志的跟踪。 Amazon X-Ray首先,创建用于保存您的配置引用的凭据的密钥:

$ aws secretsmanager create-secret \ --name my-app/otel-credentials \ --secret-string '{"DD_API_KEY":"your-api-key"}'

授予应用程序角色读取它的权限,以便收集器可以在运行时获取它:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "arn:aws:secretsmanager:us-east-1:111122223333:secret:my-app/otel-credentials-AbCdEf" } ] }

Elastic Beanstalk 会按计划刷新已安装的证书,刷新会检查密钥的当前版本,因此除此之外还要授权。secretsmanager:DescribeSecret secretsmanager:GetSecretValue环境一开始是GetSecretValue单独的,但是以后的每次刷新都会失败。

接下来,将选项设置放入文件中。收集器配置包含逗号,其简写语法将其--option-settings视为分隔符,因此请改为将设置作为 JSON 传递。将以下内容另存为options.json,在custom-config值中将管道配置作为 JSON 字符串:

[ { "Namespace": "aws:elasticbeanstalk:eks:observability", "OptionName": "metrics-backend", "Value": "custom" }, { "Namespace": "aws:elasticbeanstalk:eks:observability", "OptionName": "logs-backend", "Value": "custom" }, { "Namespace": "aws:elasticbeanstalk:eks:observability", "OptionName": "traces-backend", "Value": "xray" }, { "Namespace": "aws:elasticbeanstalk:eks:observability", "OptionName": "custom-config", "Value": "{\"receivers\":{\"otlp\":{\"protocols\":{\"grpc\":{\"endpoint\":\"0.0.0.0:4317\"},\"http\":{\"endpoint\":\"0.0.0.0:4318\"}}}},\"processors\":{\"batch\":{}},\"exporters\":{\"datadog\":{\"api\":{\"site\":\"datadoghq.com\",\"key\":\"${DD_API_KEY}\"}}},\"service\":{\"pipelines\":{\"metrics\":{\"receivers\":[\"otlp\"],\"processors\":[\"batch\"],\"exporters\":[\"datadog\"]},\"logs\":{\"receivers\":[\"otlp\"],\"processors\":[\"batch\"],\"exporters\":[\"datadog\"]}}}}" }, { "Namespace": "aws:elasticbeanstalk:eks:observability", "OptionName": "custom-credentials", "Value": "arn:aws:secretsmanager:us-east-1:111122223333:secret:my-app/otel-credentials-AbCdEf" } ]

设置site为您的组织使用的 Datadog 站点。然后应用该文件:

$ aws elasticbeanstalk update-environment \ --environment-name my-cluster-env \ --option-settings file://options.json

为您设置的每个信号定义管道custom。你离开 Amazon 目的地的信号会一直使用 Elastic Beanstalk 运营的集合,不需要自己的管道。

没有设置的组件取一个空对象,如"batch": {}。该receivers区块是可选的。如果您省略它,Elastic Beanstalk 会添加您的应用程序发送到的 OTLP 接收器,并记录一个报告添加内容的环境事件。前面的示例明确定义了接收器。

在进行此设置时,请向每个管道添加一个debug导出器并将其包含在管道exporters列表中。然后,收集器记录其接收和导出的遥测数据,这会告诉您数据是否已到达收集器,以及收集器是否可以到达您的后端。