在 CloudWatch 集群上安装具有 Prometheus 指标集合的 Amazon ECS 代理 - Amazon CloudWatch
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

在 CloudWatch 集群上安装具有 Prometheus 指标集合的 Amazon ECS 代理

本节介绍如何在运行 的集群中设置具有 Prometheus 监控功能的 CloudWatch 代理Amazon ECS。执行此操作后,代理会自动抓取和导入该集群中运行的以下工作负载的指标。

  • AWS App Mesh

  • Java/JMX

您还可以将 代理配置为从其他 Prometheus 工作负载和源抓取和导入指标。

设置 IAM 角色

对于IAM代理任务定义,您需要两个 CloudWatch 角色。如果您在CreateIAMRoles=True堆栈AWS CloudFormation中指定 以让 Container Insights 为您创建这些角色,则将使用正确的权限创建角色。如果您要自行创建它们或使用现有角色,则需要以下角色和权限。

  • CloudWatch 代理 ECS 任务角色— CloudWatch 代理容器使用此角色。它必须包括 CloudwatchAgentServerPolicy 策略和客户托管策略,其中包含以下只读权限:

    • ec2:DescribeInstances

    • ecs:ListTasks

    • ecs:ListServices

    • ecs:DescribeContainerInstances

    • ecs:DescribeServices

    • ecs:DescribeTasks

    • ecs:DescribeTaskDefinition

  • CloudWatch 代理 ECS 任务执行角色— 这是 启动和执行容器Amazon ECS所需的 角色。确保您的任务执行角色附加了 AmazonSSMReadOnlyAccessAmazonECSTaskExecutionRolePolicyCloudWatchAgentServerPolicy 策略。如果要存储更敏感的数据Amazon ECS以供 使用,请参阅指定敏感数据

使用 安装具有 Prometheus 监控功能的 CloudWatch 代理 AWS CloudFormation

您可以使用 AWS CloudFormation 安装具有针对 CloudWatch 集群的 Prometheus 监控功能的 Amazon ECS 代理。以下列表显示了您将在AWS CloudFormation模板中使用的参数。

  • ECSClusterName— 指定目标Amazon ECS集群。

  • CreateIAMRoles— 指定 True 可为Amazon ECS任务角色和Amazon ECS任务执行角色创建新角色。指定 False 可重用现有角色。

  • TaskRoleName— 如果您TrueCreateIAMRoles 指定 ,则指定新Amazon ECS任务角色所使用的名称。如果您FalseCreateIAMRoles 指定了 ,这将指定要用作Amazon ECS任务角色的现有角色。

  • ExecutionRoleName— 如果TrueCreateIAMRoles 指定了 ,则指定新Amazon ECS任务执行角色所使用的名称。如果您FalseCreateIAMRoles 指定了 ,这将指定要用作Amazon ECS任务执行角色的现有 角色。

  • ECSNetworkMode— 如果您使用的是 EC2 启动类型,请在此处指定网络模式。它必须是 bridgehost

  • ECSLaunchType— 指定 fargateEC2

  • SecurityGroupID— 如果 ECSNetworkModeawsvpc,请在此处指定安全组 ID。

  • SubnetID— 如果 ECSNetworkModeawsvpc,请在此处指定子网 ID。

命令示例

本节包含在各种情况下使用 Prometheus 监控安装 Container Insights 的示例AWS CloudFormation命令。

注意

以下设置步骤默认以匿名用户身份从 Docker Hub 中提取容器映像。此拉取可能受速率限制的约束。有关更多信息,请参阅容器映像和下载速率限制

在桥接网络模式下为 AWS CloudFormation 集群创建Amazon ECS堆栈

export AWS_PROFILE=your_aws_config_profile_eg_default export AWS_DEFAULT_REGION=your_aws_region_eg_ap-southeast-1 export ECS_CLUSTER_NAME=your_ec2_ecs_cluster_name export ECS_NETWORK_MODE=bridge export CREATE_IAM_ROLES=True export ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name export ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/master/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-bridge-host.yaml aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \ --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=${ECS_CLUSTER_NAME} \ ParameterKey=CreateIAMRoles,ParameterValue=${CREATE_IAM_ROLES} \ ParameterKey=ECSNetworkMode,ParameterValue=${ECS_NETWORK_MODE} \ ParameterKey=TaskRoleName,ParameterValue=${ECS_TASK_ROLE_NAME} \ ParameterKey=ExecutionRoleName,ParameterValue=${ECS_EXECUTION_ROLE_NAME} \ --capabilities CAPABILITY_NAMED_IAM \ --region ${AWS_DEFAULT_REGION} \ --profile ${AWS_PROFILE}

在主机网络模式下为 AWS CloudFormation 集群创建Amazon ECS堆栈

export AWS_PROFILE=your_aws_config_profile_eg_default export AWS_DEFAULT_REGION=your_aws_region_eg_ap-southeast-1 export ECS_CLUSTER_NAME=your_ec2_ecs_cluster_name export ECS_NETWORK_MODE=host export CREATE_IAM_ROLES=True export ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name export ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/master/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-bridge-host.yaml aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \ --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=${ECS_CLUSTER_NAME} \ ParameterKey=CreateIAMRoles,ParameterValue=${CREATE_IAM_ROLES} \ ParameterKey=ECSNetworkMode,ParameterValue=${ECS_NETWORK_MODE} \ ParameterKey=TaskRoleName,ParameterValue=${ECS_TASK_ROLE_NAME} \ ParameterKey=ExecutionRoleName,ParameterValue=${ECS_EXECUTION_ROLE_NAME} \ --capabilities CAPABILITY_NAMED_IAM \ --region ${AWS_DEFAULT_REGION} \ --profile ${AWS_PROFILE}

在 awsvpc 网络模式下为 AWS CloudFormation 集群创建Amazon ECS堆栈

export AWS_PROFILE=your_aws_config_profile_eg_default export AWS_DEFAULT_REGION=your_aws_region_eg_ap-southeast-1 export ECS_CLUSTER_NAME=your_ec2_ecs_cluster_name export ECS_LAUNCH_TYPE=EC2 export CREATE_IAM_ROLES=True export ECS_CLUSTER_SECURITY_GROUP=your_security_group_eg_sg-xxxxxxxxxx export ECS_CLUSTER_SUBNET=your_subnet_eg_subnet-xxxxxxxxxx export ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name export ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/master/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-awsvpc.yaml aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-${ECS_LAUNCH_TYPE}-awsvpc \ --template-body file://cwagent-ecs-prometheus-metric-for-awsvpc.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=${ECS_CLUSTER_NAME} \ ParameterKey=CreateIAMRoles,ParameterValue=${CREATE_IAM_ROLES} \ ParameterKey=ECSLaunchType,ParameterValue=${ECS_LAUNCH_TYPE} \ ParameterKey=SecurityGroupID,ParameterValue=${ECS_CLUSTER_SECURITY_GROUP} \ ParameterKey=SubnetID,ParameterValue=${ECS_CLUSTER_SUBNET} \ ParameterKey=TaskRoleName,ParameterValue=${ECS_TASK_ROLE_NAME} \ ParameterKey=ExecutionRoleName,ParameterValue=${ECS_EXECUTION_ROLE_NAME} \ --capabilities CAPABILITY_NAMED_IAM \ --region ${AWS_DEFAULT_REGION} \ --profile ${AWS_PROFILE}

在 awsvpc 网络模式下为AWS CloudFormation集群创建Fargate堆栈

export AWS_PROFILE=your_aws_config_profile_eg_default export AWS_DEFAULT_REGION=your_aws_region_eg_ap-southeast-1 export ECS_CLUSTER_NAME=your_ec2_ecs_cluster_name export ECS_LAUNCH_TYPE=FARGATE export CREATE_IAM_ROLES=True export ECS_CLUSTER_SECURITY_GROUP=your_security_group_eg_sg-xxxxxxxxxx export ECS_CLUSTER_SUBNET=your_subnet_eg_subnet-xxxxxxxxxx export ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name export ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/master/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-awsvpc.yaml aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-${ECS_LAUNCH_TYPE}-awsvpc \ --template-body file://cwagent-ecs-prometheus-metric-for-awsvpc.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=${ECS_CLUSTER_NAME} \ ParameterKey=CreateIAMRoles,ParameterValue=${CREATE_IAM_ROLES} \ ParameterKey=ECSLaunchType,ParameterValue=${ECS_LAUNCH_TYPE} \ ParameterKey=SecurityGroupID,ParameterValue=${ECS_CLUSTER_SECURITY_GROUP} \ ParameterKey=SubnetID,ParameterValue=${ECS_CLUSTER_SUBNET} \ ParameterKey=TaskRoleName,ParameterValue=${ECS_TASK_ROLE_NAME} \ ParameterKey=ExecutionRoleName,ParameterValue=${ECS_EXECUTION_ROLE_NAME} \ --capabilities CAPABILITY_NAMED_IAM \ --region ${AWS_DEFAULT_REGION} \ --profile ${AWS_PROFILE}

AWS AWS CloudFormation 堆栈创建的 资源

下表列出了在使用 在 AWS 集群上AWS CloudFormation设置 Container Insights 和 Prometheus 监控时创建的Amazon ECS资源。

资源类型 资源名称 注释

AWS::SSM::Parameter

AmazonCloudWatch-CWAgentConfig-$ECS_CLUSTER_NAME-$ECS_LAUNCH_TYPE-$ECS_NETWORK_MODE

这是具有默认 CloudWatch 和 Java/JMX 嵌入式指标格式定义的App Mesh代理。

AWS::SSM::Parameter

AmazonCloudWatch-PrometheusConfigName-$ECS_CLUSTER_NAME-$ECS_LAUNCH_TYPE-$ECS_NETWORK_MODE

这是 Prometheus 抓取配置。

AWS::IAM::Role

$ECS_TASK_ROLE_NAME

Amazon ECS 任务角色。仅当您True为 指定 时,才会创建它CREATE_IAM_ROLES

AWS::IAM::Role

${ECS_EXECUTION_ROLE_NAME}

Amazon ECS 任务执行角色。仅当您True为 指定了 时,才会创建它CREATE_IAM_ROLES

AWS::ECS::TaskDefinition

cwagent-prometheus-$ECS_CLUSTER_NAME-$ECS_LAUNCH_TYPE-$ECS_NETWORK_MODE

AWS::ECS::Service

cwagent-prometheus-replica-service-$ECS_LAUNCH_TYPE-$ECS_NETWORK_MODE

使用 Prometheus 监控删除 AWS CloudFormation 代理的CloudWatch堆栈

要从 CloudWatch 集群中删除 Amazon ECS 代理,请输入以下命令。

export AWS_PROFILE=your_aws_config_profile_eg_default export AWS_DEFAULT_REGION=your_aws_region_eg_ap-southeast-1 export CLOUDFORMATION_STACK_NAME=your_cloudformation_stack_name aws cloudformation delete-stack \ --stack-name ${CLOUDFORMATION_STACK_NAME} \ --region ${AWS_DEFAULT_REGION} \ --profile ${AWS_PROFILE}