Solucionar problemas com consultas de diagnóstico
APLICA-SE A: NoSQL MongoDB Cassandra Gremlin Tabela
Neste artigo, abordamos como escrever consultas simples para ajudar a solucionar problemas com sua conta do Azure Cosmos DB usando logs de diagnóstico enviados para tabelas AzureDiagnostics (legado) e específicas de recursos (visualização).
Para tabelas de Diagnóstico do Azure, todos os dados são gravados em uma única tabela e os usuários precisam especificar qual categoria desejam consultar.
Para tabelas específicas de recursos, os dados são gravados em tabelas individuais para cada categoria do recurso (não disponível para API de tabela). Recomendamos esse modo, pois facilita muito o trabalho com os dados, fornece melhor capacidade de descoberta dos esquemas e melhora o desempenho na latência de ingestão e nos tempos de consulta.
Consultas comuns
Aqui está uma lista de consultas comuns de solução de problemas.
Consulta de operações que estão demorando mais de 3 milissegundos para serem executadas
Encontre operações com duração superior a 3 milissegundos.
AzureDiagnostics
| where toint(duration_s) > 3 and ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| summarize count() by clientIpAddress_s, TimeGenerated
Consulta de agentes de usuário que estão executando operações
Encontre agentes de usuário associados a cada operação.
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| summarize count() by OperationName, userAgent_s
Consulta para operações de longa duração
Encontre operações que foram executadas por um longo tempo, binbinando seu tempo de execução em intervalos de cinco segundos.
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| project TimeGenerated , duration_s
| summarize count() by bin(TimeGenerated, 5s)
| render timechart
Obter estatísticas de chave de partição para avaliar a distorção nas três principais partições de uma conta de banco de dados
Meça a inclinação obtendo estatísticas comuns para partições físicas.
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="PartitionKeyStatistics"
| project SubscriptionId, regionName_s, databaseName_s, collectionName_s, partitionKey_s, sizeKb_d, ResourceId
Obtenha as taxas de solicitação para consultas caras
Meça a taxa de solicitação (em RUs) para as maiores consultas.
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
Descubra quais operações estão tomando mais RU/s
Classifique as operações pela quantidade de RU/s que estão usando.
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)
Obter todas as consultas que estão consumindo mais de 100 RU/s
Encontre consultas que consomem mais RU/s do que uma quantidade de linha de base.
Esta consulta junta-se aos dados de DataPlaneRequests
e 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
Obter as taxas de solicitação e a duração de execução de uma consulta
Obtenha estatísticas tanto na taxa de solicitação quanto na duração de uma consulta específica.
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)
Obter a distribuição para diferentes operações
Operações de grupo pela distribuição de recursos.
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2h)
| summarize count = count() by OperationName, requestResourceType_s, bin(TimeGenerated, 1h)
Obter a taxa de transferência máxima que uma partição consumiu
Obtenha a taxa de transferência máxima para uma partição física.
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2h)
| summarize max(requestCharge_s) by bin(TimeGenerated, 1h), partitionId_g
Obter informações sobre o consumo de chaves de partição RU/s por segundo
Meça o consumo de RU/s por segundo por chave de partição.
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
Obter cobrança de solicitação para uma chave de partição específica
Meça a cobrança de solicitação por chave de partição.
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DOCUMENTDB" and Category == "PartitionKeyRUConsumption"
| where parse_json(partitionKey_s)[0] == "2"
Obtenha as principais chaves de partição com a maioria dos RU/s consumidos em um período específico
Classifique as chaves de partição com base no consumo da unidade de solicitação dentro de uma janela de tempo.
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
Obter logs para as chaves de partição cujo tamanho de armazenamento é maior que 8 GB
Encontre logs para chaves de partição filtradas pelo tamanho de armazenamento por chave de partição.
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="PartitionKeyStatistics"
| where todouble(sizeKb_d) > 800000
Obter latências P99 ou P50 para operações, cobrança de solicitação ou o comprimento da resposta
Medir o desempenho para; latência de operação, uso de RU/s e comprimento de resposta.
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)
Obter logs de plano de controle
Obter plano de controle longo usando ControlPlaneRequests
.
Gorjeta
Lembre-se de ativar o sinalizador descrito em Desabilitar acesso de gravação de metadados baseado em chave e executar as operações usando o Azure PowerShell, a CLI do Azure ou o Gerenciador de Recursos do Azure.
AzureDiagnostics
| where Category =="ControlPlaneRequests"
| summarize by OperationName
Próximos passos
- Para obter mais informações sobre como criar configurações de diagnóstico para o Azure Cosmos DB, consulte Criando configurações de diagnóstico.
- Para obter informações detalhadas sobre como criar uma configuração de diagnóstico usando o portal do Azure, CLI ou PowerShell, consulte Criar configuração de diagnóstico para coletar logs e métricas da plataforma no Azure.