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

In-Memory Exporter无法采集Activity问题求助

问题分析与解决方案

你的测试用例失败主要有两个关键原因,对应的修正方案如下:

1. 未结束Activity

OpenTelemetry的In-Memory Exporter只会在Activity结束时将数据写入集合。你的代码里仅调用了StartActivity,但未终止Activity,导致数据无法被导出。

2. 默认采样策略可能过滤了Activity

默认情况下,OpenTelemetry的采样器可能不会采集所有Activity,需要显式设置采样率为100%,确保测试中的Activity被采集。

修正后的完整代码

[Fact]
public void Can_collect_Activities_in_memory()
{
    var serviceName = "ServiceName";
    var activities = new List<Activity>();

    var tracerProvider = Sdk.CreateTracerProviderBuilder()
        .AddSource(serviceName)
        .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("in-memory"))
        .AddInMemoryExporter(activities)
        // 设置采样率为100%,确保所有Activity都被采集
        .SetSampler(new AlwaysOnSampler())
        .Build();

    var source = new ActivitySource(serviceName);

    // 使用using语句自动结束Activity,替代手动调用activity.Stop()
    using var activity = source.StartActivity("TestActivity");

    // 强制立即导出所有待处理的Activity,确保断言前数据已写入集合
    tracerProvider.ForceFlush();

    Assert.Single(activities);
}

额外说明

  • using语句可以自动管理Activity的生命周期,避免因忘记调用Stop()导致的数据无法导出问题。
  • tracerProvider.ForceFlush()会强制导出所有未处理的Activity,无需依赖延迟等待就能确保集合中已有数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:50:25