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

如何用Amazon X-Ray记录后台操作?已尝试方案无日志无报错

.NET Core 中 Amazon X-Ray 后台操作无数据的排查与解决

一、先排查基础配置问题

  • 确认X-Ray Daemon正在运行:后台任务(控制台应用、Windows服务、容器作业等)依赖X-Ray Daemon转发追踪数据,SDK不会直接上传到AWS。需确保Daemon已启动,且-o参数指定了正确的AWS区域,运行Daemon的实体(EC2实例、容器角色等)拥有AWSXRayDaemonWriteAccess权限。
  • 检查SDK启用状态:在appsettings.json中确认X-Ray已启用:
"XRay": {
  "Enabled": true,
  "ServiceName": "Your-Background-Service"
}
  • 验证AWS权限:本地开发时,确保本地AWS凭证(~/.aws/credentials或环境变量)拥有PutTraceSegments权限;云环境中,实例/任务角色需附加AWSXRayFullAccess或最小权限策略。

二、两种方案的正确实现

方案1:使用Instance.BeginSegment(无父段的根追踪)

后台操作没有HTTP请求的父Segment,需手动创建根Segment,必须调用EndSegment()才能提交数据,示例:

using Amazon.XRay.Recorder.Core;
using Amazon.XRay.Recorder.Core.Internal.Entities;

// 全局初始化(可放在Startup.cs或Program.cs)
AWSXRayRecorder.InitializeInstance(new AWSXRayRecorderOptions
{
    ServiceName = "Background-Processing-Service"
});

// 记录后台任务
using (var segment = AWSXRayRecorder.Instance.BeginSegment("Daily-Data-Export"))
{
    try
    {
        // 添加标注(用于筛选追踪)
        segment.AddAnnotation("JobId", "1001");
        segment.AddAnnotation("Environment", "Production");

        // 子段记录具体步骤
        using (var subsegment = segment.BeginSubsegment("Fetch-Data-From-DB"))
        {
            // 执行数据库查询逻辑
            subsegment.AddMetadata("Query", "SELECT * FROM orders WHERE date = CURDATE()");
            subsegment.End();
        }

        // 其他业务步骤...
    }
    catch (Exception ex)
    {
        segment.AddException(ex);
        throw;
    }
    finally
    {
        segment.End(); // 关键:结束Segment才会触发数据提交
    }
}

方案2:创建独立Recorder实例(隔离追踪场景)

如果需要与全局Recorder隔离的追踪实例,需显式配置服务名并确保结束Segment:

using Amazon.XRay.Recorder.Core;
using Amazon.XRay.Recorder.Core.Internal.Entities;

var isolatedRecorder = new AWSXRayRecorder(new AWSXRayRecorderOptions
{
    ServiceName = "Isolated-Task-Recorder"
});

using (var segment = isolatedRecorder.BeginSegment("Third-Party-API-Sync"))
{
    try
    {
        segment.AddAnnotation("SyncTarget", "Vendor-API");
        // 执行API同步逻辑
    }
    catch (Exception ex)
    {
        segment.AddException(ex);
        throw;
    }
    finally
    {
        segment.End();
    }
}

三、额外排查技巧

  • 开启SDK调试日志:在appsettings.json中添加日志配置,查看SDK是否有数据提交的相关日志:
"Logging": {
  "LogLevel": {
    "Amazon.XRay": "Debug"
  }
}
  • 查看X-Ray Daemon日志:启动Daemon时添加-l debug参数,确认是否收到SDK发送的Segment数据:
xray daemon -o us-east-1 -l debug
  • 调整采样规则:若采样率过低,可能导致追踪数据被丢弃。可临时设置全局采样率为100%(sampling-rules.json):
{
  "version": 2,
  "default": {
    "fixed_target": 0,
    "rate": 1.0
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:34:59