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

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

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

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

使用官方 Docker 映像

X-Ray 在 Amazon ECR 上提供了 Docker 容器映像,您可以与您的应用程序一起部署该映像。有关更多信息,请参阅下载进程守护程序

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

创建和构建 Docker 映像

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

为任务角色添加托管式策略,授予进程守护程序将跟踪数据上传到 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. 打开 Amazon ECS 经典控制台: https://console.aws.amazon.com/ecs/

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

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

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

  5. 创建任务定义新修订页面上,选择该容器。

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

  7. 选择更新

  8. 验证信息并选择 Create

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

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

若要详细了解 X-Ray 提供的命令行选项,请参阅配置 Amazon X-Ray 进程守护程序