PHP应用集成Datadog APM遇追踪数据发送失败问题求助
解决PHP应用集成Datadog APM的"No such file or directory"错误
问题根源
你的PHP容器中冗余安装了Datadog Agent,同时ddtrace扩展默认尝试通过本地Unix套接字(/var/run/datadog/apm.socket)连接Agent,但在ECS Fargate的awsvpc网络模式下,容器间需通过TCP通信,且独立的Agent容器才是正确的接收端,导致连接失败触发报错。
修复步骤
1. 精简PHP容器Dockerfile,移除冗余Agent安装
仅保留ddtrace扩展的安装和配置,添加Agent容器的连接地址:
# 移除原有的Agent安装命令 # RUN DD_API_KEY=${DD_API_KEY} DD_SITE="datadoghq.eu" DD_HOSTNAME=${DD_HOSTNAME} DD_ENV=${DD_ENV} DD_APM_INSTRUMENTATION_ENABLED=host bash -c "$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script_agent7.sh)" RUN curl -LO https://github.com/DataDog/dd-trace-php/releases/latest/download/datadog-setup.php RUN php datadog-setup.php --php-bin=all RUN sed -i \ -e 's/;datadog.service = unnamed-php-service/datadog.service = tms/' \ -e 's/;datadog.agent_host = 127.0.0.1/datadog.agent_host = app-datadog-agent/' \ -e 's/;datadog.agent_port = 8126/datadog.agent_port = 8126/' \ /usr/local/etc/php/conf.d/98-ddtrace.ini
2. 修正Datadog Agent的Terraform配置
确保关键环境变量配置正确:
"environment": [ { "name": "DD_API_KEY", "value": "你的实际API密钥" }, { "name": "ECS_FARGATE", "value": "true" }, { "name": "DD_SITE", "value": "datadoghq.eu" }, { "name": "DD_APM_ENABLED", "value": "true" }, { "name": "DD_APM_NON_LOCAL_TRAFFIC", "value": "true" } ]
ECS_FARGATE需设置为true,适配Fargate环境DD_SITE需和PHP容器配置一致,确保数据上传到正确的区域
3. 验证容器间通信
在ECS Fargate的awsvpc模式下,同一任务内的容器可通过容器名称直接通信,app-datadog-agent作为Agent容器名称,PHP容器的ddtrace扩展可通过该名称访问到Agent的8126端口。
额外验证项
- 确认PHP容器的任务定义网络模式为
awsvpc,与Agent容器处于同一任务或VPC内 - 查看Agent容器日志,确认存在
APM receiver listening on 0.0.0.0:8126的启动信息 - 在PHP容器内执行
php -m | grep ddtrace,验证扩展已正确加载
内容的提问来源于stack exchange,提问作者Chella S
相关产品推荐
相关产品推荐

