我正在寻找一种好方法来为我们的应用程序中的一些长时间运行的作业添加可观察性。
应用程序是 dotnet 8。
我们的应用程序有时会启动后台任务来执行一些集成工作,这些任务可能需要几个小时。
我已经在项目中安装了
Azure.Monitor.OpenTelemetry.AspNetCore
nuget 包。
据我所知,我无法在整个作业中使用单个跨度/活动,因为这样在完成之前不会发送任何内容。
我可以在跨度/活动中使用 ILogger,但随后它将受到全局日志级别的约束。
如果我使用“跨度事件”,那么在跨度完成之前它们不会被传输。
似乎无法为 Application Insights 导出器自定义采样率
到目前为止,你的结论是正确的,但恐怕对于大多数可观察性后端来说,目前这还不是一个很好解决的问题。
现在的最终答案是“多个跨度”。
将其视为消息传递。
您最终将得到一个分布式跟踪,其中没有一个跨度覆盖整个操作。
如果您需要查询开始/结束,您可以执行一些时髦的查询(取决于平台,但对于 kusto/Azure 监视器,您可以这样做,这似乎就是您正在做的事情),或者您可以向下传播开始时间使用行李的链条并将其添加到最后一个跨度。
有一些可观察性后端确实使这种查询变得更容易,请记住并非所有后端都是相同的,有些后端比其他后端更适合此类工作流程,所以这是您唯一的用例,也许可以考虑其他选项。