C# 如何测量每个web请求的Azure CosmosDB请求单位?

C# 如何测量每个web请求的Azure CosmosDB请求单位?,c#,asp.net-core,azure-cosmosdb,azure-application-insights,C#,Asp.net Core,Azure Cosmosdb,Azure Application Insights,在ASP.NET核心Web应用程序中,我想测量在单个Web请求中花费了多少请求单元。有了这些信息,我可以识别“昂贵”的电话,并寻求优化它们 我知道如何从单个CosmosDB Rest调用中选择请求单位计数。但这是一个分层应用程序,其中与ComosDB交互的持久性级别无权访问ASP.NET核心中的请求对象 有没有办法选择某种请求id?我想知道Application Insights如何跟踪特定web请求的依赖内部调用 或者,是否有办法在Application Insights中获取此信息?这可在C

在ASP.NET核心Web应用程序中,我想测量在单个Web请求中花费了多少请求单元。有了这些信息,我可以识别“昂贵”的电话,并寻求优化它们

我知道如何从单个CosmosDB Rest调用中选择请求单位计数。但这是一个分层应用程序,其中与ComosDB交互的持久性级别无权访问ASP.NET核心中的请求对象

有没有办法选择某种请求id?我想知道Application Insights如何跟踪特定web请求的依赖内部调用


或者,是否有办法在Application Insights中获取此信息?

这可在CosmosDB REST API响应的标题中找到。您需要在web调用和CosmosDB操作之间创建关联,然后进行聚合

:

x-ms-request-charge这是规范化请求的数量,也称为。 为操作请求单位(RU)。有关详细信息,请参阅 请求Azure Cosmos数据库中的单位


这取决于多种因素,包括您使用的SDK

如果您使用的是默认的Cosmos DB SDK(也称为v2 SDK),那么(假设您启用了Application Insights支持),Cosmos DB将只记录它的依赖项调用(如果您使用)。TCP模式不会被应用程序洞察捕获。这意味着您要么使用性能不好的HTTPS,要么编写自定义代码

如果您正在使用,那么它将与一个通用EventSource一起开箱即用,该EventSource将每个调用作为一个依赖项进行跟踪,而不管连接类型如何,它还将收集多个指标,如RUs等。您需要引用nuget软件包并初始化AppInsightsTelemetryModule,如下所示:

AppInsightsTelemetryModule.Instance.Initialize(TelemetryConfiguration.Active)

或者使用国际奥委会的替代方案:

services.AddSingleton(AppInsightsTelemetryModule.Instance)

这将为您提供每个操作的日志记录,包括以下详细指标(包括请求费用):

然后,您可以使用类似这样的查询来查看峰值并进一步调查,或者只查询具有超过阈值的Cosmos依赖项的请求

dependencies
| where type contains "Cosmos" and customDimensions.RequestCharge != ""
| summarize sum(toint(customDimensions.RequestCharge)) by bin(timestamp, 1m) 

PS:如果不需要,您不必使用
CosmosStore
。使用
CosmonautClient
而不是
DocumentClient
也将完成日志记录工作。

如果使用AI遥测客户端跟踪度量,操作id将附加到它们。然后你可以在AI的分析中对它们进行分组,以获得每项操作的统计数据。你在使用哪个SDK?默认的v2、Cosmonaut或EF Core?@NickChapsas我使用默认的.net SDK。连接模式为TCP,因此默认的应用程序洞察密度跟踪不起作用(仅限HTTP支持),谢谢,但这还不能解决我的问题。我有一个web请求,可能还有多个CosmosDB请求。我只是不知道如何把它们联系起来。发出Cosmos请求的代码无法访问发出请求的对象。您需要传递相关id并自行聚合,API标头提供最低级别的粒度。谢谢,我来看看宇航员客户端。@RalfBönning谢谢:)@NickChapsas宇航员客户端和宇宙存储之间的确切区别是什么?我更想知道在我的场景中使用哪一个?CosmosStore是您需要处理的高级类。CosmosStore使用CosmonautClient进行所有必要的日志记录和优化,但您不必真正处理它。