Как измерить количество единиц запроса Azure CosmosDB на веб-запрос? - PullRequest
1 голос
/ 14 марта 2019

В базовом веб-приложении ASP.NET я хочу измерить, сколько единиц запроса было потрачено в одном веб-запросе. С помощью этой информации я смог определить «дорогие» звонки и искать способы их оптимизации.

Я знаю, как настроить счетчик запросов на один вызов CosmosDB Rest. Но это многоуровневое приложение, в котором уровень персистентности, взаимодействующий с ComosDB, не имеет доступа к объекту запроса в ASP.NET Core.

Есть ли способ как-то получить какой-то идентификатор запроса? Интересно, как Application Insights отслеживает, какие внутренние вызовы зависят от конкретного веб-запроса.

Или есть ли способ получить эту информацию в Application Insights?

Ответы [ 2 ]

2 голосов
/ 14 марта 2019

Это зависит от нескольких факторов, в том числе от того, какой SDK вы используете.

Если вы используете SDK Cosmos DB по умолчанию, также известный как v2 SDK, то (при условии, что вы включили поддержку Application Insights) Cosmos DB будет регистрировать только журналэто вызовы зависимостей, если вы используете HTTP / HTTPS соединение .Режим TCP не будет зафиксирован Application Insights.Это означает, что вам придется либо использовать HTTPS, что плохо с точки зрения производительности, либо кодировать что-то нестандартное.

Если вы используете Cosmonaut , тогда он выходит из коробки с EventSource общего назначения.который отслеживает каждый вызов как зависимость независимо от типа соединения, а также собирает несколько метрик, таких как RU и многое другое.Вам нужно сослаться на пакет nuget Cosmonaut.ApplicationInsights и инициализировать AppInsightsTelemetryModule следующим образом:

AppInsightsTelemetryModule.Instance.Initialize(TelemetryConfiguration.Active);

или использовать альтернативу IoC:

services.AddSingleton(AppInsightsTelemetryModule.Instance);

Это позволит вам регистрировать каждое действие с подробными показателями, такими как следующие (включая плату за запрос):

enter image description here

Затем вы можете использовать запрос, подобный этому, чтобы увидеть всплески и дальнейшие исследования, или просто запросить запросы с зависимостями Cosmos, которые превышают пороговое значение.

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

PS: у вас нетиспользовать CosmosStore, если вам это не нужно.Использование CosmonautClient вместо DocumentClient также будет выполнять регистрацию.

0 голосов
/ 14 марта 2019

Это доступно в заголовке ответа CosmosDB REST API.Вам нужно будет создать корреляцию между вашим веб-вызовом и операциями CosmosDB, а затем агрегировать.

Из документов :

x-ms-request-charge Это количество нормализованных запросов, или блоков запросов (RU) для операции.Дополнительные сведения см. В разделе «Запрос единиц измерения в базе данных Azure Cosmos».

...