Introdução
Este manual leva você de uma conta Cosmos DB que ainda não emite telemetria para uma que transmite cada requisição ao Operations Center do NoSqlStudio em menos de dez minutos. Você não precisa saber o que é um Service Principal, um workspace de Log Analytics ou um Diagnostic Setting antes — as caixas 💡 explicam cada conceito na primeira vez que aparecem.
O que você ganha quando termina
- Seis gráficos ao vivo no Operations Center: RU/s consumido, throttles (HTTP 429), latência p99, contagem de erros, custo projetado em $/hora e share da maior partição.
- Um detector de anomalias que sinaliza picos de custo, tempestades de throttle, excursões de latência e skew de partição no instante em que acontecem.
- Um painel Query Cost que mostra o consumo real de RU de cada comando — com o texto bruto do
mongoshpronto pra você rodarExplaine jogar pro AI advisor embutido. - Cada tick gravado opcionalmente espelhado pro seu próprio banco de dados de gerenciamento MongoDB, com TTL de 30 dias, pra que o histórico sobreviva entre máquinas e restarts do laptop.
Como ler este manual
Cada passo tem:
- Faça — a ação exata (clicar, digitar, rodar tal comando).
- Veja — o que deve acontecer. É o seu “passou / falhou”.
- Por quê — só quando ajuda a entender (pode pular se está com pressa).
Conceito
Caixa de conceito. Explica um termo na hora em que aparece.
Atenção
Atenção. Uma sutileza que costuma morder.
Antes de começar
Conceito
As quatro peças que você vai criar
1. Service Principal — uma identidade não-humana no seu tenant do Azure; o NoSqlStudio usa pra ler Log Analytics sem armazenar nenhuma senha humana. 2. Workspace do Log Analytics — o lago de logs central do Azure; é pra cá que o Cosmos despeja telemetria. 3. Diagnostic Setting — o cano que liga o Cosmos ao workspace. Sem ele, o workspace fica vazio pra sempre. 4. Atribuições de função — duas, pra que o SP consiga ler tanto o workspace quanto as métricas do resource group.
Você vai precisar:
- 1Uma subscription do Azure com permissão Owner ou Contributor no resource group que segura a conta Cosmos (precisa conseguir criar role assignments).
- 2Permissão no Azure Active Directory pra criar um Service Principal — ou, se sua empresa proíbe, o object ID de um SP existente que o time de plataforma já criou.
- 3Azure CLI (
az) versão 2.55 ou mais novo para os caminhos B e C. Instalação: <https://learn.microsoft.com/cli/azure/install-azure-cli> - 4(Só caminho C) Terraform ≥ 1.5.0.
Escolha seu caminho
Os três caminhos produzem as mesmas seis credenciais que você cola no NoSqlStudio. Escolha o que combina com como você trabalha:
- Caminho A — Portal Azure. Clique-a-clique no navegador. Bom para fazer uma vez só, ou quando quer ver o que está sendo criado. ~25 min na primeira, ~10 min depois.
- Caminho B — Script CLI. Baixa um único
.sh(Linux/macOS) ou.ps1(Windows) e roda. Bom para provisionamento rápido, ou quando não usa Terraform. ~5 min no total. - Caminho C — Terraform. Um módulo reutilizável. Bom quando você já provisiona o Cosmos via Terraform, ou quando opera múltiplos ambientes. ~5 min depois do
init.
Conceito
Os três caminhos são idempotentes: re-rodar é seguro. Eles detectam recursos existentes e atualizam / reaproveitam em vez de duplicar.
Pegue a única entrada que todo caminho precisa
Independente do caminho, você vai precisar do resource ID da conta Cosmos que quer monitorar. Pegue uma vez e deixe num post-it pelos próximos 10 minutos.
Achar o Resource ID da sua conta Cosmos
Abra o Portal Azure → pesquise na barra superior o nome da sua conta Cosmos → clique no resultado → na barra lateral esquerda clique Propriedades → copie a string longa em Resource ID.
Você terá um valor com este formato exato:
/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/my-rg/providers/Microsoft.DocumentDB/databaseAccounts/my-cosmos-acctConceito
Lendo o Resource ID
Os quatro segmentos separados por barra que importam: • `/subscriptions/<sub-guid>` — o ID da sua subscription (precisa depois). • `/resourceGroups/<rg-name>` — onde a conta vive. O workspace de Log Analytics também vai cair aqui. • `/databaseAccounts/<acct-name>` — a conta Cosmos em si.
Todo caminho daqui pra baixo — Portal, CLI, Terraform — começa com essa string. Pegar certo de uma vez evita três idas e voltas ao Portal.
Atenção
Não confunda o Resource ID com o Log Analytics Workspace ID que aparece depois. O primeiro é um caminho com barras; o segundo é um GUID puro. O NoSqlStudio pede os dois em campos separados.
Caminho A — Portal Azure (clique-a-clique)
Pule para a Etapa 3 se for usar CLI, ou Etapa 4 se for Terraform. As Etapas 2, 3 e 4 são mutuamente exclusivas — escolha uma.
Conceito
O que você vai fazer
Seis passos de cliques: criar um App Registration + SP no Azure AD (Passos 2-4), criar o workspace de Log Analytics com teto de custo (Passo 5), dar acesso de leitura ao SP (Passo 6), e conectar a conta Cosmos ao workspace (Passo 7). Aí o Azure terminou — a Etapa 5 é só colar valores no NoSqlStudio.
Criar o App Registration no Azure AD
Conceito
App Registration vs Service Principal
Quando você cria um App Registration, o Azure cria silenciosamente um Service Principal correspondente em segundo plano. O App Registration é a definição (nome, redirect URIs, secrets); o Service Principal é a instância que recebe role assignments. Os dois termos aparecem misturados na documentação — referem-se à mesma identidade.
Busca da barra superior → Registros de aplicativo → clique Novo registro. Preencha:
- Nome:
nosqlstudio-cosmos-monitoring(qualquer nome serve, mas seja consistente entre ambientes). - Tipos de conta suportados: deixe em Contas apenas neste diretório organizacional.
- URI de redirecionamento: deixe em branco — o NoSqlStudio usa o fluxo OAuth client-credentials, sem redirecionamento no navegador.
Clique Registrar.
Você cai na página Visão geral do novo app. Três valores ficam visíveis — anote ID do aplicativo (cliente) e ID do diretório (tenant); você vai colar no NoSqlStudio no final.
O client ID identifica qual app está chamando o Azure; o tenant ID identifica qual diretório do Azure AD o app vive. O NoSqlStudio precisa dos dois pra negociar um token.
Gerar um client secret para o App
Ainda no App Registration, barra lateral → Certificados & segredos → + Novo segredo do cliente.
- Descrição: qualquer coisa memorável, ex:
nosqlstudio-prod-2026. - Expira em: 24 meses (melhor equilíbrio entre segurança e frequência de rotação). O Azure capa o máximo em 24 meses.
Clique Adicionar. O segredo aparece com uma coluna Valor.
Atenção
Copie o Valor AGORA. Quando você sair da página, não dá mais pra recuperar — o Azure mostra exatamente uma vez. Cole num gerenciador de senhas. Não confunda Valor (o segredo) com ID do segredo (um identificador inútil).
O Azure nunca mostra segredos duas vezes de propósito — pra que um screenshot vazado da página não possa ser explorado retroativamente. Se você perder, tem que criar outro segredo e atualizar o Cloud Credentials do NoSqlStudio.
Conceder ao SP o papel "Leitor de Monitoramento" no resource group
Conceito
Por que esse escopo, e não a subscription inteira?
Privilégio mínimo. O SP só precisa ler métricas + estado dos Diagnostic Settings na conta Cosmos. Escopar pelo resource group mantém o blast radius pequeno — mesmo se o segredo do SP vazar, o atacante só consegue enumerar / ler metadados de monitoramento naquele resource group.
Busca da barra superior → nome do resource group que tem sua conta Cosmos → clique → barra lateral → Controle de acesso (IAM) → + Adicionar → Adicionar atribuição de função.
- Aba Papel: busque por `Leitor de Monitoramento` → selecione → clique Próximo.
- Aba Membros: Atribuir acesso a = Usuário, grupo ou principal de serviço → + Selecionar membros → busque
nosqlstudio-cosmos-monitoring(o nome do Passo 2) → clique → Selecionar. - Revisar + atribuir → Revisar + atribuir.
Um banner verde no topo: Atribuição de função adicionada. Em ~30 segundos a nova atribuição aparece na aba Atribuições de função do IAM.
Criar o workspace de Log Analytics (com teto de custo)
Busca da barra superior → Workspaces do Log Analytics → + Criar. Preencha:
- Subscription + Resource group: os mesmos da conta Cosmos.
- Nome:
nosqlstudio-monitoring. - Região: a mesma região da sua conta Cosmos (minimiza latência de ingestão + zero custo de egress cross-region).
Clique Revisar + Criar → Criar. Em ~30 segundos você cai no novo workspace.
Agora coloque um teto de custo pra que um log fora de controle não estoure orçamento. Na barra lateral do workspace → Configurações → Uso e custos estimados → Limite diário → Ativado → digite `1` no campo GB → OK.
Conceito
Entendendo o teto
O workspace para de aceitar logs novos quando recebe 1 GB num único dia UTC. Os dados já ingeridos continuam consultáveis. O teto reseta à meia-noite UTC. 1 GB/dia dá pra ~30 milhões de linhas de `MongoRequests` no tamanho típico — generoso pra maioria das contas.
Na mesma página, Retenção de dados vem em 30 dias. Deixe em 30 — é o piso grátis; passar de 30 começa a custar extra por GB-mês.
Clique Visão geral na barra lateral e copie o GUID ID do Workspace no topo da página. Guarde junto com os valores do Passo 2.
Atenção
Workspace ID ≠ Resource ID. O Workspace ID é um GUID puro tipo 3e1bee3d-7752-4606-9c95-208626ef0406. O Resource ID é um caminho com barras. O NoSqlStudio pede o GUID.
Conceder ao SP "Leitor de Log Analytics" no workspace
Ainda no workspace → barra lateral → Controle de acesso (IAM) → + Adicionar → Adicionar atribuição de função.
- Papel: busque `Leitor de Log Analytics` → selecione → Próximo.
- Membros: + Selecionar membros → busque `nosqlstudio-cosmos-monitoring` → selecione → Selecionar.
- Revisar + atribuir → Revisar + atribuir.
O Leitor de Monitoramento do Passo 4 cobre métricas + metadados de Diagnostic Settings no resource group, mas não rodar queries KQL no workspace. Esse é um papel separado, em um escopo separado.
Rotear logs do Cosmos pro workspace (Diagnostic Setting)
Atenção
Esse é o passo que todo mundo esquece
A conta Cosmos não envia automaticamente nada pro seu workspace só porque os dois estão no mesmo RG. Você precisa explicitamente rotear os logs. Sem este passo o workspace fica vazio pra sempre e o NoSqlStudio mostra “MongoRequests table is empty”.
Volte pra sua conta Cosmos DB → barra lateral → seção Monitoramento → Configurações de diagnóstico → + Adicionar configuração de diagnóstico.
- Nome:
nosqlstudio-monitoring. - Em Logs, marque MongoRequests apenas. Deixe os outros sem marcar a não ser que tenha lido os limites de custo na Etapa 6 —
PartitionKeyRUConsumptioneQueryRuntimeStatisticsproduzem 5-10× mais volume de ingestão. - Em Detalhes do destino: marque Enviar para o workspace do Log Analytics → selecione sua subscription → selecione
nosqlstudio-monitoring(o workspace do Passo 5). - No seletor Tabela de destino, escolha Específico do recurso, NÃO Diagnóstico do Azure.
Conceito
Tabelas resource-specific vs azure-diagnostics
Resource-specific roteia os logs do Cosmos pra tabela CDBMongoRequests — um schema tipado, denormalizado, mais barato pra consultar e mais leve no boleto. Azure-diagnostics despeja tudo numa tabela enorme AzureDiagnostics com colunas tipo JSON-blob. As queries KQL do NoSqlStudio são escritas pra Resource-specific — escolha essa.
Clique Salvar.
Banner verde: Configuração de diagnóstico criada com sucesso. Aparece na lista.
Uma vez salvo, o engine do Cosmos começa a despachar cada requisição pro workspace quase em tempo real. Existe um atraso de ingestão de 2-5 minutos entre o instante em que a requisição atinge o engine e quando dá pra consultar no Log Analytics — isso é normal, não é bug.
Achar Subscription ID e Tenant ID
Busca da barra superior → Subscriptions → clique a sua. O Subscription ID é o GUID no topo da Visão geral. Copie.
Busca da barra superior → Microsoft Entra ID (antigo Azure Active Directory) → o Tenant ID GUID está na Visão geral. Copie.
Conceito
Se anotou o Tenant ID lá no Passo 2, dá pra pular a segunda parte — é o mesmo valor.
Caminho B — Script CLI de uma linha
Se preferir pular o Portal de vez, um único script faz toda a Etapa 2 numa tacada. Pule pra Etapa 5 depois de rodar.
Conceito
O que o script faz
É um wrapper idempotente em volta de invocações az CLI. Faz login (az login), cria o SP, o workspace (com o teto de 1 GB/dia), e o Diagnostic Setting; atribui ambas as funções; e imprime as seis credenciais pra colar no NoSqlStudio. Re-rodar rotaciona o segredo do cliente em vez de duplicar recursos.
Instalar o Azure CLI
Se ainda não tem o az instalado, siga o instalador da Microsoft pro seu SO:
- Windows: baixe o MSI em <https://aka.ms/installazurecliwindows>
- macOS:
brew install azure-cli - Debian / Ubuntu:
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash - RHEL / Fedora:
sudo dnf install azure-cli(depois de adicionar o repo da Microsoft)
Confirme com:
az versionSaída esperada:
{
"azure-cli": "2.66.0",
...
}Atenção
O script precisa de az ≥ 2.55. Versões mais antigas faltam flags que ele usa.
Baixar o script
Escolha sua shell:
- Bash (Linux / macOS / WSL):
curl -O https://nosqlstudio.com/scripts/setup-cosmos-monitoring.sh && chmod +x setup-cosmos-monitoring.sh - PowerShell (Windows):
Invoke-WebRequest -OutFile setup-cosmos-monitoring.ps1 -Uri https://nosqlstudio.com/scripts/setup-cosmos-monitoring.ps1
Conceito
Abra o arquivo em qualquer editor — é um shell script limpo, comentado, sem telemetria, sem chamadas remotas, sem estado oculto. Leia antes de rodar; é exatamente o ponto de distribuir o código-fonte.
Rodar
Cole o Resource ID do Cosmos (Passo 1) e rode:
# Bash
./setup-cosmos-monitoring.sh \
--cosmos-resource-id "/subscriptions/.../databaseAccounts/my-cosmos-acct"# PowerShell
.\setup-cosmos-monitoring.ps1 `
-CosmosResourceId "/subscriptions/.../databaseAccounts/my-cosmos-acct"Se você não está logado, uma janela do navegador abre pro az login. Depois disso o script imprime o progresso:
▸ Preflight
▸ Checking Azure CLI login
✓ Logged into subscription 00000000-... (tenant ...)
▸ Verifying Cosmos account my-cosmos-acct exists
✓ Cosmos account reachable
▸ Looking up Service Principal 'nosqlstudio-cosmos-monitoring'
▸ Creating Service Principal 'nosqlstudio-cosmos-monitoring'
✓ Service Principal created (appId abc..., secret valid 2 years)
▸ Sleeping 20s for Azure AD propagation
▸ Locating / creating Log Analytics workspace 'nosqlstudio-monitoring' in 'my-rg'
▸ Creating workspace (region eastus2, retention 30d, cap 1 GB/day)
✓ Workspace created
▸ Granting 'Log Analytics Reader' to SP on the workspace
✓ Granted
▸ Configuring Diagnostic Setting 'nosqlstudio-monitoring' on Cosmos account
✓ Diagnostic Setting configured (Resource-specific tables)
▸ Verifying configuration
✓ Verified
SUCCESS Paste the values below into NoSqlStudio:
...Cada linha com ▸ é uma ação; cada ✓ é sucesso. Se algo falha, o script aborta na hora com uma linha vermelha ✗ e saída diferente de zero — corrija a causa e re-rode; os passos já completos serão detectados e pulados.
Flags opcionais
Overrides úteis quando o default não serve:
./setup-cosmos-monitoring.sh \
--cosmos-resource-id "$RID" \
--workspace-name nosqlstudio-prod \
--workspace-region westeurope \
--workspace-daily-cap-gb 5 \
--include-partition-key-ru \
--verbose--workspace-daily-cap-gb 5— sobe o teto de 1 GB/dia quando o tráfego é pesado. Custo escala linearmente.--include-partition-key-ru/--include-query-runtime-stats— adiciona categorias extras de log. Bem mais volume de ingestão; só ative se realmente precisa.--existing-sp-app-id <appId>— reaproveita um SP que o time de plataforma já tem; o script pula os Passos 2/3.--verbose— imprime cada respostaaz.
Caminho C — Módulo Terraform
Pra times que dirigem o Azure via Terraform. O módulo publicado embrulha tudo o que as Etapas 2 / 3 fazem, com outputs completos pra você poder ligar as seis credenciais num gerenciador de segredos downstream (Key Vault, Vault, etc.).
Exemplo mínimo
Crie uma pasta cosmos-monitoring/, coloque isto no main.tf, então terraform init && terraform apply:
terraform {
required_version = ">= 1.5.0"
}
provider "azurerm" {
features {}
}
provider "azuread" {}
module "cosmos_monitoring" {
source = "github.com/nosqlstudio/nosqlstudio-site//terraform/cosmos-monitoring?ref=main"
cosmos_account_resource_id = "/subscriptions/.../databaseAccounts/my-cosmos-acct"
region = "eastus2"
log_analytics_daily_quota_gb = 1
}
output "nosqlstudio_credentials" { value = module.cosmos_monitoring.nosqlstudio_credentials }
output "nosqlstudio_client_secret" { value = module.cosmos_monitoring.nosqlstudio_client_secret, sensitive = true }Depois de apply:
terraform output nosqlstudio_credentials
# {
# "clientId" = "..."
# "logAnalyticsWorkspaceId" = "3e1bee3d-..."
# "resourceId" = "/subscriptions/..."
# "subscriptionId" = "00000000-..."
# "tenantId" = "..."
# }
terraform output -raw nosqlstudio_client_secret
# <o 6º valor>Variações comuns
- BYO Service Principal:
create_service_principal = false+existing_service_principal_object_id = "<obj-id>". O módulo ainda cria o workspace + Diagnostic Setting e concede ambos os papéis ao SP existente. Você fornece o client secret por fora. - Alerta de orçamento:
create_budget_alert = true+budget_monthly_usd = 25+budget_alert_email = "voce@exemplo.com"cria um budget mensal escopado por subscription que dispara email em 80% real e 100% previsto. - Múltiplas categorias de log:
diagnostic_log_categories = ["MongoRequests", "PartitionKeyRUConsumption"].
Conceito
Referência completa de variáveis
Toda variável + todo output é documentado no README.md do módulo. Abra terraform/cosmos-monitoring/README.md na fonte — ou pegue do repositório publicado.
Colar as seis credenciais no NoSqlStudio
Passo final igual independente do caminho. O que você anotou ou o que o Terraform / script imprimiu: cole agora.
Abrir o Cosmos Optimizer
No NoSqlStudio, abra a conexão Cosmos DB que você quer monitorar. No menu: Tools → Cosmos Optimizer (ou aperte Ctrl + Alt + Shift + O).
Uma nova aba de workspace abre com uma barra lateral listando 11 paneles agrupados em Diagnostics, Cost & Capacity, Operations, Configuration.
Abrir o painel Cloud Credentials
Na barra lateral do Cosmos Optimizer, role até o grupo Configuration → clique Cloud Credentials.
Um formulário com seis campos (mais um label header pra cada) — cole os valores que coletou:
- Subscription ID — o GUID do Passo 8 (ou impresso pelo script / Terraform).
- Tenant ID — o Directory (tenant) ID do Passo 2.
- Client ID — o Application (client) ID do Passo 2.
- Client Secret — o Valor do segredo do Passo 3 (aquele que o Azure mostrou uma vez).
- Resource ID — o resource ID completo do Cosmos do Passo 1.
- Log Analytics Workspace ID — o GUID do Passo 5 (NÃO o resource ID).
Clique Save.
Um pill verde aparece: Saved. A bolinha de status ao lado da engrenagem na toolbar do Operations Center (canto superior direito) fica verde em alguns segundos.
Verificar no Operations Center
Clique Operations Center (topo da barra lateral, em Diagnostics). Espere até 2 minutos pelo primeiro ciclo de polling.
Três coisas devem acontecer, nesta ordem:
- 1O banner amarelo No telemetry captured yet desaparece.
- 2Os seis gráficos pequenos (RU/s, Throttles, Latency p99, Errors, Cost, Top partition share) começam a se preencher da esquerda pra direita.
- 3Clique a engrenagem ⚙ na toolbar — o modal diz Connected — recorded snapshots are being mirrored (assumindo que você também configurou o management database; é um toggle separado de única vez).
Conceito
Se os gráficos ficarem vazios por mais de 5 minutos
Mais provável é que a conta Cosmos não esteja recebendo tráfego no momento. Abra uma conexão pra ela no NoSqlStudio e rode qualquer query (ex: db.runCommand({ping:1}) no Mongo shell) — em 2-5 minutos o gráfico deve subir.
Atenção
Se os gráficos continuarem vazios depois de 10 minutos com tráfego rolando, pula pra Etapa 6 — Troubleshooting.
Limites de custo + troubleshooting
Expectativas de custo
Com os defaults (só MongoRequests, teto 1 GB/dia, retenção 30 dias):
- Tráfego leve (<10 req/s): ~US$ 0,50 / mês, quase tudo de ingestão Log Analytics no rate
PerGB2018. - Moderado (10-100 req/s): ~US$ 2-3 / mês — SaaS pequeno típico.
- Pesado (> 100 req/s): bate o teto de 1 GB/dia; o workspace para de ingerir até meia-noite UTC. Gráficos ficam quietos. Comportamento intencional — protege contra custo fora de controle.
Conceito
Se sua conta é pesada e você quer cobertura total: suba o teto incrementalmente (1 → 5 → 10 GB) e fique de olho na fatura do primeiro mês. Não pule direto pra sem-teto — eleve o teto em vez de desativar.
Se você ativou as categorias opcionais (Etapa 2 Passo 7) — PartitionKeyRUConsumption ou QueryRuntimeStatistics — espere 5-10× mais volume de ingestão. Planeje US$ 10-40 / mês em tráfego típico.
Gráficos foram pra zero há 50 minutos e não voltam
Duas causas comuns:
- 1Teto diário batido. Abra o workspace → Uso e custos estimados → procure o banner vermelho Limite diário excedido no topo. Ou suba o teto ou espere meia-noite UTC.
- 2Diagnostic Setting deletado ou desativado. Abra a conta Cosmos → Monitoramento → Configurações de diagnóstico. Se o
nosqlstudio-monitoringsumiu, alguém removeu (colega,terraform destroydesviado, Azure Policy). Re-rode a Etapa 2 Passo 7 / seu script CLI /terraform applypra recriar.
Conceito
KQL forense — quando o dado parou?
Abra o workspace → Logs → cole e rode:
``kusto
CDBMongoRequests
| where TimeGenerated > ago(24h)
| summarize last_row = max(TimeGenerated), per_5min = count() by bin(TimeGenerated, 5m)
| order by TimeGenerated desc
O timestamp da linha mais nova diz exatamente quando o stream parou. Cruze com o **Activity log** da conta Cosmos (filtrando por Microsoft.Insights/diagnosticSettings/delete`) pra achar a operação que desligou.
“Log Analytics is connected, but MongoRequests table is empty”
É a mensagem exata do NoSqlStudio quando ele consegue se autenticar no workspace mas acha zero linhas. Três causas, em ordem de probabilidade:
- 1Diagnostic Setting está roteando pra OUTRO workspace que não o que você colou no NoSqlStudio. Abra Diagnostic Settings na conta Cosmos → verifique o workspace alvo.
- 2Tabelas resource-specific não foram escolhidas (Etapa 2 Passo 7). Os dados ESTÃO chegando, mas na tabela legada
AzureDiagnostics— o NoSqlStudio não consulta essa. Delete + recrie a Diagnostic Setting com Resource specific. - 3Setup recente, sem tráfego ainda. Logs precisam ~2-10 minutos de atraso de ingestão. Rode algumas queries na conta Cosmos e espere.
Diagnostic Setting recém-criado não emite nada
Atenção
Quirk conhecido do Azure — pipeline silencioso após delete + recreate
Um Diagnostic Setting novo às vezes se recusa a emitir eventos por 30+ minutos (ou nunca), mesmo que o Azure reporte como ativo. É um quirk conhecido quando um setting anterior no mesmo recurso foi deletado recentemente, ou quando só uma categoria de log está ativa.
1. Confirme que você travou. Rode o probe — tanto na aba Logs do workspace (só a parte KQL) quanto no terminal. Substitua <your-workspace-guid> pelo GUID em Workspace → Visão Geral → ID do Workspace. Se cnt ficar em 0 por >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 table2. 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.
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 do passo 1. Eventos costumam aparecer em 3-7 minutos.
Conceito
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 re-rodando create só com MongoRequests.
Quando nem o workaround funciona
- Confirme que a API da conta Cosmos é MongoDB:
az cosmosdb show --ids "$RID" --query kindprecisa imprimirMongoDB—MongoRequestssó dispara nessa API. - Confirme que a região do workspace bate com a 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 no suporte Azure — o pipeline de diagnóstico é totalmente gerenciado pela Microsoft.
Rotacionar o client secret
Boa prática é rotacionar o segredo do SP a cada 12-24 meses. Pra rotacionar:
- Portal: App Registration do Passo 2 → Certificados & segredos → + Novo segredo do cliente → copie o novo Valor → cole no Cloud Credentials → Save. Depois delete o segredo VELHO da mesma página.
- Script: re-rode
setup-cosmos-monitoring.sh— detecta o SP existente e rotaciona o segredo automaticamente (o antigo continua válido; revogue manualmente se quiser). - Terraform: o
time_rotatingtickeia a cada 2 anos, entãoterraform applydepois disso refresha o segredo. Pra forçar antes:terraform taint module.cosmos_monitoring.time_rotating.secret[0] && terraform apply.
Como remover a camada de monitoramento
Derrubar a stack de monitoramento nunca toca na conta Cosmos em si — seus dados, throughput e connection strings ficam intactos.
Portal
- 1Conta Cosmos → Configurações de diagnóstico → delete
nosqlstudio-monitoring. O Cosmos para de emitir logs. - 2Resource group → IAM → revoga
Leitor de Monitoramentodo SP. - 3Workspace Log Analytics → IAM → revoga
Leitor de Log Analyticsdo SP. - 4(Opcional) Delete o workspace de Log Analytics em si. Os dados retidos somem após a janela de soft-delete de 14 dias.
- 5(Opcional) Microsoft Entra ID → Registros de aplicativo → delete
nosqlstudio-cosmos-monitoring. O SP e o segredo dele são revogados.
Script CLI
Não tem flag --destroy embutida — o Azure provê ferramentas melhores. Rode:
RID="/subscriptions/.../databaseAccounts/my-cosmos-acct"
RG="$(echo $RID | awk -F/ '{print $5}')"
az monitor diagnostic-settings delete --name nosqlstudio-monitoring --resource $RID
az monitor log-analytics workspace delete --resource-group $RG --workspace-name nosqlstudio-monitoring --yes
az ad sp delete --id $(az ad sp list --display-name nosqlstudio-cosmos-monitoring --query '[0].id' -o tsv)Terraform
terraform destroyAtenção
terraform destroy recria (e destrói imediatamente) o segredo do time_rotating se você passou do intervalo; inofensivo mas gera um plan barulhento.
Resumo
| Caminho | Tempo | Melhor para | Re-rodável | Le teto de custo |
|---|---|---|---|---|
| A — Portal Azure | ~25 min na primeira | Uma vez só, aprendizado, ambiente auditado | Manual (re-clicar) | Manual (5 cliques) |
| B — Script CLI | ~5 min | Conta única, provisionamento rápido | Sim — idempotente | --workspace-daily-cap-gb |
| C — Módulo Terraform | ~5 min após init | Múltiplos ambientes, shops IaC, drift detection | Sim — por design | log_analytics_daily_quota_gb |