Azure Cosmos DB : HTTP 400 in Application Insights

标签 azure asp.net-core azure-cosmosdb azure-application-insights

我们在 Azure 应用服务(某些 Web API)中使用 Application Insights,该服务查询 .NET Core 2.1 中的 Azure Cosmos DB。查询是使用 Nuget 包 Microsoft.Azure.DocumentDB.Core 1.10.0 中的 DocumentClient 对象完成的,在此客户端上我们调用 CreateDocumentQuery<T>(Uri, FeedOptions)扩展方法。

现在从用户的角度来看,查询似乎工作正常。然而,通过查看 Application Insights,我们发现了大量与 Cosmos DB 相关的依赖项故障。我将尝试可视化我在 Azure 门户中看到的内容:

--------------------------------------------------------------------------------------------------
| Event                                                                        | Res. | Duration |
--------------------------------------------------------------------------------------------------
| ▼ web-api-resource-name POST api-endpoint-name                               | 200  | 149.1 ms |
--------------------------------------------------------------------------------------------------
|   AZURE DOCUMENTDB cosmosdb-name.documents.azure.com | Create/query document | 400  |     4 ms |
--------------------------------------------------------------------------------------------------
|   AZURE DOCUMENTDB cosmosdb-name.documents.azure.com | Query documents       | 200  |     7 ms |
--------------------------------------------------------------------------------------------------
|   AZURE DOCUMENTDB cosmosdb-name.documents.azure.com | Create/query document | 400  |     4 ms |
--------------------------------------------------------------------------------------------------
|   AZURE DOCUMENTDB cosmosdb-name.documents.azure.com | Query documents       | 200  |     5 ms |
--------------------------------------------------------------------------------------------------
|   AZURE DOCUMENTDB cosmosdb-name.documents.azure.com | Create/query document | 400  |     4 ms |
--------------------------------------------------------------------------------------------------
|   AZURE DOCUMENTDB cosmosdb-name.documents.azure.com | Query documents       | 200  |     6 ms |
--------------------------------------------------------------------------------------------------
|   AZURE DOCUMENTDB cosmosdb-name.documents.azure.com | Query documents       | 200  |     6 ms |
--------------------------------------------------------------------------------------------------
|   AZURE DOCUMENTDB cosmosdb-name.documents.azure.com | Query documents       | 200  |    12 ms |
--------------------------------------------------------------------------------------------------

包含 HTTP 400 结果的行在 Azure 门户中以红色突出显示,并且显然是显示依赖项失败的行。现在,由于整个请求似乎导致 HTTP 200,并且没有错误返回到 Web api,所以我只能认为这是一些内部 Cosmos DB 查询。由于单个请求有多个条目,我猜测这可能与某些重试策略有关。

但是,由于我似乎找不到有关错误请求的任何进一步信息:任何人都可以阐明这个问题吗?

更新:以下是 Azure 门户中的 Application Insights View 的屏幕截图。持续时间值略有不同,但问题相同。

Screenshot of Application Insights view

遗憾的是,包含创建/查询文档查询文档文本的列在此处隐藏,因为在 Azure 门户中,您必须水平滚动才能查看该文本信息。

提前致谢,托比

最佳答案

只要查询成功就可以忽略400。他们是预料之中的。

Cosmos 服务将针对单个服务器分区(或分片)执行查询。跨分区查询预计由 SDK 处理,服务器拒绝 400。您可以通过 FeedOptions.MaxDegreeOfParallism 控制 SDK 执行的并发度。

关于Azure Cosmos DB : HTTP 400 in Application Insights,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50909769/

相关文章:

azure - 命名架构在 Azure SQL 中不起作用

azure - 使用 azure webjobs 和 Hangfre 后台作业之间的区别

c# - 是否可以配置 Azure C# 函数 DocumentDB 属性参数?

c# - 必须在 cosmosdb 删除操作中为此操作提供 PartitionKey 值

azure - 如果 Web 作业在多个实例上运行,是否会运行相同的作业?

azure - 了解 DocumentDB 响应 header 中的 x-ms-resource-usage

c# - 当为密码创建哈希+盐时,有没有办法避免将盐保存为数据库中的单独字段

ajax - 使用 AJAX 时的神秘 401 挑战

c# - 如何修复过时的 ILoggerFactory 方法?

azure - 重新触发 Azure Cosmos DB 触发器