c# - 如何测量每个 Web 请求的 Azure CosmosDB 请求单位?
问题描述
在 ASP.NET Core Web 应用程序中,我想测量在单个 Web 请求中花费了多少请求单元。有了这些信息,我可以识别“昂贵”的调用并寻找优化它们。
我知道如何从单个 CosmosDB Rest 调用中选择请求单位计数。但这是一个分层应用程序,其中与 ComosDB 交互的持久性级别无法访问 ASP.NET Core 中的 Request-Object。
有没有办法以某种方式选择某种请求ID?我想知道 Application Insights 如何跟踪特定 Web 请求的相关内部调用。
或者有没有办法在 Application Insights 中获取这些信息?
解决方案
这取决于多种因素,包括您使用的 SDK。
如果您使用的是默认 Cosmos DB SDK(也称为 v2 SDK),那么(假设您启用了 Application Insights 支持)Cosmos DB 只会在您使用 HTTP/HTTPS 连接时记录它的依赖项调用。Application Insights 不会捕获 TCP 模式。这意味着您要么必须使用性能不佳的 HTTPS,要么必须编写自定义代码。
如果您使用的是Cosmonaut,那么它开箱即用,带有一个通用的 EventSource,无论连接类型如何,它都会将每个调用作为依赖项进行跟踪,并且它还收集多个指标,例如 RU 等等。您需要引用Cosmonaut.ApplicationInsights nuget 包并AppInsightsTelemetryModule
像这样初始化:
AppInsightsTelemetryModule.Instance.Initialize(TelemetryConfiguration.Active);
或使用以下 IoC 替代方案:
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
将完成日志记录工作。
推荐阅读
- excel - 验证员工姓名
- r - 如何复制数据框中的列?
- spring - 断开连接时停止消费者(Spring Boot + Kafka)
- bioinformatics - 在snakemake中跨多个子目录的多个文件上运行python脚本
- azure - Azure 门户无法在设备上加载
- godot - 如何在我的 Godot 游戏中添加《洛克人》、《塞尔达传说》和《银河战士》等游戏中的滑动过渡?
- angular - Angular 数据共享架构
- android - Android存根共享意图找不到匹配的意图
- python - pandas group by agg 根据模式在组内选择
- reactjs - 反应中的可见性传感器在移动设备上不起作用