本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
监控 Beanstalk 集群环境
Beanstalk 集群环境通过与 Beanstalk 标准环境相同的 Elastic Beanstalk 运行状况模型和 API 来报告环境级别的运行状况。您可以在 Elastic Beanstalk 控制台中查看其生命值颜色和状态,然后可以调用DescribeEnvironmentHealth以读取当前的颜色、状态以及解释其原因。两种模式下的生命值颜色和状态具有相同的含义。
当 Beanstalk 集群环境使用应用程序负载均衡器时,Elastic Beanstalk 会根据该环境的负载均衡器指标来确定应用程序的运行状况:请求速率、返回 HTTP 4xx 和 5xx 响应的请求比例以及响应延迟。成功提供请求的环境报告运行状况良好。随着失败请求比例的上升,状态变得越来越严重。如果环境接收的流量太少,Elastic Beanstalk 无法评估有关请求速率不足以确定运行状况的报告,这在空闲环境中是预期的。如果您将负载均衡器类型设置为None,则此负载均衡器评估不适用。
与 Beanstalk 标准环境不同,Beanstalk 集群环境不报告每个实例的运行状况。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 Beanstalk 为您的容器添加了针对该运行时的 OpenTelemetry 自动检测功能,这适用于所有后端, 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 在命名eb-后跟环境名称的 Kubernetes 命名空间中运行每个环境,因此您的应用程序的日志流以和句点开头。eb-您的应用程序的指标流以环境名称和斜杠开头,没有environment-nameeb-前缀。
Elastic Beanstalk 在创建这些日志组时没有保留策略,因此它们的内容永不过期。日志流名称包含 pod 名称,因此每次部署都会创建新的流,而来自早期部署的流也会保留。为每个日志组设置保留策略以限制您存储的内容。
Elastic Beanstalk 为您发布的指标分为三个命名空间。 CloudWatch 这三个都是自定义命名空间,您需要为每个指标付费。Beanstalk 标准环境改为发布到AWS/ElasticBeanstalk命名空间,命名空间 CloudWatch 免费提供。Beanstalk Cluster 环境会在下面发布其每个副本的容器指标,因此自定义指标的数量会随着您运行的副本数量的增加而增加。有关当前费率,请参阅亚马逊 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、和。 -
以 JSON 格式设置
custom-config为收集器的管道配置。将每个凭据作为${占位符引用,而不是将值放入配置中。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列表中。然后,收集器记录其接收和导出的遥测数据,这会告诉您数据是否已到达收集器,以及收集器是否可以到达您的后端。