有一个非常适合跟踪的工作环境,OpenTelemetry对抗Jaeger tracing。我从某种程度上读到,进程的Batch
比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();
}
我想我发布了这类问题的解决方案。
出现这些问题的原因是,在某些情况下,应用程序可能会在流程完全完成之前关闭。对此的解决方案是using
,并确保在所有操作对闭包有效之前完成所有操作。
你可以在这里阅读更多关于它的信息https://github.com/open-telemetry/opentelemetry-dotnet/issues/2758