Setup de monitoreo Cosmos
NoSqlStudio lee métricas Cosmos a través de data sources en tiers. Esta página es la guía paso a paso para conectar cada tier. Elija el camino que combina con su budget y necesidades de observabilidad.
Matriz de tiers
| Tier | Costo | Impacto en producción | Desbloquea |
|---|---|---|---|
TIER C · ALWAYS-ON Local samples | US$ 0 | Ninguno | RU Budget (solo app), Throttling RCA (429 de headers), heat Hot Partitions, Query Cost — todo de los response headers capturados. Solo ve tráfico de NoSqlStudio. |
TIER B · FREE Azure Monitor | US$ 0 | Ninguno — lee métricas de plataforma del ARM, nunca toca data plane del Cosmos. | RU Budget agregado, Throughput Optimizer, conteo de Throttling, Hot Partitions per PartitionKeyRangeId — cubre tráfico de producción. |
TIER A · PAID Log Analytics | ~US$ 2.50 / GB ingest + retention | Documentado como mínimo por Microsoft; stream de ingestion corre continuamente. | KQL completo per-shape en el app, pane Diagnostic Logs, Throttling RCA per-shape, recomendaciones de composite-index de traces de workload real. |
FREE — Azure Monitor + Local samples
Tiempo de setup: ~10 min. Costo: US$ 0/mes. Impacto: cero en producción. Cubre RU Budget, Throughput Optimizer, conteo de Throttling, Hot Partitions (aggregate), Query Cost (in-app).
Parte A — portal Azure / CLI
1. Cree un Service Principal
Portal: Azure Active Directory → App registrations → New registration → nombre nosqlstudio-cosmos-reader. Copie Application (client) ID, Directory (tenant) ID, y cree un Client Secret en 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. Asigne el role Monitoring Reader
Alcance mínimo: el resource group que contiene la cuenta Cosmos. Si quiere cubrir múltiples cuentas Cosmos en RGs diferentes, asigne a nivel de subscription.
az role assignment create \ --assignee <APP_ID> \ --role "Monitoring Reader" \ --scope /subscriptions/<SUB_ID>/resourceGroups/<RG_NAME>
3. Copie el Resource ID del 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
- Conéctese a su cuenta Cosmos en NoSqlStudio.
- Abra Cosmos Optimizer (
Ctrl+Alt+Shift+Yo menú Tools). - Vaya al tab Cloud Credentials.
- En TIER B · FREE — Azure Monitor, complete: Resource ID, Tenant ID, Client ID, Client secret.
- Deje Workspace ID (GUID) en la sección TIER A vacío — está optando por no usar el tier pagado.
- Haga clic en Save credentials (encrypted).
Parte C — Verifique
Vuelva al tab RU Budget. El banner de source-mode debe mostrar un chip verde Azure Monitor + el texto aggregate only — no per-shape breakdown. Haga clic en Refresh — números pueblan en 1-2 minutos (Azure puede tardar unos minutos para que métricas frescas estén disponibles).
PAID — agregue Log Analytics
Tiempo de setup: ~15 min adicionales. Costo: ~US$ 2.50/GB ingerido + ~US$ 0.10/GB-mes de retención. Solo haga esto si necesita granularidad per-shape — para 90% de las investigaciones, Azure Monitor solo es suficiente.
Parte A — Cree un workspace Log Analytics
az monitor log-analytics workspace create \ -g <RG_NAME> -n nosqlstudio-cosmos-logs \ --retention-time 30 \ --location <REGION>
Parte B — Ponga cost guardrails ANTES de activar logs
- Retención corta: 30 días mínimo en la mayoría de los tiers.
- Cap diario (ej.: 1 GB/día): detiene ingestion si excede — datos existentes aún queryables.
- Alerta de budget en la subscription (ej.: US$ 50/mes con alerta en 80%).
az monitor log-analytics workspace update \ -g <RG_NAME> -n nosqlstudio-cosmos-logs \ --quota 1
Parte C — Active Diagnostic Settings en la cuenta Cosmos
Portal: Cosmos DB → Monitoring → Diagnostic settings → Add. Marque solamente lo que realmente necesita:
- MongoRequests — esencial, lo que el pane KQL in-app consulta.
- DataPlaneRequests — opcional, duplica info del MongoRequests para la Mongo API.
- ControlPlaneRequests — salte; solo operaciones admin.
- QueryRuntimeStatistics, PartitionKeyStatistics — más caros, salte a menos que explícitamente necesario.
Destino: tipo de tabla Resource specific (más 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 al 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 el Workspace ID (GUID)
Importante: no es el Resource ID — es un GUID separado. Encontrado en el Portal en 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 → sección TIER A · PAID — Log Analytics.
- Pegue el GUID en Workspace ID (GUID).
- Haga clic en Save.
Parte G — Verifique
Pane Diagnostic Logs (KQL): banner ahora muestra Log Analytics — full granularity. El botón Run in app se desbloquea. Tome el template "Slow queries — last 1 hour", haga clic en Run. Resultados renderizan en la tabla abajo.
Tabla de decisión rápida
| Escenario | Recomendación |
|---|---|
| Cluster de dev, ambiente de prueba | Path 1 (FREE). Salte Log Analytics. |
| Cluster de producción, saludable — quiere observabilidad básica | Path 1 (FREE). |
| Incident activo — necesita saber CUÁL query spiked a las 14:32 | Path 1 + 2 temporalmente. Desactive el Diagnostic Setting después de la investigación. |
| Compliance — retención de log requerida por N días | Path 1 + 2 permanente. Daily cap obligatorio. |
| Sin budget Azure ninguno | Solo TIER C (Local samples). Deje Cloud Credentials vacío. Workspace cae automáticamente — solo pierde Diagnostic Logs (KQL). |
Troubleshooting — “Creé el Diagnostic Setting pero no llega ningún dato”
Un Diagnostic Setting recién creado a veces se niega a empezar a emitir eventos por 30+ minutos (o nunca), aunque el management plane lo reporte como “activo”. Es un quirk conocido de Azure Monitor cuando un setting anterior en el mismo recurso fue eliminado recientemente, o cuando solo una categoría de log está activa.
Cómo confirmar que está atascado en este estado
Corra el probe de abajo — funciona tanto dentro del blade Logs del workspace (solo la parte KQL) como desde su terminal vía az CLI. Reemplace <your-workspace-guid> por el GUID que copió de Workspace → Overview → Workspace ID. Si cnt se queda en 0 por más de 10 minutos mientras la cuenta está sirviendo tráfico activamente, está atascado.
az monitor log-analytics query \
--workspace <your-workspace-guid> \
--analytics-query "CDBMongoRequests | where TimeGenerated > ago(10m) | summarize cnt=count()" \
-o tableEl workaround que lo destraba
Elimine el Diagnostic Setting y recréelo con tres categorías de log activadas al mismo tiempo en vez de solo MongoRequests. Las categorías extra inicializan el pipeline de diagnóstico que el setting de categoría única no logró 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 trueDespués del recreate, vuelva a correr el probe KQL. Los eventos típicamente aparecen en 3–7 minutos. Una vez fluyendo, puede dejar las tres categorías activas (las dos extra cuestan un poco más de ingestion pero le dan el query plan + payloads crudos de request en CDBQueryRuntimeStatistics y CDBDataPlaneRequests), o desactivar las extra después de que el pipeline se caliente.
Cuando ni el workaround funciona
- Confirme que la API de la cuenta Cosmos es MongoDB (corra
az cosmosdb show --ids "$RID" --query "kind"— debe imprimirMongoDB;MongoRequestssolo se dispara para esa API). - Confirme que la región del workspace coincide con la región de la cuenta Cosmos (los pipelines cross-region son más lentos y a veces pierden la primera hora).
- Revise
az monitor activity-log list --resource-id "$RID" --offset 1hpor cualquier operación de diagnostic-setting fallida. - Último recurso: abra un ticket de soporte Azure — el pipeline de diagnóstico es totalmente gestionado por Microsoft y no podemos inspeccionarlo más desde afuera.
Desactivando después para parar de pagar
- NoSqlStudio: Cloud Credentials → elimine el Workspace ID (GUID) → Save. App cae a Azure Monitor automáticamente (banner se vuelve verde en segundos).
- Azure: cuenta Cosmos → Diagnostic settings → elimine la setting. Detiene el stream de ingestion.
- Opcional: elimine el workspace Log Analytics si no está siendo usado para nada más. De lo contrario déjelo — costo de retención cae a cero conforme ningún log nuevo entra.