Setup de monitoramento Cosmos
NoSqlStudio lê métricas Cosmos através de data sources em tiers. Esta página é o guia passo a passo para conectar cada tier. Escolha o caminho que combina com seu budget e necessidades de observabilidade.
Matriz de tiers
| Tier | Custo | Impacto em produção | Desbloqueia |
|---|---|---|---|
TIER C · ALWAYS-ON Local samples | US$ 0 | Nenhum | RU Budget (só app), Throttling RCA (429 de headers), heat Hot Partitions, Query Cost — tudo dos response headers capturados. Vê só tráfego do NoSqlStudio. |
TIER B · FREE Azure Monitor | US$ 0 | Nenhum — lê métricas de plataforma do ARM, nunca toca data plane do Cosmos. | RU Budget agregado, Throughput Optimizer, contagem de Throttling, Hot Partitions per PartitionKeyRangeId — cobre tráfego de produção. |
TIER A · PAID Log Analytics | ~US$ 2.50 / GB ingest + retention | Documentado como mínimo pela Microsoft; stream de ingestion roda continuamente. | KQL completo per-shape no app, pane Diagnostic Logs, Throttling RCA per-shape, recomendações de composite-index de traces de workload real. |
FREE — Azure Monitor + Local samples
Tempo de setup: ~10 min. Custo: US$ 0/mês. Impacto: zero em produção. Cobre RU Budget, Throughput Optimizer, contagem de Throttling, Hot Partitions (aggregate), Query Cost (in-app).
Parte A — portal Azure / CLI
1. Crie um Service Principal
Portal: Azure Active Directory → App registrations → New registration → nome nosqlstudio-cosmos-reader. Copie Application (client) ID, Directory (tenant) ID, e crie um Client Secret em Certificates & secrets.
Equivalente CLI:
az ad sp create-for-rbac \ --name nosqlstudio-cosmos-reader \ --role "Monitoring Reader" \ --scopes /subscriptions/<SUB_ID>/resourceGroups/<RG_NAME>
2. Atribua a role Monitoring Reader
Escopo mínimo: o resource group que contém a conta Cosmos. Se você quer cobrir múltiplas contas Cosmos em RGs diferentes, atribua no nível de subscription.
az role assignment create \ --assignee <APP_ID> \ --role "Monitoring Reader" \ --scope /subscriptions/<SUB_ID>/resourceGroups/<RG_NAME>
3. Copie o Resource ID do Cosmos
Formato: /subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.DocumentDB/databaseAccounts/<account>
az cosmosdb show -n <ACCOUNT_NAME> -g <RG_NAME> --query id -o tsv
Parte B — NoSqlStudio
- Conecte-se à sua conta Cosmos no NoSqlStudio.
- Abra Cosmos Optimizer (
Ctrl+Alt+Shift+You menu Tools). - Vá para o tab Cloud Credentials.
- Em TIER B · FREE — Azure Monitor, preencha: Resource ID, Tenant ID, Client ID, Client secret.
- Deixe Workspace ID (GUID) na seção TIER A vazio — você está optando por não usar o tier pago.
- Clique em Save credentials (encrypted).
Parte C — Verifique
Volte ao tab RU Budget. O banner de source-mode deve mostrar um chip verde Azure Monitor + o texto aggregate only — no per-shape breakdown. Clique em Refresh — números populam em 1-2 minutos (Azure pode demorar alguns minutos para métricas frescas ficarem disponíveis).
PAID — adicione Log Analytics
Tempo de setup: ~15 min adicionais. Custo: ~US$ 2.50/GB ingerido + ~US$ 0.10/GB-mês de retenção. Só faça isso se você precisar de granularidade per-shape — para 90% das investigações, Azure Monitor sozinho é suficiente.
Parte A — Crie um workspace Log Analytics
az monitor log-analytics workspace create \ -g <RG_NAME> -n nosqlstudio-cosmos-logs \ --retention-time 30 \ --location <REGION>
Parte B — Coloque cost guardrails ANTES de ativar logs
- Retenção curta: 30 dias mínimo na maioria dos tiers.
- Cap diário (ex.: 1 GB/dia): para ingestion se exceder — dados existentes ainda queryáveis.
- Alerta de budget na subscription (ex.: US$ 50/mês com alerta em 80%).
az monitor log-analytics workspace update \ -g <RG_NAME> -n nosqlstudio-cosmos-logs \ --quota 1
Parte C — Ative Diagnostic Settings na conta Cosmos
Portal: Cosmos DB → Monitoring → Diagnostic settings → Add. Marque somente o que você realmente precisa:
- MongoRequests — essencial, o que o pane KQL in-app consulta.
- DataPlaneRequests — opcional, duplica info do MongoRequests para a Mongo API.
- ControlPlaneRequests — pule; só operações admin.
- QueryRuntimeStatistics, PartitionKeyStatistics — mais caros, pule a menos que explicitamente necessário.
Destino: tipo de tabela Resource specific (mais barato que Azure Diagnostics legacy).
az monitor diagnostic-settings create \
--name to-loganalytics \
--resource $(az cosmosdb show -n <ACCOUNT> -g <RG> --query id -o tsv) \
--workspace $(az monitor log-analytics workspace show -g <RG> -n nosqlstudio-cosmos-logs --query id -o tsv) \
--logs '[{"category":"MongoRequests","enabled":true}]' \
--export-to-resource-specific trueParte D — Conceda Log Analytics Reader ao Service Principal
az role assignment create \ --assignee <APP_ID> \ --role "Log Analytics Reader" \ --scope $(az monitor log-analytics workspace show -g <RG> -n nosqlstudio-cosmos-logs --query id -o tsv)
Parte E — Copie o Workspace ID (GUID)
Importante: não é o Resource ID — é um GUID separado. Encontrado no Portal em Log Analytics workspace → Overview → Workspace ID.
az monitor log-analytics workspace show \ -g <RG_NAME> -n nosqlstudio-cosmos-logs \ --query customerId -o tsv
Parte F — NoSqlStudio
- Tab Cloud Credentials → seção TIER A · PAID — Log Analytics.
- Cole o GUID em Workspace ID (GUID).
- Clique em Save.
Parte G — Verifique
Pane Diagnostic Logs (KQL): banner agora mostra Log Analytics — full granularity. O botão Run in app desbloqueia. Pegue o template "Slow queries — last 1 hour", clique em Run. Resultados renderizam na tabela abaixo.
Tabela de decisão rápida
| Cenário | Recomendação |
|---|---|
| Cluster de dev, ambiente de teste | Path 1 (FREE). Pule Log Analytics. |
| Cluster de produção, saudável — quer observabilidade básica | Path 1 (FREE). |
| Incident ativo — precisa saber QUAL query spiked às 14:32 | Path 1 + 2 temporariamente. Desative o Diagnostic Setting após a investigação. |
| Compliance — retenção de log requerida por N dias | Path 1 + 2 permanente. Daily cap obrigatório. |
| Sem budget Azure nenhum | Só TIER C (Local samples). Deixe Cloud Credentials vazio. Workspace cai automaticamente — só perde Diagnostic Logs (KQL). |
Troubleshooting — “Criei o Diagnostic Setting mas não chega dado”
Um Diagnostic Setting recém-criado às vezes se recusa a emitir eventos por 30+ minutos (ou nunca), mesmo que o management plane reporte como “ativo”. É um quirk conhecido do Azure Monitor quando um setting anterior no mesmo recurso foi deletado recentemente, ou quando só uma categoria de log está ativa.
Como confirmar que você caiu nesse caso
Rode o probe abaixo — funciona tanto na aba Logs do workspace (só a parte KQL) quanto no seu terminal via az CLI. Substitua <your-workspace-guid> pelo GUID que você copiou em Workspace → Overview → ID do Workspace. Se cnt ficar em 0 por mais de 10 minutos enquanto a conta recebe tráfego, você está travado.
az monitor log-analytics query \
--workspace <your-workspace-guid> \
--analytics-query "CDBMongoRequests | where TimeGenerated > ago(10m) | summarize cnt=count()" \
-o tableO workaround que destrava
Delete o Diagnostic Setting e recrie com três categorias de log ativadas ao mesmo tempo em vez de só MongoRequests. As categorias extras inicializam o pipeline de diagnóstico que o setting de categoria única não conseguiu inicializar.
RID="/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.DocumentDB/databaseAccounts/<acct>"
WS="/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.OperationalInsights/workspaces/<ws-name>"
az monitor diagnostic-settings delete --name nosqlstudio-monitoring --resource "$RID"
az monitor diagnostic-settings create \
--name nosqlstudio-monitoring \
--resource "$RID" \
--workspace "$WS" \
--logs '[{"category":"MongoRequests","enabled":true},{"category":"DataPlaneRequests","enabled":true},{"category":"QueryRuntimeStatistics","enabled":true}]' \
--metrics '[{"category":"Requests","enabled":true}]' \
--export-to-resource-specific trueDepois do recreate, re-rode o probe KQL. Eventos costumam aparecer em 3–7 minutos. Quando estiver fluindo, você pode deixar as três categorias ativas (as duas extras custam um pouco mais de ingestão mas dão query plan + payloads brutos em CDBQueryRuntimeStatistics e CDBDataPlaneRequests), ou desativar as extras depois que o pipeline esquentou.
Quando nem o workaround funciona
- Confirme que a API da conta Cosmos é MongoDB (
az cosmosdb show --ids "$RID" --query "kind"precisa imprimirMongoDB;MongoRequestssó dispara nessa API). - Confirme que a região do workspace bate com a região da conta Cosmos (pipelines cross-region são mais lentos e às vezes perdem a primeira hora).
- Verifique
az monitor activity-log list --resource-id "$RID" --offset 1hpor qualquer operação diagnostic-setting falhada. - Último recurso: abra um ticket de suporte Azure — o pipeline de diagnóstico é totalmente gerenciado pela Microsoft e não dá pra inspecionar mais do lado de fora.
Desativando depois para parar de pagar
- NoSqlStudio: Cloud Credentials → delete o Workspace ID (GUID) → Save. App cai para Azure Monitor automaticamente (banner vira verde em segundos).
- Azure: conta Cosmos → Diagnostic settings → delete a setting. Para o stream de ingestion.
- Opcional: delete o workspace Log Analytics se não estiver sendo usado para mais nada. Caso contrário deixe — custo de retenção cai para zero conforme nenhum log novo entra.