遥测客户端不会发送任何数据,除非调用刷新

本文关键字:数据 刷新 调用 任何 客户端 | 更新日期: 2023-09-27 17:56:47

我直接在我的代码中使用遥测客户端 (v0.17.0.576),看起来只有当我在最后手动调用 Flush 时,我才能将数据推送到 Azure,这感觉不对。我在这里错过了什么吗?

var configuration = TelemetryConfiguration.CreateDefault();
configuration.InstrumentationKey = "KEY";
var client = new TelemetryClient(configuration);
for (int i = 0; i < 10; i++)
{
   log.Information("Loop: {0} {1}", i, value);
   client.Track(new TraceTelemetry(value));
}
client.Flush();

遥测客户端不会发送任何数据,除非调用刷新

出于性能原因,应用程序见解 SDK 对遥测数据进行批处理,并按块发送。若要查看此操作的实际效果,可以将 Flush 调用替换为对 Thread.Sleep (70000) 的调用,一旦应用终止,你将看到上传到 AI 的检测。

补充马里

奥·赫沃特的答案。如果使用持久性通道:

TelemetryConfiguration.Active.TelemetryChannel = new PersistenceChannel();

Flush()是同步的(因此您不需要在一段时间内使线程休眠)。 它还具有将遥测数据保存到本地文件的优点,如果无法联系应用程序见解,则下次使用良好连接调用Flush()时将发送该文件。

Thread.sleep(30000) 对我有用,但刷新在应用程序中不起作用。我想使用 Flush() 方法,因为我无法让我的应用程序睡眠 30 秒。Flush() 方法是否与版本特定相关,或者我缺少其他内容?

我有控制台应用程序调用另一个控制台库

,它将进一步调用另一个具有遥测类的控制台库(即控制台应用程序 --> DLL --> DLL(具有遥测实现))。

不需要

刷新数据 - 除非应用程序在发送最后一个跟踪后直接结束。不幸的是,同花顺还不够,它不会阻止(*)。因此,建议同时进行刷新和五秒钟的等待。

(*) https://github.com/microsoft/ApplicationInsights-dotnet/issues/407