针对Jaeger的C#OpenTelemetry可以在Simple中工作,但不能在Batch中工作



有一个非常适合跟踪的工作环境,OpenTelemetry对抗Jaeger tracing。我从某种程度上读到,进程的BatchSimple更可取。然而,在.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();
}

我想我发布了这类问题的解决方案。

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

你可以在这里阅读更多关于它的信息https://github.com/open-telemetry/opentelemetry-dotnet/issues/2758

相关内容

  • 没有找到相关文章

最新更新