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

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

在亚马逊云服务器上运行 X-Ray 守护程序

在 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 映像。

注意

Scoreate 示例应用程序展示了如何在 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
注意

Flags-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 SDK 要引用哪个容器端口并设置主机端口。例如,您可以发布 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 云服务器控制台中配置命令行选项

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

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

设置命令行选项

  1. 从打开 Amazon ECS 控制台https://console.aws.amazon.com/ecs/

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

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

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

  5. 在存储库的创建任务定义的新修订页面上,选择容器。

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

  7. 选择 Update (更新)

  8. 验证信息并选择 Create

以下示例演示如何为RoleARN选项。这些区域有:RoleARN选项采用指定的 IAM 角色上传分段到不同账户。

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

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