我应该使用什么遥测通道? InMemoryChannel 还是 ServerTelemetryChannel?

What Telemetry Channel I should use? InMemoryChannel or ServerTelemetryChannel?

所以我正在创建将在 webapp 后台处理的 webjob。我已经使用 InMemoryChannel 配置了我的 webjobs,因为我认为不会出现断电问题或应用服务内存延迟等问题。在 ServerTelemetryChannel 中,它将数据存储在磁盘上,在这种情况下,当托管在 App Service 上时,这是不可能的。我的想法正确吗?当程序用作 webjob 时,我是否也应该继续使用 InMemoryChannel 进行生产?

现在使用 InMemoryChannel,当我 运行 控制台应用程序在我的机器上而不是在 webjob 上时,我在 Application Insight 上正确接收日志有一点延迟。

InMemoryChannel or ServerTelemetryChannel?

InMemoryChannel

  • Microsoft.ApplicationInsights.Channel.InMemoryChannel 是默认使用的轻量级松散遥测通道。
  • 每隔SendingInterval(默认为30秒)或item数量超过MaxTelemetryBufferCapacity(默认为500)时,会批量发送数据
  • 如果遥测发送失败,将不会重试。
  • InMemory channel 非常适合 short-running 同步刷新是理想的应用程序。
  • 当未指定任何其他内容时,SDK 将使用此通道,它是更大的 Microsoft.ApplicationInsights NuGet 包的一部分。

ServerTelemetryChannel

  • 由于这些重试功能和本地磁盘存储,此渠道被认为更可靠,建议用于所有生产应用程序。

What Telemetry Channel I should use?

    对于涉及 long-running 应用程序的大多数生产场景,建议使用
  • ServerTelemetryChannel
  • 如果您在程序即将关闭的情况下使用此通道,我们建议您在调用 Flush() 后创建一些延迟。

如果您需要进行同步刷新,InMemoryChannel 是最佳选择。

Can you suggest me any good practice to apply ServerTelemetryChannel in my project.

参考Configuration in code for .NET/.NET Core console applications