繁体   English   中英

Application Insights Telemetry:您可以跟踪跟踪/事件/等吗? 异步?

[英]Application Insights Telemetry: can you track traces/events/etc. asynchronously?

我是 Azure Application Insights 的长期用户,并且在我编写的每个企业应用程序中都大量使用TelemetryClientTrackTrace()TrackException()

一直困扰我的一件事是这些方法是同步的。 由于这些方法与外部 API 通信,因此似乎始终存在阻塞风险; 例如,如果网络出现故障/缓慢,或者 App Insights 自己的 API 出现问题。

在这种情况下,整个应用程序可能会挂起(至少在理论上)。 在这种情况下,如果它们曾经发生过,我希望我的应用程序能够继续运行,尽管未能在合理的时间范围内进行跟踪。

我在网上做了一些研究,似乎没有内置的方式来异步调用这些方法。 你知道有什么方法可以做到这一点吗? (或者..... App Insights API 是否具有自动防止此类事情的幕后黑盒方式?)

当然,我知道我总是可以将我的调用包装在一个Task中(例如, await Task.Run(() => myTelemetryClient.TrackTrace("my message")); (或者编写一个异步扩展方法来执行此操作)。我也可以使用计时器来取消这样的请求。但如果有更集成的方法来执行此操作会很好。

谁能启发我? 这真的是我应该关注的潜在问题吗? 或者我只是在倾斜风车?

更新:我刚刚看到这个,这表明 AI 确实“在幕后”以异步方式处理跟踪。 但是,考虑到异步操作确实需要在调用堆栈上下一直异步以防阻塞这一老生常谈,这怎么可能可靠呢?

这真的是我应该关注的潜在问题吗?

否。TrackABC() 方法均未与任何外部 API 通信或执行任何需要很长时间的操作。 Track() 运行所有遥测初始化程序,然后将项目排队到内存队列中。

虽然内置遥测初始化器旨在快速完成并且不进行 I/O 或 HttpCalls,但如果用户添加了一个遥测初始化器,它会发出 http 调用或类似的东西,那么是的,它会影响你的 Track() 调用。 但是在正常使用 TelemetryInitializers 的情况下,这应该不是问题。

如果它类似于 JS API,跟踪事件将被放置在一个队列中,然后独立于 TrackXXX 方法出列和发送(可能以可配置的间隔分批发送)。 事件入队可以是同步的,但进程的发送端可以异步操作。 队列将两者相互分离。 – 消费者

我认为@spender 回答了我的问题! 谢谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM