在不同层的 Application Insights 中跟踪遥测
Tracing Telemetry in Application Insights across different layers
我目前正在使用 App insights 来记录异常和跟踪。
我的项目是 Asp.net 基于 MVC 的,我有 3 个不同的层。一个是前端(带 angular 的 MVC),其余两个是 Web API 服务层。
我为所有 3 层启用了默认遥测日志记录,它正在记录所有 operations.My 问题是我无法关联所有 3 层上的操作。我怎样才能做到这一点。我读过一个选项是在 Telemetry Initializer 上设置自定义 属性(会话中的用户 ID),但我的 Web API 层上没有该信息,因为它们是无状态的。
我能想到的一个解决方案:
您可以为 MVC 层中的每个操作生成一个内部标识符(例如 GUID),将其添加为自定义参数(使用遥测初始化程序)并将相同的 ID 传递给 Web API 层您拨打的每个 API 电话。对于这些 Web API 层发送的每个遥测事件,以与上述相同的方式将标识符添加为自定义参数。
这样您就可以根据您的内部 ID 关联事件。
除了已经提到的备选方案之外,已经有 partial support 通过 ParentOperationId 和 OperationId 上下文字段将此内置到 AI 中。但是,目前还没有任何可以通过 Http 调用自动传播字段的方法。
应该可以让你的代码在发出传出 HTTP 调用时添加必要的 headers,如果你使用正确的,并且另一端有必要的遥测初始化程序,那应该会更好。
我目前正在使用 App insights 来记录异常和跟踪。 我的项目是 Asp.net 基于 MVC 的,我有 3 个不同的层。一个是前端(带 angular 的 MVC),其余两个是 Web API 服务层。 我为所有 3 层启用了默认遥测日志记录,它正在记录所有 operations.My 问题是我无法关联所有 3 层上的操作。我怎样才能做到这一点。我读过一个选项是在 Telemetry Initializer 上设置自定义 属性(会话中的用户 ID),但我的 Web API 层上没有该信息,因为它们是无状态的。
我能想到的一个解决方案:
您可以为 MVC 层中的每个操作生成一个内部标识符(例如 GUID),将其添加为自定义参数(使用遥测初始化程序)并将相同的 ID 传递给 Web API 层您拨打的每个 API 电话。对于这些 Web API 层发送的每个遥测事件,以与上述相同的方式将标识符添加为自定义参数。
这样您就可以根据您的内部 ID 关联事件。
除了已经提到的备选方案之外,已经有 partial support 通过 ParentOperationId 和 OperationId 上下文字段将此内置到 AI 中。但是,目前还没有任何可以通过 Http 调用自动传播字段的方法。
应该可以让你的代码在发出传出 HTTP 调用时添加必要的 headers,如果你使用正确的,并且另一端有必要的遥测初始化程序,那应该会更好。