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

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

在 X-Ray 上运行 Amazon ECS 守护程序

在 Amazon ECS 中,创建一个运行 X-Ray 守护程序的 Docker 映像,将其上传到 Docker 映像存储库,然后将其部署到您的 Amazon ECS 集群。您可以在任务定义文件中使用端口映射和网络模式设置,允许您的应用程序与守护程序容器通信。

使用官方 Docker 映像

X-Ray 提供了 Docker 容器映像,您可以与您的应用程序一起部署该映像。

$ docker pull amazon/aws-xray-daemon

例 任务定义

{ "name": "xray-daemon", "image": "amazon/aws-xray-daemon", "cpu": 32, "memoryReservation": 256, "portMappings" : [ { "hostPort": 0, "containerPort": 2000, "protocol": "udp" } ] }

创建并构建 Docker 映像

对于自定义配置,您可能需要定义自己的 Docker 映像。

注意

Scorekeep 示例应用程序演示如何在 Amazon ECS 上使用 X-Ray 守护程序。有关详细信息,请参阅 分析 Amazon ECS 应用程序

为任务角色添加托管策略,授予守护程序将跟踪数据上传到 X-Ray 的权限。有关更多信息,请参阅授予守护程序向 X-Ray 发送数据的权限

使用以下 Dockerfile 之一来创建运行守护程序的映像。

例 Dockerfile – Amazon Linux

FROM amazonlinux RUN yum install -y unzip RUN curl -o daemon.zip https://s3.us-east-2.amazonaws.com/aws-xray-assets.us-east-2/xray-daemon/aws-xray-daemon-linux-3.x.zip RUN unzip daemon.zip && cp xray /usr/bin/xray ENTRYPOINT ["/usr/bin/xray", "-t", "0.0.0.0:2000", "-b", "0.0.0.0:2000"] EXPOSE 2000/udp EXPOSE 2000/tcp
注意

需要标记 -t-b 以指定绑定地址来侦听多容器环境的环回。

例 Dockerfile – Ubuntu

对于 Debian 衍生物,您还需要安装证书颁发机构 (CA) 证书,以避免下载安装程序时遇到问题。

FROM ubuntu:16.04 RUN apt-get update && apt-get install -y --force-yes --no-install-recommends apt-transport-https curl ca-certificates wget && apt-get clean && apt-get autoremove && rm -rf /var/lib/apt/lists/* RUN wget https://s3.us-east-2.amazonaws.com/aws-xray-assets.us-east-2/xray-daemon/aws-xray-daemon-3.x.deb RUN dpkg -i aws-xray-daemon-3.x.deb ENTRYPOINT ["/usr/bin/xray", "--bind=0.0.0.0:2000", "--bind-tcp=0.0.0.0:2000"] EXPOSE 2000/udp EXPOSE 2000/tcp

在您的任务定义中,配置取决于您使用的联网模式。桥式联网是默认模式,可在您的默认 VPC 中使用。在桥接网络中,设置 AWS_XRAY_DAEMON_ADDRESS 环境变量以告知 X-Ray 开发工具包哪个容器端口要引用并设置主机端口。例如,您可以发布 UDP 端口 2000,并创建从应用程序容器到守护程序容器的链接。

例 任务定义

{ "name": "xray-daemon", "image": "123456789012.dkr.ecr.us-east-2.amazonaws.com/xray-daemon", "cpu": 32, "memoryReservation": 256, "portMappings" : [ { "hostPort": 0, "containerPort": 2000, "protocol": "udp" } ] }, { "name": "scorekeep-api", "image": "123456789012.dkr.ecr.us-east-2.amazonaws.com/scorekeep-api", "cpu": 192, "memoryReservation": 512, "environment": [ { "name" : "AWS_REGION", "value" : "us-east-2" }, { "name" : "NOTIFICATION_TOPIC", "value" : "arn:aws:sns:us-east-2:123456789012:scorekeep-notifications" }, { "name" : "AWS_XRAY_DAEMON_ADDRESS", "value" : "xray-daemon:2000" } ], "portMappings" : [ { "hostPort": 5000, "containerPort": 5000 } ], "links": [ "xray-daemon" ] }

如果您在 VPC 的私有子网中运行集群,可以使用 awsvpc 网络模式将弹性网络接口 (ENI) 附加到您的容器。这使您能够避免使用链接。省略端口映射、链接和 AWS_XRAY_DAEMON_ADDRESS 环境变量中的主机端口。

例 VPC 任务定义

{ "family": "scorekeep", "networkMode":"awsvpc", "containerDefinitions": [ { "name": "xray-daemon", "image": "123456789012.dkr.ecr.us-east-2.amazonaws.com/xray-daemon", "cpu": 32, "memoryReservation": 256, "portMappings" : [ { "containerPort": 2000, "protocol": "udp" } ] }, { "name": "scorekeep-api", "image": "123456789012.dkr.ecr.us-east-2.amazonaws.com/scorekeep-api", "cpu": 192, "memoryReservation": 512, "environment": [ { "name" : "AWS_REGION", "value" : "us-east-2" }, { "name" : "NOTIFICATION_TOPIC", "value" : "arn:aws:sns:us-east-2:123456789012:scorekeep-notifications" } ], "portMappings" : [ { "containerPort": 5000 } ] } ] }

在 Amazon ECS 控制台中配置命令行选项

命令行选项将覆盖映像配置文件中的任何冲突值。命令行选项通常用于本地测试,但为了方便起见,也可以在设置环境变量或控制启动过程时使用。

通过添加命令行选项,您将更新传递给容器的 Docker CMD。有关更多信息,请参阅 Docker 运行参考

设置命令行选项

  1. https://console.amazonaws.cn/ecs/ 上打开 Amazon ECS 控制台。

  2. 从导航栏中,选择包含您的任务定义的区域。

  3. 在导航窗格中,选择 Task Definitions

  4. Task Definitions 页面上,选择要修订的任务定义左侧的框,然后选择 Create new revision

  5. Create new revision of Task Definition 页面上,选择容器。

  6. ENVIRONMENT (环境) 部分中,将命令行选项的逗号分隔列表添加到 Command (命令) 字段中。

  7. 选择 Update

  8. 验证信息并选择 Create

以下示例说明如何为 RoleARN 选项编写逗号分隔的命令行选项。选项代入指定的 RoleARN 角色以将分段上传到其他账户。IAM

--role-arn, arn:aws:iam::123456789012:role/xray-cross-account

要了解有关 X-Ray 中可用命令行选项的更多信息,请参阅配置 AWS X-Ray 守护程序