针对 Jaeger 的 C# OpenTelemetry 在简单但不是批处理中工作

C# OpenTelemetry against Jaeger works in Simple but not Batch

有一个相当多的工作环境可用于跟踪,针对 Jaeger Tracing 的 OpenTelemetry。 我读到 Batch for process 是 Simple 的首选方式。如何在 .Net Framework 4.8 Batch 中似乎没有给出任何记录的结果。 我用 Wireshark 捕获了数据包数据。当 Batch.

中的 运行 时没有任何反应

此配置中是否缺少某些东西以将其设为 ExportProcessorType.Batch 而不是 ExportProcessorType.Simple

    public TracerProvider GetTracerProvider(string host, int port)
    {           
        BackendServiceResource = ResourceBuilder.CreateDefault()
             .AddService(Process.GetCurrentProcess().ProcessName)               
             .AddAttributes(new[]
             {
                new KeyValuePair<string, object>("MachineName", Environment.MachineName),
                new KeyValuePair<string, object>("UserName", Environment.UserName),
             });

        return Sdk.CreateTracerProviderBuilder()
        .SetResourceBuilder(BackendServiceResource)
        .SetSampler(new AlwaysOnSampler())
        .SetErrorStatusOnException(true)
        .AddSource(ActivitySource.Name)
        .AddConsoleExporter()
        .AddJaegerExporter(jeager =>
        {
            jeager.AgentHost = host;
            jeager.AgentPort = port;

            jeager.MaxPayloadSizeInBytes = 4096;

            jeager.ExportProcessorType = ExportProcessorType.Simple;
            jeager.BatchExportProcessorOptions = new BatchExportProcessorOptions<Activity>()
            {
                MaxQueueSize = 2048,
                ScheduledDelayMilliseconds = 5000,
                ExporterTimeoutMilliseconds = 30000,
                MaxExportBatchSize = 512,
            };
        })
        .Build();
    }

我想 post 解决这类问题。

出现这些问题的原因是,在某些情况下,应用程序可能会在进程完全完成之前关闭。一个解决方案是 using 并确保在所有有效关闭之前全部完成。

您可以在此处阅读更多相关信息 https://github.com/open-telemetry/opentelemetry-dotnet/issues/2758