Pular para o conteúdo
Documentação

Monitoramento do Cosmos DB — Ativar Azure Log Analytics no NoSqlStudio

Um guia completo, pego-pela-mão, para conectar o Azure Log Analytics à sua conta Cosmos DB for MongoDB e fazer o Cosmos Optimizer do NoSqlStudio acender todos os gráficos. Três caminhos: Portal (passo-a-passo), script CLI em uma linha, ou Terraform.

Tempo estimado: ~25 minutos (caminho Portal) · ~5 minutos (CLI / Terraform)
Neste manual

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 mongosh pronto pra você rodar Explain e 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:

  1. 1Uma subscription do Azure com permissão Owner ou Contributor no resource group que segura a conta Cosmos (precisa conseguir criar role assignments).
  2. 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.
  3. 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. 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.

Etapa 1

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.

Passo 1

Achar o Resource ID da sua conta Cosmos

Faça

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.

Veja

Você terá um valor com este formato exato:

text·1 linha
/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/my-rg/providers/Microsoft.DocumentDB/databaseAccounts/my-cosmos-acct

Conceito

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.

Por quê

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.

Etapa 2

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.

Passo 2

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.

Faça

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.
Faça

Clique Registrar.

Veja

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.

Por quê

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.

Passo 3

Gerar um client secret para o App

Faça

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.
Faça

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).

Por quê

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.

Passo 4

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.

Faça

Busca da barra superior → nome do resource group que tem sua conta Cosmos → clique → barra lateral → Controle de acesso (IAM)+ AdicionarAdicionar 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 + atribuirRevisar + atribuir.
Veja

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.

Passo 5

Criar o workspace de Log Analytics (com teto de custo)

Faça

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).
Faça

Clique Revisar + CriarCriar. Em ~30 segundos você cai no novo workspace.

Faça

Agora coloque um teto de custo pra que um log fora de controle não estoure orçamento. Na barra lateral do workspace → ConfiguraçõesUso e custos estimadosLimite diárioAtivado → 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.

Veja

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.

Faça

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.

Passo 6

Conceder ao SP "Leitor de Log Analytics" no workspace

Faça

Ainda no workspace → barra lateral → Controle de acesso (IAM)+ AdicionarAdicionar atribuição de função.

  • Papel: busque `Leitor de Log Analytics` → selecione → Próximo.
  • Membros: + Selecionar membros → busque `nosqlstudio-cosmos-monitoring` → selecione → Selecionar.
  • Revisar + atribuirRevisar + atribuir.
Por quê

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.

Passo 7

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”.

Faça

Volte pra sua conta Cosmos DB → barra lateral → seção MonitoramentoConfiguraçõ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 — PartitionKeyRUConsumption e QueryRuntimeStatistics produzem 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.

Faça

Clique Salvar.

Veja

Banner verde: Configuração de diagnóstico criada com sucesso. Aparece na lista.

Por quê

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.

Passo 8

Achar Subscription ID e Tenant ID

Faça

Busca da barra superior → Subscriptions → clique a sua. O Subscription ID é o GUID no topo da Visão geral. Copie.

Faça

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.

Etapa 3

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.

Passo 9

Instalar o Azure CLI

Faça

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)
Faça

Confirme com:

bash·1 linha
az version
Veja

Saída esperada:

Saída no console
{
  "azure-cli": "2.66.0",
  ...
}

Atenção

O script precisa de az ≥ 2.55. Versões mais antigas faltam flags que ele usa.

Passo 10

Baixar o script

Faça

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.

Passo 11

Rodar

Faça

Cole o Resource ID do Cosmos (Passo 1) e rode:

bash·3 linhas
# Bash
./setup-cosmos-monitoring.sh \
  --cosmos-resource-id "/subscriptions/.../databaseAccounts/my-cosmos-acct"
powershell·3 linhas
# PowerShell
.\setup-cosmos-monitoring.ps1 `
  -CosmosResourceId "/subscriptions/.../databaseAccounts/my-cosmos-acct"
Veja

Se você não está logado, uma janela do navegador abre pro az login. Depois disso o script imprime o progresso:

Saída no console
▸ 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:
  ...
Por quê

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.

Passo 12

Flags opcionais

Overrides úteis quando o default não serve:

bash·7 linhas
./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 resposta az.
Etapa 4

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.).

Passo 13

Exemplo mínimo

Faça

Crie uma pasta cosmos-monitoring/, coloque isto no main.tf, então terraform init && terraform apply:

hcl·19 linhas
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 }
Veja

Depois de apply:

bash·11 linhas
terraform output nosqlstudio_credentials
# {
#   "clientId"               = "..."
#   "logAnalyticsWorkspaceId" = "3e1bee3d-..."
#   "resourceId"             = "/subscriptions/..."
#   "subscriptionId"         = "00000000-..."
#   "tenantId"               = "..."
# }

terraform output -raw nosqlstudio_client_secret
# <o 6º valor>
Passo 14

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.

Etapa 5

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.

Passo 15

Abrir o Cosmos Optimizer

Faça

No NoSqlStudio, abra a conexão Cosmos DB que você quer monitorar. No menu: ToolsCosmos Optimizer (ou aperte Ctrl + Alt + Shift + O).

Veja

Uma nova aba de workspace abre com uma barra lateral listando 11 paneles agrupados em Diagnostics, Cost & Capacity, Operations, Configuration.

Passo 16

Abrir o painel Cloud Credentials

Faça

Na barra lateral do Cosmos Optimizer, role até o grupo Configuration → clique Cloud Credentials.

Veja

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).
Faça

Clique Save.

Veja

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.

Passo 17

Verificar no Operations Center

Faça

Clique Operations Center (topo da barra lateral, em Diagnostics). Espere até 2 minutos pelo primeiro ciclo de polling.

Veja

Três coisas devem acontecer, nesta ordem:

  1. 1O banner amarelo No telemetry captured yet desaparece.
  2. 2Os seis gráficos pequenos (RU/s, Throttles, Latency p99, Errors, Cost, Top partition share) começam a se preencher da esquerda pra direita.
  3. 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.

Etapa 6

Limites de custo + troubleshooting

Passo 18

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.

Passo 19

Gráficos foram pra zero há 50 minutos e não voltam

Duas causas comuns:

  1. 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.
  2. 2Diagnostic Setting deletado ou desativado. Abra a conta Cosmos → MonitoramentoConfigurações de diagnóstico. Se o nosqlstudio-monitoring sumiu, alguém removeu (colega, terraform destroy desviado, Azure Policy). Re-rode a Etapa 2 Passo 7 / seu script CLI / terraform apply pra 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.

Passo 20

“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:

  1. 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.
  2. 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.
  3. 3Setup recente, sem tráfego ainda. Logs precisam ~2-10 minutos de atraso de ingestão. Rode algumas queries na conta Cosmos e espere.
Passo 21

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.

bash·4 linhas
az monitor log-analytics query \
  --workspace <your-workspace-guid> \
  --analytics-query "CDBMongoRequests | where TimeGenerated > ago(10m) | summarize cnt=count()" \
  -o table

2. 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.

bash·12 linhas
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 true
Veja

Depois 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 kind precisa imprimir MongoDBMongoRequests só 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 1h por qualquer operação diagnostic-setting falhada.
  • Último recurso: abra um ticket no suporte Azure — o pipeline de diagnóstico é totalmente gerenciado pela Microsoft.
Passo 22

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_rotating tickeia a cada 2 anos, então terraform apply depois 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

  1. 1Conta Cosmos → Configurações de diagnóstico → delete nosqlstudio-monitoring. O Cosmos para de emitir logs.
  2. 2Resource group → IAM → revoga Leitor de Monitoramento do SP.
  3. 3Workspace Log Analytics → IAM → revoga Leitor de Log Analytics do SP.
  4. 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. 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:

bash·6 linhas
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

bash·1 linha
terraform destroy

Atençã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

CaminhoTempoMelhor paraRe-rodávelLe teto de custo
A — Portal Azure~25 min na primeiraUma vez só, aprendizado, ambiente auditadoManual (re-clicar)Manual (5 cliques)
B — Script CLI~5 minConta única, provisionamento rápidoSim — idempotente--workspace-daily-cap-gb
C — Módulo Terraform~5 min após initMúltiplos ambientes, shops IaC, drift detectionSim — por designlog_analytics_daily_quota_gb
Quando você termina, o Operations Center é seu painel único de vidro pra conta Cosmos — consumo RU, throttles, latência, partition skew, custo, anomalias e um scrubber DVR completo sobre os últimos 30 dias de snapshots gravados. Abra em Tools → Cosmos Optimizer → Operations Center, e considere também ler o [Manual do Operations Center](/docs/operations-center) pra entender o que cada gráfico significa e como agir em cada anomalia.