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

将应用程序指标导出到 Amazon Managed Service for Prometheus

Amazon ECS 支持将您的任务级 CPU、内存、网络和存储指标以及自定义应用程序指标导出到 Amazon Managed Service for Prometheus。此操作通过添加 Amazon Distro for OpenTelemetry 附加容器到您的任务定义中完成。Amazon ECS 控制台通过在创建新的任务定义时添加使用指标收集选项来简化此流程。有关更多信息,请参阅 使用控制台创建任务定义

这些指标将导出到 Amazon Managed Service for Prometheus,并可以使用 Amazon Managed Grafana 控制面板查看。您的应用程序必须使用 Prometheus 库或 OpenTelemetry 开发工具包进行分析。有关使用 OpenTelemetry 开发工具包分析您的应用程序的更多信息,请参阅 Amazon Distro for OpenTelemetry 文档中的 Amazon Distro for OpenTelemetry 的介绍

使用 Prometheus 库时,您的应用程序必须公开用于抓取指标数据的 /metrics 终端节点。有关使用 Prometheus 库分析您的应用程序的更多信息,请参阅 Prometheus 文档中的 Prometheus 客户端库

注意事项

使用 Fargate 上的 Amazon ECS 与 Amazon Distro for OpenTelemetry 的集成向 Amazon Managed Service for Prometheus 发送应用程序指标时,应考虑以下因素。

  • Fargate 和 Amazon EC2 实例上托管的 Amazon ECS 工作负载支持 Amazon Distro for OpenTelemetry 集成。目前不支持外部实例。

  • 预设情况下,在向 Amazon Managed Service for Prometheus 导出时,Amazon Distro for OpenTelemetry 包括可用于您的应用程序指标的所有可用的任务级别维度。您还可以对应用程序进行分析以添加其他维度。有关更多信息,请参阅 Amazon Distro for OpenTelemetry 文档中的开始将 Prometheus Remote Write Exporter 用于 Amazon Managed Service for Prometheus

Amazon Distro for OpenTelemetry 与 Amazon Managed Service for Prometheus 集成所需的 IAM 权限

将 Amazon ECS 与使用 Amazon Distro for OpenTelemetry 附加的 Amazon Managed Service for Prometheus 集成要求您创建任务 IAM 角色并在任务定义中指定角色。在注册任务定义之前,必须使用以下步骤手动创建此任务 IAM 角色。

我们建议也将 Amazon Distro for OpenTelemetry 附加配置为将容器日志路由到 CloudWatch Logs 中,这还需要在任务定义中创建和指定任务执行 IAM 角色。Amazon ECS 控制台代表您处理任务执行 IAM 角色,但必须手动创建任务 IAM 角色。有关创建任务执行 IAM 角色的更多信息,请参阅 Amazon ECS 任务执行 IAM 角色

重要

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

要创建 Elastic Container Service 的服务角色(IAM 控制台)
  1. 登录 Amazon Web Services Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

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

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

  4. 对于服务或使用案例,选择 Elastic Container Service,然后选择 Elastic Container Service 任务使用案例。

  5. 选择下一步

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

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

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

      IAM 包括您的账户中的 Amazon 托管式策略和客户管理型策略的列表。

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

  8. 选择下一步

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

    重要

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

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

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

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

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

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

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

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

在您的任务定义中指定 Amazon Distro for OpenTelemetry 附加

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

如果您没有使用 Amazon ECS 控制台,则可以手动添加 Amazon Distro for OpenTelemetry 附加容器到您的任务定义中。以下任务定义示例显示了用于添加 Amazon Distro for OpenTelemetry 附加以进行 Amazon Managed Service for Prometheus 集成的容器定义。

{ "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": "aws-region", "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-amp.yaml" ], "environment": [{ "name": "AWS_PROMETHEUS_ENDPOINT", "value": "https://aps-workspaces.aws-region.amazonaws.com/workspaces/ws-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111/api/v1/remote_write" }], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "True", "awslogs-group": "/ecs/ecs-aws-otel-sidecar-collector", "awslogs-region": "aws-region", "awslogs-stream-prefix": "ecs" } } } ], "networkMode": "awsvpc", "requiresCompatibilities": [ "FARGATE" ], "cpu": "1024", "memory": "3072" }