我正在寻找在 opentelemetry 的痕迹中添加自定义属性。我想添加会话值(例如唯一 ID)作为自定义属性以跟踪每个用户的每个痕迹。但是在启动时我无法访问会话。最后我的问题是 为什么我无法在启动中访问会话? 如果无法访问意味着如何实现上面在 opentelemetry 中以粗体字母提到的要求?
在 ASP.NET Core 中,
Startup
类配置服务和应用程序的请求管道。该会话在 Startup
中无法访问,因为此时尚未设置它。会话通常在请求管道运行后建立,这是在 Startup
配置完成之后。
会话状态是在 HTTP 请求的上下文中建立的。在启动配置期间,应用程序正在设置它将如何处理请求,但尚未发出任何请求。
但是,要将唯一用户标识符等自定义属性添加到 OpenTelemetry 跟踪中,您可以按照以下步骤操作:
1)创建一个在会话建立后运行的自定义中间件。在此中间件中,您可以访问会话值并设置自定义属性。
2) 使用可以访问
HttpContext
以及会话状态的遥测初始化程序,以通过会话信息丰富遥测。
3)如果您使用 MVC,您还可以使用操作过滤器将会话信息添加到遥测中。这将在会话数据可用的操作执行上下文中完成。
您可以参考此文档,它将帮助您了解如何管理会话状态:
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-7.0