You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法使用PHP配置AWS X-Ray:第三方库调用后无追踪数据显示

排查AWS X-Ray PHP第三方库无追踪记录的问题

基础环境验证

  • 确认X-Ray守护进程正常运行:
    你用的DaemonSegmentSubmitter依赖X-Ray守护进程接收追踪数据,需确保守护进程已在服务器/容器中启动,且监听默认的UDP 2000端口。可通过netstat -anu | grep 2000(Linux)或类似命令验证端口监听状态。
  • 检查IAM权限配置:
    运行PHP应用的角色/用户必须拥有xray:PutTraceSegments和xray:PutTelemetryRecords权限,确认对应IAM策略已正确绑定。

代码逻辑修复与验证

  • 修复重复调用http_response_code()的问题:
    代码中多次调用http_response_code()会导致响应码取值不准确,建议先将响应码存入变量再复用:
    $responseCode = http_response_code();
    
    Trace::getInstance()
        ->end() 
        ->setResponseCode($responseCode)
        ->setError($responseCode >= 400 && $responseCode < 500)
        ->setFault($responseCode >= 500)
        ->submit(new \Pkerrigan\Xray\Submission\DaemonSegmentSubmitter());
    
  • 捕获提交异常并排查:
    添加异常捕获逻辑,查看追踪数据提交是否失败:
    try {
        $responseCode = http_response_code();
        Trace::getInstance()
            ->end() 
            ->setResponseCode($responseCode)
            ->setError($responseCode >= 400 && $responseCode < 500)
            ->setFault($responseCode >= 500)
            ->submit(new \Pkerrigan\Xray\Submission\DaemonSegmentSubmitter());
    } catch (\Exception $e) {
        error_log('X-Ray追踪提交失败:' . $e->getMessage());
    }
    
  • 确认Trace实例生命周期:
    保证begin()和end()调用在同一个请求周期内,未被其他代码重置或覆盖Trace实例。

网络与区域配置检查

  • 验证应用与守护进程的通信:
    若守护进程在本地,检查防火墙/SELinux规则是否阻止UDP 2000端口通信;若为远程守护进程,需在DaemonSegmentSubmitter中指定正确的地址:
    $submitter = new \Pkerrigan\Xray\Submission\DaemonSegmentSubmitter('xray-daemon的IP或域名:2000');
    Trace::getInstance()->submit($submitter);
    
  • 确认AWS区域一致性:
    X-Ray守护进程需配置与控制台一致的AWS区域,启动时可通过--region参数指定,例如:xray -o -n us-east-1。

内容的提问来源于stack exchange,提问作者Krison Tan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 16:24:57