在 Amazon ECS 上部署 CloudWatch 代理和 X-Ray 守护程序 - Amazon CloudWatch
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

在 Amazon ECS 上部署 CloudWatch 代理和 X-Ray 守护程序

在 Amazon ECS 上,您可以将 CloudWatch 代理作为附加项部署到应用程序容器来收集指标。您可以通过 SSM 参数仓库来配置 CloudWatch 代理。

创建 IAM 角色

您必须创建两个 IAM 角色。如果您已创建这些角色,则可能需要向其添加权限。

  • ECS任务角色— 容器使用此角色运行。权限应是您的应用程序所需的任何权限,以及 CloudWatchAgentServerPolicyAWSXRayDaemonWriteAccess

  • ECS 任务定义角色 - Amazon ECS 使用此角色启动和执行容器。如果您已创建此角色,请将 AmazonSSMReadOnlyAccessAmazonECSTaskExecutionRolePolicyCloudWatchAgentServerPolicy 策略附加到此角色。

    如果您需要存储更敏感的数据以供 Amazon ECS 使用,请参阅指定敏感数据以了解更多信息。

有关创建 IAM 角色的更多信息,请参阅创建 IAM 角色

将代理配置存储在 SSM 参数仓库中

您需要确保您的代理配置文件具有以下部分,然后将它上传到 SSM 参数存储。

{ "logs": { "metrics_collected": { "emf": {} } } }

将代理配置上传到 SSM 参数仓库中

  1. 将代理配置内容放入本地文件 /tmp/ecs-cwagent.json

  2. 输入以下命令。Replace region 与群集的区域。

    aws ssm put-parameter \ --name "ecs-cwagent" \ --type "String" \ --value "`cat /tmp/ecs-cwagent.json`" \ --region "region"

创建任务定义和启动任务

此任务的步骤取决于您是要使用 EC2 启动类型还是 Fargate 启动类型。

EC2 启动类型

首先,创建任务定义。在此示例中,容器“demo-app”向 CloudWatch 代理发送 X-Ray 软件开发工具包指标,并向 X-Ray 守护程序发送跟踪信息。

将以下任务定义复制到本地JSM文件,例如 /tmp/ecs-cwagent-ec2.json。替换以下占位符:

  • Replace {{ecs-task-role}} ECS任务角色的ARN。

  • Replace {{ecs-task-execution-role}} ECS任务执行角色的ARN。

  • Replace {{demo-app-image}} 您的应用形象, X-Ray 支持SDK集成。将名称从 demo-app 更改为您自己的应用程序名称。

  • Replace {{region}} 以及 AWS 您想要发送容器日志的区域。例如:us-west-2

{ "family": "ecs-cwagent-ec2", "taskRoleArn": "{{ecs-task-role}}", "executionRoleArn": "{{ecs-task-execution-role}}", "networkMode": "bridge", "containerDefinitions": [ { "name": "demo-app", "image": "{{demo-app-image}}", "links": [ "cloudwatch-agent", "xray-daemon" ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "True", "awslogs-group": "/ecs/ecs-cwagent-ec2", "awslogs-region": "{{region}}", "awslogs-stream-prefix": "ecs" } } }, { "name": "xray-daemon", "image": "amazon/aws-xray-daemon:latest", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "True", "awslogs-group": "/ecs/ecs-cwagent-ec2", "awslogs-region": "{{region}}", "awslogs-stream-prefix": "ecs" } } }, { "name": "cloudwatch-agent", "image": "amazon/cloudwatch-agent:latest", "secrets": [ { "name": "CW_CONFIG_CONTENT", "valueFrom": "ecs-cwagent" } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "True", "awslogs-group": "/ecs/ecs-cwagent-ec2", "awslogs-region": "{{region}}", "awslogs-stream-prefix": "ecs" } } } ], "requiresCompatibilities": [ "EC2" ], "cpu": "256", "memory": "256" }

输入以下命令以创建任务定义。Replace {{region}} 与群集的区域。

aws ecs register-task-definition \ --cli-input-json file:///tmp/ecs-cwagent-ec2.json \ --region {{region}}

输入以下命令以启动任务。Replace {{cluster-name}} $and {{region}} 以及群集的名称和区域。

aws ecs run-task \ --cluster {{cluster-name}} \ --task-definition ecs-cwagent-ec2 \ --region {{region}} \ --launch-type EC2

Fargate 启动类型

首先,创建任务定义。在此示例中,容器“demo-app”向 CloudWatch 代理发送 X-Ray 软件开发工具包指标,并向 X-Ray 守护程序发送跟踪信息。

将以下任务定义复制到本地JSM文件,例如 /tmp/ecs-cwagent-ec2.json。替换以下占位符:

  • Replace {{ecs-task-role}} ECS任务角色的PDF资源名称(ARN)。

  • Replace {{ecs-task-execution-role}} ECS任务执行角色的ARN。

  • Replace {{demo-app-image}} 您的应用形象, X-Ray 支持SDK集成。将名称从 demo-app 更改为您自己的应用程序名称。

  • Replace {{region}} 以及 AWS 您想要发送容器日志的区域。例如:us-west-2

{ "family": "ecs-cwagent-fargate", "taskRoleArn": "{{ecs-task-role}}", "executionRoleArn": "{{ecs-task-execution-role}}", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "demo-app", "image": "{{demo-app-image}}", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "True", "awslogs-group": "/ecs/ecs-cwagent-fargate", "awslogs-region": "{{region}}", "awslogs-stream-prefix": "ecs" } } }, { "name": "xray-daemon", "image": "amazon/aws-xray-daemon:latest", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "True", "awslogs-group": "/ecs/ecs-cwagent-fargate", "awslogs-region": "{{region}}", "awslogs-stream-prefix": "ecs" } } }, { "name": "cloudwatch-agent", "image": "amazon/cloudwatch-agent:latest", "secrets": [ { "name": "CW_CONFIG_CONTENT", "valueFrom": "ecs-cwagent" } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "True", "awslogs-group": "/ecs/ecs-cwagent-fargate", "awslogs-region": "{{region}}", "awslogs-stream-prefix": "ecs" } } } ], "requiresCompatibilities": [ "FARGATE" ], "cpu": "512", "memory": "1024" }

输入以下命令以创建任务定义。Replace {{region}} 与群集的区域。

aws ecs register-task-definition \ --cli-input-json file:///tmp/ecs-cwagent-fargate.json \ --region {{region}}

如果您已设置 Fargate 集群,则可使用刚刚创建的任务定义来启动任务。如果您尚不具有任何 Fargate 集群,请参阅配置服务以了解有关设置 Fargate 的其余步骤的更多信息。