Поделиться через


Устранение проблем с помощью диагностических запросов

Область применения: Nosql Mongodb Кассандра Гремлин Таблица

В этой статье описано, как создавать простые запросы, чтобы помочь устранить неполадки с учетной записью Azure Cosmos DB с помощью журналов диагностика, отправленных в таблицы AzureDiagnostics (устаревшая версия) и таблицы с определенными ресурсами (предварительная версия).

Для таблиц Диагностика Azure все данные записываются в одну таблицу, и пользователям необходимо указать, какую категорию они хотели бы запрашивать.

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

Стандартные запросы

Ниже приведен список распространенных запросов по устранению неполадок.

Запрос операций, которые выполняются дольше 3 миллисекунда

Найдите операции с длительностью более 3 миллисекунд.

AzureDiagnostics 
| where toint(duration_s) > 3 and ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" 
| summarize count() by clientIpAddress_s, TimeGenerated

Запрос агентов пользователей, выполняющих операции

Поиск агентов пользователей, связанных с каждой операцией.

AzureDiagnostics 
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" 
| summarize count() by OperationName, userAgent_s

Запрос длительных операций

Найдите операции, которые выполнялись в течение длительного времени, забинив их среду выполнения на пять секунд.

AzureDiagnostics 
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" 
| project TimeGenerated , duration_s 
| summarize count() by bin(TimeGenerated, 5s)
| render timechart

Получение статистики ключа секции для оценки отклонений между тремя разделами для учетной записи базы данных

Измеряйте отклонение, получая общую статистику для физических секций.

AzureDiagnostics 
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="PartitionKeyStatistics" 
| project SubscriptionId, regionName_s, databaseName_s, collectionName_s, partitionKey_s, sizeKb_d, ResourceId 

Получение расходов на запрос для дорогостоящих запросов

Измеряйте плату за запрос (в единицах ЕЗ) для крупнейших запросов.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" and todouble(requestCharge_s) > 10.0
| project activityId_g, requestCharge_s
| join kind= inner (
AzureDiagnostics
| where ResourceProvider =="MICROSOFT.DOCUMENTDB" and Category == "QueryRuntimeStatistics"
| project activityId_g, querytext_s
) on $left.activityId_g == $right.activityId_g
| order by requestCharge_s desc
| limit 100

Поиск операций, которые принимают большинство единиц запросов в секунду

Сортируйте операции по количеству единиц запросов в секунду, которые они используют.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2h) 
| summarize max(responseLength_s), max(requestLength_s), max(requestCharge_s), count = count() by OperationName, requestResourceType_s, userAgent_s, collectionRid_s, bin(TimeGenerated, 1h)

Получение всех запросов, потребляющих более 100 ЕЗ/с

Найдите запросы, которые потребляют больше ЕЗ/с, чем базовая сумма.

Этот запрос присоединяется к данным из DataPlaneRequests и QueryRunTimeStatistics.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" and todouble(requestCharge_s) > 100.0
| project activityId_g, requestCharge_s
| join kind= inner (
        AzureDiagnostics
        | where ResourceProvider =="MICROSOFT.DOCUMENTDB" and Category == "QueryRuntimeStatistics"
        | project activityId_g, querytext_s
) on $left.activityId_g == $right.activityId_g
| order by requestCharge_s desc
| limit 100

Получение расходов на запрос и длительность выполнения запроса

Получите статистику как в плате за запрос, так и в течение определенного запроса.

AzureDiagnostics
| where TimeGenerated >= ago(24hr)
| where Category == "QueryRuntimeStatistics"
| join (
AzureDiagnostics
| where TimeGenerated >= ago(24hr)
| where Category == "DataPlaneRequests"
) on $left.activityId_g == $right.activityId_g
| project databasename_s, collectionname_s, OperationName1 , querytext_s,requestCharge_s1, duration_s1, bin(TimeGenerated, 1min)

Получение распределения для различных операций

Групповые операции по распределению ресурсов.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2h) 
| summarize count = count()  by OperationName, requestResourceType_s, bin(TimeGenerated, 1h) 

Получение максимальной пропускной способности, используемой секцией

Получение максимальной пропускной способности для физической секции.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2h) 
| summarize max(requestCharge_s) by bin(TimeGenerated, 1h), partitionId_g

Получение сведений о потреблении ключей секций в секунду

Измерение потребления единиц запросов в секунду на ключ секции.

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.DOCUMENTDB" and Category == "PartitionKeyRUConsumption" 
| summarize total = sum(todouble(requestCharge_s)) by databaseName_s, collectionName_s, partitionKey_s, TimeGenerated 
| order by TimeGenerated asc 

Получение платы за запрос для определенного ключа секции

Измерение затрат на запрос на ключ секции.

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.DOCUMENTDB" and Category == "PartitionKeyRUConsumption" 
| where parse_json(partitionKey_s)[0] == "2" 

Получение ключей верхнего раздела с большинством единиц запросов в секунду, используемых в определенный период

Сортировка ключей секций на основе потребления единиц запроса в течение периода времени.

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.DOCUMENTDB" and Category == "PartitionKeyRUConsumption" 
| where TimeGenerated >= datetime("11/26/2019, 11:20:00.000 PM") and TimeGenerated <= datetime("11/26/2019, 11:30:00.000 PM") 
| summarize total = sum(todouble(requestCharge_s)) by databaseName_s, collectionName_s, partitionKey_s 
| order by total desc

Получение журналов для ключей секций, размер хранилища которых превышает 8 ГБ

Поиск журналов для ключей секций, отфильтрованных по размеру хранилища на ключ секции.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="PartitionKeyStatistics"
| where todouble(sizeKb_d) > 800000

Получение задержки P99 или P50 для операций, оплаты запроса или длины ответа

Измерение производительности для; задержка операций, использование единиц запросов в секунду и длина ответа.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2d)
| summarize percentile(todouble(responseLength_s), 50), percentile(todouble(responseLength_s), 99), max(responseLength_s), percentile(todouble(requestCharge_s), 50), percentile(todouble(requestCharge_s), 99), max(requestCharge_s), percentile(todouble(duration_s), 50), percentile(todouble(duration_s), 99), max(duration_s), count() by OperationName, requestResourceType_s, userAgent_s, collectionRid_s, bin(TimeGenerated, 1h)

Получение журналов плоскости управления

Получение плоскости управления с длительным использованием ControlPlaneRequests.

Совет

Не забудьте включить флаг, описанный в разделе "Отключить доступ на основе ключей для записи метаданных" и выполнять операции с помощью Azure PowerShell, Azure CLI или Azure Resource Manager.

AzureDiagnostics 
| where Category =="ControlPlaneRequests"
| summarize by OperationName 

Следующие шаги