将应用程序指标导出到 Amazon CloudWatch - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

将应用程序指标导出到 Amazon CloudWatch

Fargate 上的 Amazon ECS 支持将您的自定义应用程序指标 CloudWatch 作为自定义指标导出到亚马逊。这是通过将 Amazon Distro for s OpenTelemetry idecar 容器添加到任务定义中来完成的。Amazon ECS 控制台在创建新任务定义时添加了 “使用指标收集” 选项,从而简化了此过程。有关更多信息,请参阅 使用控制台创建任务定义

应用程序指标将使用 CloudWatch 日志组名称导出到日志,/aws/ecs/application/metrics并且可以在ECS/AWSOTel/Application命名空间中查看这些指标。您的应用程序必须使用 OpenTelemetry SDK 进行检测。有关更多信息,请参阅发行版 OpenTelemetry中的Amazon 发行版简介以获取 Amazon 文档。 OpenTelemetry

注意事项

在使用 Fargate 上的 Amazon ECS 与 Amazon Distro 集成,向亚马逊发送应用程序指标时 OpenTelemetry ,应考虑以下几点。 CloudWatch

  • 此集成仅将您的自定义应用程序指标发送到 CloudWatch。如果您需要任务级指标,可以在 Amazon ECS 集群配置中启用 Container Insights。有关更多信息,请参阅 使用容器见解监控 Amazon ECS 容器

  • Fargat Amazon e 上托管的 Amazon ECS 工作负载和托管在 Amazon EC2 实例上的亚马逊 ECS 工作负载支持 OpenTelemetry 集成发行版。目前不支持外部实例。

  • CloudWatch 每个指标最多支持 30 个维度。预设情况下,Amazon ECS 默认将 TaskARNClusterARNLaunchTypeTaskDefinitionFamilyTaskDefinitionRevision 维度包含到指标中。其余 25 个维度可以由您的应用程序定义。如果配置的维度超过 30 个,则 CloudWatch 无法显示它们。发生这种情况时,应用程序指标将出现在ECS/AWSOTel/Application CloudWatch 指标命名空间中,但没有任何维度。您可以对应用程序进行分析以添加其他维度。有关更多信息,请参阅发行版中的在 Amazon Distro OpenTelemetry 中使用 CloudWatch 指标以获取 Amazon 文档。 OpenTelemetry

Amazon Distro 需要的 IAM 权限才能与 OpenTelemetry 亚马逊集成 CloudWatch

Amazon ECS 与 Amazon Distro 的集成 OpenTelemetry 要求您创建一个任务 IAM 角色并在任务定义中指定该角色。我们建议同时将 Amazon Distro fo OpenTelemetry r sidecar 配置为将容器 CloudWatch 日志路由到日志,这也需要在任务定义中创建和指定任务执行 IAM 角色。Amazon ECS 控制台代表您处理任务执行 IAM 角色,但必须手动创建任务 IAM 角色并将其添加到您的任务定义中。有关任务执行 IAM 角色的更多信息,请参阅 Amazon ECS 任务执行 IAM 角色

重要

如果您还使用 Amazon 发行版收集应用程序跟踪数据进行 OpenTelemetry 集成,请确保您的任务 IAM 角色还包含该集成所需的权限。有关更多信息,请参阅 使用应用程序跟踪数据识别 Amazon ECS 的优化机会

如果您的应用程序需要任何其他权限,则应将其添加到此策略中。每个任务定义只能指定一个任务 IAM 角色。例如,如果您使用存储在 Systems Manager 中的自定义配置文件,则应添加 ssm:GetParameters 权限到此 IAM policy 中。

为弹性容器服务创建服务角色(IAM 控制台)
  1. 登录 Amazon Web Services Management Console 并打开 IAM 控制台,网址为 https://console.aws.amazon.com/iam/

  2. 在 IAM 控制台的导航窗格中,选择角色,然后选择创建角色

  3. 对于 Trusted entity type(可信实体类型),选择 Amazon Web Service

  4. 对于服务或用例,选择弹性容器服务,然后选择弹性容器服务任务用例。

  5. 选择下一步

  6. 添加权限部分中,搜索策略 AWSDistroOpenTelemetryPolicyForXray,然后选择策略。

  7. (可选)设置权限边界。这是一项高级特征,可用于服务角色,但不可用于服务相关角色。

    1. 打开设置权限边界部分,然后选择使用权限边界控制最大角色权限

      IAM 包含您账户中的 Amazon 托管策略和客户托管策略列表。

    2. 选择要用于权限边界的策略。

  8. 选择下一步

  9. 输入有助于识别角色的作用的角色名称或者角色名称后缀。

    重要

    命名角色时,请注意以下事项:

    • 角色名称在您内部必须是唯一的 Amazon Web Services 账户,并且不能因大小写而变得唯一。

      例如,不要同时创建名为 PRODROLEprodrole 的角色。当角色名称在策略中使用或者作为 ARN 的一部分时,角色名称区分大小写,但是当角色名称在控制台中向客户显示时(例如,在登录期间),角色名称不区分大小写。

    • 创建角色后,您无法编辑该角色的名称,因为其他实体可能会引用该角色。

  10. (可选)对于描述,输入角色的描述。

  11. (可选)要编辑角色的使用案例和权限,请在步骤 1:选择可信实体步骤 2:添加权限部分中选择编辑

  12. (可选)为了帮助识别、组织或搜索角色,请以键值对形式添加标签。有关在 IAM 中使用标签的更多信息,请参阅《IAM 用户指南》中的标记 IAM 资源

  13. 检查该角色,然后选择创建角色

在任务定义中为 OpenTelemetry sidecar 指定 Amazon 发行版

Amazon ECS 控制台使用使用指标收集选项简化了为 OpenTelemetry 边车容器创建 Amazon Distro 的体验。有关更多信息,请参阅 使用控制台创建任务定义

如果您不使用 Amazon ECS 控制台,则可以手动将 Amazon Distro fo OpenTelemetry r sidecar 容器添加到任务定义中。以下任务定义示例显示了为亚马逊 CloudWatch 集成的 s OpenTelemetry idecar 添加 Amazon Distro 的容器定义。

{ "family": "otel-using-cloudwatch", "taskRoleArn": "arn:aws:iam::111122223333:role/AmazonECS_OpenTelemetryCloudWatchRole", "executionRoleArn": "arn:aws:iam::111122223333:role/ecsTaskExecutionRole", "containerDefinitions": [ { "name": "aws-otel-emitter", "image": "application-image", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "/ecs/aws-otel-emitter", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }, "dependsOn": [{ "containerName": "aws-otel-collector", "condition": "START" }] }, { "name": "aws-otel-collector", "image": "public.ecr.aws/aws-observability/aws-otel-collector:v0.30.0", "essential": true, "command": [ "--config=/etc/ecs/ecs-cloudwatch.yaml" ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "True", "awslogs-group": "/ecs/ecs-aws-otel-sidecar-collector", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } } } ], "networkMode": "awsvpc", "requiresCompatibilities": [ "FARGATE" ], "cpu": "1024", "memory": "3072" }