Cosmos monitoring setup
NoSqlStudio Cosmos metrics को tiered data sources के माध्यम से पढ़ता है। यह page प्रत्येक tier को wire करने के लिए step-by-step गाइड है। अपने budget और observability ज़रूरतों से मेल खाने वाला path चुनें।
Tier matrix
| Tier | लागत | Production प्रभाव | Unlocks |
|---|---|---|---|
TIER C · ALWAYS-ON Local samples | US$ 0 | कोई नहीं | RU Budget (केवल app), Throttling RCA (headers से 429), Hot Partitions heat, Query Cost — सब कुछ captured response headers से। केवल NoSqlStudio traffic देखता है। |
TIER B · FREE Azure Monitor | US$ 0 | कोई नहीं — ARM से platform metrics पढ़ता है, Cosmos data plane को कभी नहीं छूता। | Aggregate RU Budget, Throughput Optimizer, Throttling count, प्रति PartitionKeyRangeId Hot Partitions — production traffic को कवर करता है। |
TIER A · PAID Log Analytics | ~US$ 2.50 / GB ingest + retention | Microsoft द्वारा minimal के रूप में documented; ingestion stream लगातार चलता है। | App में पूर्ण per-shape KQL, Diagnostic Logs pane, per-shape Throttling RCA, real workload traces से composite-index recommendations। |
FREE — Azure Monitor + Local samples
Setup time: ~10 मिनट। लागत: US$ 0/माह। प्रभाव: production पर शून्य। RU Budget, Throughput Optimizer, Throttling count, Hot Partitions (aggregate), Query Cost (in-app) कवर करता है।
Part A — Azure portal / CLI
1. एक Service Principal बनाएँ
Portal: Azure Active Directory → App registrations → New registration → नाम nosqlstudio-cosmos-reader। Application (client) ID, Directory (tenant) ID कॉपी करें, और Certificates & secrets में Client Secret बनाएँ।
CLI समतुल्य:
az ad sp create-for-rbac \ --name nosqlstudio-cosmos-reader \ --role "Monitoring Reader" \ --scopes /subscriptions/<SUB_ID>/resourceGroups/<RG_NAME>
2. Role Monitoring Reader असाइन करें
न्यूनतम scope: Cosmos account रखने वाला resource group। यदि आप विभिन्न RGs में कई Cosmos accounts कवर करना चाहते हैं, subscription level पर असाइन करें।
az role assignment create \ --assignee <APP_ID> \ --role "Monitoring Reader" \ --scope /subscriptions/<SUB_ID>/resourceGroups/<RG_NAME>
3. Cosmos Resource ID कॉपी करें
Format: /subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.DocumentDB/databaseAccounts/<account>
az cosmosdb show -n <ACCOUNT_NAME> -g <RG_NAME> --query id -o tsv
Part B — NoSqlStudio
- NoSqlStudio में अपने Cosmos account से कनेक्ट करें।
- Cosmos Optimizer खोलें (
Ctrl+Alt+Shift+Yया Tools menu)। - Cloud Credentials tab पर जाएँ।
- TIER B · FREE — Azure Monitor में भरें: Resource ID, Tenant ID, Client ID, Client secret।
- TIER A section में Workspace ID (GUID) को खाली छोड़ें — आप paid tier से opt out कर रहे हैं।
- Save credentials (encrypted) पर क्लिक करें।
Part C — Verify करें
RU Budget tab पर वापस जाएँ। Source-mode banner को एक हरा Azure Monitor chip + पाठ aggregate only — no per-shape breakdown दिखाना चाहिए। Refresh पर क्लिक करें — संख्याएँ 1-2 मिनट में populate होती हैं (fresh metrics उपलब्ध होने में Azure को कुछ मिनट लग सकते हैं)।
PAID — Log Analytics जोड़ें
Setup time: अतिरिक्त ~15 मिनट। लागत: ~US$ 2.50/GB ingested + ~US$ 0.10/GB-माह retention। केवल तभी करें जब आपको per-shape granularity चाहिए — 90% जाँचों के लिए, अकेला Azure Monitor पर्याप्त है।
Part A — एक Log Analytics workspace बनाएँ
az monitor log-analytics workspace create \ -g <RG_NAME> -n nosqlstudio-cosmos-logs \ --retention-time 30 \ --location <REGION>
Part B — Logs सक्रिय करने से पहले cost guardrails लगाएँ
- छोटी retention: अधिकांश tiers पर न्यूनतम 30 दिन।
- दैनिक cap (जैसे 1 GB/दिन): अधिक होने पर ingestion रोकता है — मौजूदा डेटा अभी भी queryable।
- Subscription पर Budget alert (जैसे US$ 50/माह 80% पर alert के साथ)।
az monitor log-analytics workspace update \ -g <RG_NAME> -n nosqlstudio-cosmos-logs \ --quota 1
Part C — Cosmos account पर Diagnostic Settings सक्रिय करें
Portal: Cosmos DB → Monitoring → Diagnostic settings → Add। केवल वही tick करें जो वास्तव में आपको चाहिए:
- MongoRequests — आवश्यक, जो in-app KQL pane query करता है।
- DataPlaneRequests — वैकल्पिक, Mongo API के लिए MongoRequests से info duplicate करता है।
- ControlPlaneRequests — छोड़ दें; केवल admin operations।
- QueryRuntimeStatistics, PartitionKeyStatistics — सबसे महँगे, स्पष्ट रूप से आवश्यक न होने तक छोड़ दें।
Destination: Resource specific table type (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 truePart D — Service Principal को Log Analytics Reader दें
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)
Part E — Workspace ID (GUID) कॉपी करें
महत्वपूर्ण: यह Resource ID नहीं है — यह एक अलग GUID है। Portal में Log Analytics workspace → Overview → Workspace ID के तहत मिलता है।
az monitor log-analytics workspace show \ -g <RG_NAME> -n nosqlstudio-cosmos-logs \ --query customerId -o tsv
Part F — NoSqlStudio
- Cloud Credentials tab → TIER A · PAID — Log Analytics section।
- GUID को Workspace ID (GUID) में paste करें।
- Save पर क्लिक करें।
Part G — Verify करें
Diagnostic Logs (KQL) pane: banner अब Log Analytics — full granularity दिखाता है। Run in app बटन unlock होता है। "Slow queries — last 1 hour" template चुनें, Run पर क्लिक करें। परिणाम नीचे table में render होते हैं।
त्वरित निर्णय तालिका
| परिदृश्य | अनुशंसा |
|---|---|
| Dev cluster, test environment | Path 1 (FREE)। Log Analytics छोड़ दें। |
| Production cluster, healthy — basic observability चाहते हैं | Path 1 (FREE)। |
| Active incident — जानना है कि 14:32 पर कौन सी query spiked | Path 1 + 2 अस्थायी रूप से। जाँच के बाद Diagnostic Setting निष्क्रिय करें। |
| Compliance — N दिनों के लिए log retention आवश्यक | Path 1 + 2 स्थायी। Daily cap अनिवार्य। |
| कोई Azure budget बिल्कुल नहीं | केवल TIER C (Local samples)। Cloud Credentials खाली छोड़ें। Workspace स्वचालित रूप से fall back करता है — केवल Diagnostic Logs (KQL) खोता है। |
Troubleshooting — “मैंने Diagnostic Setting बनाया लेकिन कोई data flow नहीं हो रहा”
एक बिल्कुल नया Diagnostic Setting कभी-कभी 30+ मिनटों (या कभी नहीं) तक events emit करना शुरू करने से इनकार करता है, भले ही management plane इसे “active” रिपोर्ट करे। यह Azure Monitor की एक ज्ञात quirk है जब उसी resource पर एक पिछला setting हाल ही में delete किया गया था, या जब केवल एक single log category enabled है।
कैसे पुष्टि करें कि आप इस state में फँसे हैं
नीचे दिया probe चलाएँ — workspace के Logs blade के अंदर (केवल KQL भाग) या आपके terminal से az CLI के माध्यम से, दोनों काम करते हैं। <your-workspace-guid> को उस GUID से बदलें जो आपने Workspace → Overview → Workspace ID से कॉपी किया। यदि account सक्रिय रूप से traffic serve कर रहा है और cnt 10 मिनट से अधिक 0 पर रहता है, तो आप फँसे हैं।
az monitor log-analytics query \
--workspace <your-workspace-guid> \
--analytics-query "CDBMongoRequests | where TimeGenerated > ago(10m) | summarize cnt=count()" \
-o tableवह workaround जो इसे unstick करता है
Diagnostic Setting को delete करें और केवल MongoRequests के बजाय तीन log categories एक साथ enabled के साथ इसे फिर से बनाएँ। अतिरिक्त categories उस diagnostic pipeline को prime करती हैं जिसे single-category setting initialise करने में विफल रहा।
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 trueRecreate के बाद, KQL probe फिर से चलाएँ। Events आमतौर पर 3–7 मिनटों में दिखाई देते हैं। एक बार flow होने पर, आप तीनों categories enabled छोड़ सकते हैं (अतिरिक्त दो थोड़ा अधिक ingestion खर्च करती हैं लेकिन आपको CDBQueryRuntimeStatistics और CDBDataPlaneRequests में query plan + raw request payloads देती हैं), या pipeline के warm up होने के बाद अतिरिक्त को disable कर दें।
जब workaround भी काम न करे
- पुष्टि करें कि Cosmos account API MongoDB है (
az cosmosdb show --ids "$RID" --query "kind"चलाएँ — इसेMongoDBprint करना चाहिए;MongoRequestsकेवल उस API के लिए fire होता है)। - पुष्टि करें कि workspace region Cosmos account region से मेल खाता है (cross-region pipelines धीमे होते हैं और कभी-कभी पहला घंटा drop कर देते हैं)।
- किसी भी failed diagnostic-setting operation के लिए
az monitor activity-log list --resource-id "$RID" --offset 1hजाँचें। - अंतिम उपाय: एक Azure support ticket खोलें — diagnostic pipeline पूरी तरह Microsoft-managed है और हम इसे बाहर से और inspect नहीं कर सकते।
बाद में भुगतान बंद करने के लिए अक्षम करना
- NoSqlStudio: Cloud Credentials → Workspace ID (GUID) delete करें → Save। App स्वचालित रूप से Azure Monitor पर fall back करता है (banner सेकंडों में हरा हो जाता है)।
- Azure: Cosmos account → Diagnostic settings → setting delete करें। Ingestion stream को रोकता है।
- वैकल्पिक: यदि किसी और चीज़ के लिए उपयोग नहीं हो रहा है तो Log Analytics workspace delete करें। अन्यथा छोड़ दें — कोई नया log नहीं आने से retention cost शून्य हो जाती है।