本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 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所需的 角色。确保您的任务执行角色附加了 AmazonSSMReadOnlyAccess、AmazonECSTaskExecutionRolePolicy 和 CloudWatchAgentServerPolicy 策略。如果要存储更敏感的数据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— 如果您
True
为 CreateIAMRoles 指定 ,则指定新Amazon ECS任务角色所使用的名称。如果您False
为 CreateIAMRoles 指定了 ,这将指定要用作Amazon ECS任务角色的现有角色。 -
ExecutionRoleName— 如果
True
为 CreateIAMRoles 指定了 ,则指定新Amazon ECS任务执行角色所使用的名称。如果您False
为 CreateIAMRoles 指定了 ,这将指定要用作Amazon ECS任务执行角色的现有 角色。 -
ECSNetworkMode— 如果您使用的是 EC2 启动类型,请在此处指定网络模式。它必须是
bridge
或host
。 -
ECSLaunchType— 指定
fargate
或EC2
。 -
SecurityGroupID— 如果 ECSNetworkMode 为
awsvpc
,请在此处指定安全组 ID。 -
SubnetID— 如果 ECSNetworkMode 为
awsvpc
,请在此处指定子网 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-$ |
这是具有默认 CloudWatch 和 Java/JMX 嵌入式指标格式定义的App Mesh代理。 |
AWS::SSM::Parameter |
AmazonCloudWatch-PrometheusConfigName-$ |
这是 Prometheus 抓取配置。 |
AWS::IAM::Role |
$ECS_TASK_ROLE_NAME。 |
Amazon ECS 任务角色。仅当您 |
AWS::IAM::Role |
${ECS_EXECUTION_ROLE_NAME} |
Amazon ECS 任务执行角色。仅当您 |
AWS::ECS::TaskDefinition |
cwagent-prometheus-$ |
|
AWS::ECS::Service |
cwagent-prometheus-replica-service-$ |
使用 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}