我正在尝试让AWS X-Ray在多容器Beanstalk应用中运行,如in the docs所述。我发现了一个社区构建的X射线容器,我可以在我的应用程序旁边运行:pottava/xray:2.0。根据{{1}}和docker stats
,此容器正在运行并接收/发送网络流量(跟踪通过UDP发送到容器)。但AWS控制台中没有显示跟踪数据。
我没有按照建议here通过docker ps
配置文件启用X-Ray。尝试此操作失败了部署到Beanstalk。实际上,多容器环境未列为supported platform。因此,虽然有很多文档提到在Beanstalk上使用X-Ray,但我不确定是否有办法在我的多Docker环境中配置它。
答案 0 :(得分:2)
您已链接到的社区构建的Docker容器应在AWS Elastic Beanstalk中按预期工作。
您是否已将必要的AWSXrayWriteOnlyAccess
托管策略添加到您的Elastic Beanstalk实例配置文件中?
要进一步排除故障,请在守护程序的Docker容器中找到AWS X-Ray守护程序日志。该日志将报告对PutTraceSegments
API的任何尝试调用,以及可能导致的任何错误。在链接的Docker容器中,这是file is located at /var/log/xray-daemon.log
。
答案 1 :(得分:1)
是的,但是它不像可以通过 .ebextensions 启用的 X 射线守护程序那么简单,如Running the X-Ray daemon on AWS Elastic Beanstalk 中所述。这在 Docker 平台上不起作用(没有重大的网络攻击)。根据这篇文章,
Elastic Beanstalk does not provide the X-Ray daemon on the Multicontainer Docker (Amazon ECS) platform
。此外,值得注意的是,文章 Configuring AWS X-Ray debugging 中的Supported Platforms 下没有列出 Docker 平台。
对于 Docker
平台 (Amazon Linux 2),您可以使用 docker-compose 在容器中与您的应用程序一起运行 X-ray 守护程序。下面是我在一个简单的 API 应用程序中使用的 docker-compose.yml
的一个简单示例:
version: "3.9"
services:
api: # my app instrumented with the AWS X-Ray SDK
build:
context: .
dockerfile: Dockerfile-awseb
ports:
- "80:3000"
environment:
- AWS_XRAY_DAEMON_ADDRESS=xray:2000
env_file: .env
xray:
image: "amazon/aws-xray-daemon"
对于 Multicontainer
平台,文章中的 Scorekeep 示例 Instrumenting Amazon ECS applications 展示了在 Elastic Beanstalk 中的多容器 Docker 环境中进行检测的更详细示例。
一些高级技巧...
AWSXrayFullAccess
)中的说明启用先决权限。使用受支持的平台时,您可能会在 Configuring AWS X-Ray debugging 中找到其他指南。