簡體   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