调用 TelemetryClient.TrackEvent() 后是否能保证 Azure Application Insights 自定义事件的传递?

Yet*_*eti 1 azure azure-application-insights

Microsoft 声明 Application Insights 的 SLA 是:

我们保证Application Insights服务的数据延迟99.9%的时间不超过两小时。

https://azure.microsoft.com/en-us/support/legal/sla/application-insights/v1_0/

对于 SLA 之外的 0.1% 时间,当 TelemetryClient.TrackEvent() 在我的代码中执行时,Microsoft 是否保证该事件肯定会在某个时间点发布(只是不是在 2 小时内)?或者事件会在这 0.1% 时间内丢失吗?

Joh*_*ner 5

不,仅仅调用 TrackEvent 并不能保证它被发布,原因有很多:

  1. 在过程的任何级别进行采样。请参阅https://learn.microsoft.com/en-us/azure/application-insights/app-insights-sampling?toc=/azure/azure-monitor/toc.json但一般来说,如果启用了采样,则有 %您的活动可能会合并在一起。有多种方法可以找到这些事件,但一般来说,如果您trackMessage在紧密循环中调用相同内容 1000 次,SDK 可能会对其进行采样并发送 itemCount 设置为 1000 的单个事件。

  2. 事件的内容可能无效(负载过大、超出字段大小阈值、太多自定义属性、太多自定义指标等)

  3. 事件的时间可能无效。过去太远的事件(>48 小时前?)或太远的未来(不确定那里的确切时间,但允许一些未来时间来考虑时钟偏差/漂移)

  4. 上限 - 您可能会超出每月允许发送的金额 - 请参阅https://learn.microsoft.com/en-us/azure/application-insights/app-insights-pricing,在回答此问题时状态:

    最大上限为 1,000 GB/天,除非您为高流量应用程序请求更高的上限。

  5. 限制 - 您可能会超过每秒允许的事件数/等 - 请参阅https://learn.microsoft.com/en-us/azure/application-insights/app-insights-pricing,在回答此问题时指出:

    节流将数据速率限制为每秒 32,000 个事件,每个检测密钥的平均时间超过 1 分钟。

  6. 网络问题等。在各种 sdk 上调用 track 并不能保证数据被接受或重试。有些 SDK 会尝试重试,有些则不会。

  7. 您的应用程序可能会在调用track和创建/完成应用程序见解的实际连接之间关闭/崩溃。

  8. 其他随机问题、服务问题、其他相关服务的停机时间等导致了 0.1% 的丢失数据。我不确定是否有任何 APM/遥测服务可以保证其 100% 接受并处理您发送的事件。(100% - 99.9% 不是 0.01%,而是 0.1%。存在 10 倍的差异。)