Устранение проблем с помощью диагностических запросов
ПРИМЕНИМО К: 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
Дальнейшие действия
- Дополнительные сведения о создании параметров диагностики для Azure Cosmos DB см. в статье Создание параметров диагностики.
- Подробные сведения о создании параметра диагностики с помощью портал Azure, CLI или PowerShell см. в статье Создание параметра диагностики для сбора журналов платформы и метрик в Azure.