本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
监控 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 日志组名称是固定的,您无法对其进行更改。
| 日志组 | 内容 | 日志流名称 | 当它存在时 |
|---|---|---|---|
|
来自应用程序容器的输出。 |
|
当 |
|
您的应用程序发出的指标。 |
|
何时 |
|
Elastic Beanstalk 代表你在集群上运行的组件的输出。 |
|
永远。 |
|
Elastic Beanstalk 以嵌入式指标格式为您发布的指标。 |
|
永远。 |
注意
这些日志组是共享的。一个 Amazon 账户和区域中的每个 Beanstalk 集群环境都写入每个集群中相同的四个组。您的环境数据是按日志流名称分隔的,而不是按日志组分隔的。Elastic Beanstalk 在 Kubern eb- etes 命名空间中运行每个环境,命名后跟环境名称。无论该表显示在哪里,都是关于您的环境kubernetes-namespaceeb-的直播以及系统命名空间,例如 Elastic Beanstalk 在集群上运行的组件。environment-namekube-system因此,您的应用程序的日志流以eb-和开头,其应用程序指标和基础架构指标都位于一个名为的流中environment-nameeb-。environment-name
Elastic Beanstalk 在没有保留策略的情况下创建这些日志组,因此其内容永不过期。在保存日志的两个日志组中,流名称包含 pod 名称,因此每次部署都会创建新的流,并且之前部署的流仍然保留。保存指标的两个日志组每个 Kubernetes 命名空间都有一个流,因此部署会添加到环境的现有流中;每条指标记录仍能标识其 pod。为每个日志组设置保留策略以限制存储的内容。
Elastic Beanstalk 为你发布的指标来自三个命名空间。 CloudWatch 这三个都是自定义命名空间,您需要按指标付费。Beanstalk 标准环境改为发布到AWS/ElasticBeanstalk命名空间,命名空间 CloudWatch 免费提供。Beanstalk Cluster 环境会为其每个副本发布以下容器指标,因此自定义指标的数量会随着您运行的副本数量的增加而增加。有关当前费率,请参阅 Amazon CloudWatch 定价
| 命名空间 | Metrics | Dimensions |
|---|---|---|
|
对于应用程序的容器: |
这两个容器指标是使用 |
|
两个容器指标相同,分别是 Elastic Beanstalk 代表您而不是您的应用程序在集群上运行的组件。 |
|
|
您的应用程序发出的指标,包括自动检测生成的运行时指标。 |
|
namespace维度是 Kubernetes 命名空间,因此它的值eb-后面跟着你的环境名称。相反,ElasticBeanstalk/Application命名空间使用其值本身就是环境名称的EnvironmentName维度。使用与您正在查询的命名空间相匹配的值。
如果您设置为 logs-backends3,则 Elastic Beanstalk 会将应用程序的日志写入名为的存储桶,该elasticbeanstalk-logs-存储桶位于从 Kubernetes 命名空间、容器名称和日期构建的密钥下,任何内容都不会生成。account-id-region-an/aws/elasticbeanstalk/application/logsElastic Beanstalk 会对这些上传进行批处理,因此对象可能需要长达一分钟的时间才能显示。如果将logs-backend或metrics-backend设置为custom,则该数据将发送到您配置的后端,并且不会出现在这些日志组中的任何一个中。请参阅向第三方后端发送可观测性数据。
向第三方后端发送可观测性数据
Beanstalk Cluster 使用收集 OpenTelemetry 器收集应用程序的遥测数据,因此您可以将其发送到任何接受 OpenTelemetry 数据的后端,例如 Datadog 或 Splunk,而不是发送到目的地。 Amazon 您提供管道配置及其所需的凭证,然后 Elastic Beanstalk 在应用程序的 pod 中将您的管道作为边车容器运行。
配置第三方后端需要做四件事:
-
设置要重定向到的每个信号
custom。信号是独立的,因此您可以在跟踪继续进入的同时将指标和日志发送到第三方后端 Amazon X-Ray。在aws:elasticbeanstalk:eks:observability命名空间traces-backend中使用metrics-backendlogs-backend、和。 -
设置
custom-config为收集器的管道配置,格式为 JSON。将每个凭据作为${占位符引用,而不是将值放在配置中。NAME} -
将凭证存储在中 Amazon Secrets Manager 并设置
custom-credentials为密钥的 ARN。密钥值必须是一个 JSON 对象,其密钥与配置中的占位符名称相匹配。 -
在
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列表中。然后,收集器记录其接收和导出的遥测数据,这会告诉您数据是否已到达收集器,以及收集器是否可以到达您的后端。