为多个客户端服务的 Web api 的 Application Insights 策略
Application Insights strategies for web api serving multiple clients
我们有一个后端 API、运行 ASP.Net 核心,有两个前端:一个 SPA 网站 (Vuejs) 和一个渐进式网页(针对移动用户) .前端基本上只是客户端代码,所有服务都在不同的域中。我们不使用 cookie,因为身份验证使用不记名令牌。
我们一直在使用 Application Insights 进行监控,但由于文档对我们的情况的描述不是很清楚,我想获得更多关于什么是最佳策略和可能性的信息:
- 在没有 cookie 的情况下跟踪用户和指标,例如在应用程序中单击按钮调用服务器,实体 Framework/SQL 查询(我看到目前不支持此功能,How to enable dependency tracking with Application Insights in an Asp.Net Core project),处理数据并在客户端呈现结果。
- 在 Application Insights 查询中以简单的方式将来自移动和标准 Web 的调用分开。在最初显示的标准图表中以任何方式显示这一点都是有益的。
- 确保我们的策略也适用于其他外部客户端访问 API 的情况,我们应该能够轻松识别这些客户端,并查看它们为系统创建了多少负载。
- 用最少的代码完成上述所有操作。
如果您想了解其中任何一个的细节,这可能值得提出几个独立的问题。 (通常你的最后一个项目符号总是暗示的,不是吗?:))
到目前为止你尝试了什么?不过,大多数 "best way for you" 类型的事情都会成为意见。
一般答案:
- 回复:跟踪用户...
如果您已经将用户 info/auth 用于其他目的,您只需使用传入请求的遥测上下文中的信息设置各种 context.user.*
字段。使用相同遥测上下文发生的所有其他遥测随后将初始化您已有的任何用户信息。
- 回复:将移动电话和标准电话分开...
如果您已经以不同的方式执行此操作 services/domains,并且您已经在两个地方使用相同的检测密钥,那么 domain/host 页面浏览量或请求的信息已经存在,您可以 filter/group 在门户中对此进行分析,或者在分析门户中进行自定义查询以进行分析。如果您知道它是哪个站点而不管主机,您可以将其添加为遥测上下文中的自定义属性,您也可以这样做以避免处理主机信息。
- 回复:外部呼叫者通过 api
类似地,如果您已经公开 api 并使用身份验证,您应该(理想情况下)已经知道入站呼叫者是谁,并且您也可以在自定义属性中设置该信息。
一般来说、custom properties(字符串:字符串键值对)和自定义指标(字符串:双键值对)是你的朋友。您可以在上下文中设置它们,以便在该上下文中生成的所有事件都继承相同的属性,您可以在单个 TrackEvent
(或任何其他 Track*
调用)上明确设置它们以发送特定的 properties/metrics 与任何单个事件。
您还可以使用 telemetry initializers 来增强或过滤任何自动生成的遥测数据(例如服务器端的请求或依赖项,或页面视图和 ajax 依赖项客户端)
我们有一个后端 API、运行 ASP.Net 核心,有两个前端:一个 SPA 网站 (Vuejs) 和一个渐进式网页(针对移动用户) .前端基本上只是客户端代码,所有服务都在不同的域中。我们不使用 cookie,因为身份验证使用不记名令牌。
我们一直在使用 Application Insights 进行监控,但由于文档对我们的情况的描述不是很清楚,我想获得更多关于什么是最佳策略和可能性的信息:
- 在没有 cookie 的情况下跟踪用户和指标,例如在应用程序中单击按钮调用服务器,实体 Framework/SQL 查询(我看到目前不支持此功能,How to enable dependency tracking with Application Insights in an Asp.Net Core project),处理数据并在客户端呈现结果。
- 在 Application Insights 查询中以简单的方式将来自移动和标准 Web 的调用分开。在最初显示的标准图表中以任何方式显示这一点都是有益的。
- 确保我们的策略也适用于其他外部客户端访问 API 的情况,我们应该能够轻松识别这些客户端,并查看它们为系统创建了多少负载。
- 用最少的代码完成上述所有操作。
如果您想了解其中任何一个的细节,这可能值得提出几个独立的问题。 (通常你的最后一个项目符号总是暗示的,不是吗?:))
到目前为止你尝试了什么?不过,大多数 "best way for you" 类型的事情都会成为意见。
一般答案:
- 回复:跟踪用户...
如果您已经将用户 info/auth 用于其他目的,您只需使用传入请求的遥测上下文中的信息设置各种 context.user.*
字段。使用相同遥测上下文发生的所有其他遥测随后将初始化您已有的任何用户信息。
- 回复:将移动电话和标准电话分开...
如果您已经以不同的方式执行此操作 services/domains,并且您已经在两个地方使用相同的检测密钥,那么 domain/host 页面浏览量或请求的信息已经存在,您可以 filter/group 在门户中对此进行分析,或者在分析门户中进行自定义查询以进行分析。如果您知道它是哪个站点而不管主机,您可以将其添加为遥测上下文中的自定义属性,您也可以这样做以避免处理主机信息。
- 回复:外部呼叫者通过 api
类似地,如果您已经公开 api 并使用身份验证,您应该(理想情况下)已经知道入站呼叫者是谁,并且您也可以在自定义属性中设置该信息。
一般来说、custom properties(字符串:字符串键值对)和自定义指标(字符串:双键值对)是你的朋友。您可以在上下文中设置它们,以便在该上下文中生成的所有事件都继承相同的属性,您可以在单个 TrackEvent
(或任何其他 Track*
调用)上明确设置它们以发送特定的 properties/metrics 与任何单个事件。
您还可以使用 telemetry initializers 来增强或过滤任何自动生成的遥测数据(例如服务器端的请求或依赖项,或页面视图和 ajax 依赖项客户端)