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

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

Amazon Distro for OpenTelemetry(ADOT)指标收集功能为预览版。预览版对所有 Amazon 账户开放。在宣布正式发布之前,可能会添加或更改功能。

Fargate 上的 Amazon ECS 支持将您的自定义应用程序指标作为自定义指标导出到 Amazon CloudWatch。此操作通过添加 Amazon Distro for OpenTelemetry 附加容器到您的任务定义中完成。新的 Amazon ECS 控制台体验通过在创建新的任务定义时添加 Use metric collection(使用指标收集)选项来简化此流程。有关更多信息,请参阅使用新控制台创建任务定义

应用程序指标将使用日志组名称 /aws/ecs/application/metrics 导出到 CloudWatch Logs 并且指标可在 ECS/AWSOTel/Application 命名空间中查看。您的应用程序必须使用 OpenTelemetry 开发工具包进行分析。有关更多信息,请参阅 Amazon Distro for OpenTelemetry 文档中的 Amazon Distro for OpenTelemetry 的介绍

注意事项

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

  • 使用此集成时,Amazon ECS 不会向 CloudWatch Container Insights 发送任何任务级别指标。您可以在 Amazon ECS 集群级别启用 Container Insights 以接收这些指标。有关更多信息,请参阅Amazon ECS CloudWatch Container Insights

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

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

Amazon Distro for OpenTelemetry 与 Amazon CloudWatch 集成所需的 IAM 权限

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

重要

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

要创建任务 IAM 角色以使 Amazon Distro for OpenTelemetry 与 CloudWatch 集成

  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择 PoliciesCreate policy

  3. Create policy(创建策略)页面中,切换到 JSON 选项卡,将以下 IAM policy JSON 复制并粘贴到字段中,然后选择 Next: Tags(下一步:标签)。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:PutLogEvents", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:DescribeLogGroups", "cloudwatch:PutMetricData" ], "Resource": "*" } ] }
    注意

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

  4. (可选)将一个或多个标签添加到角色,然后选择 Next: Review(下一步:审核)。

  5. 对于 Name(名称),指定 AWSDistroOpenTelemetryPolicyForCloudWatch

  6. 对于 Description(描述),指定可选描述,然后选择 Create policy(创建策略)。

  7. 在导航窗格中,选择 Roles(角色)和 Create role(创建角色)。

  8. Select type of trusted entity(选择受信任实体的类型)部分,选择 Amazon 服务 Elastic Container Service

  9. 对于 Select your use case (选择使用案例),选择 Elastic Container Service Task (弹性容器服务任务),然后选择 Next: Permissions (下一步: 权限)。

  10. Attach permissions policy(附加权限策略)部分中,搜索 AWSDistroOpenTelemetryPolicyForCloudWatch,选择策略,然后选择 Next: Tags(下一步:标签)。

  11. 对于添加标签(可选),指定要与策略关联的任何自定义标签,然后选择下一步:审核.

  12. 对于 Role Name(角色名称),指定 AmazonECS_OpenTelemetryCloudWatchRole,然后选择 Create role(创建角色)。

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

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

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

{ "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.17.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" }