层级矩阵
| 层级 | 成本 | 生产影响 | 解锁 |
|---|---|---|---|
TIER C · ALWAYS-ON Local samples | US$ 0 | 无 | RU Budget(仅应用)、Throttling RCA(headers 中的 429)、Hot Partitions heat、Query Cost — 全部来自捕获的响应 headers。仅看到 NoSqlStudio 流量。 |
TIER B · FREE Azure Monitor | US$ 0 | 无 — 从 ARM 读取平台指标,从不触及 Cosmos data plane。 | Aggregate RU Budget、Throughput Optimizer、Throttling 计数、per PartitionKeyRangeId Hot Partitions — 覆盖生产流量。 |
TIER A · PAID Log Analytics | ~US$ 2.50 / GB ingest + retention | Microsoft 记录为最小;ingestion 流持续运行。 | 应用内完整的 per-shape KQL、Diagnostic Logs pane、per-shape Throttling RCA、来自真实 workload traces 的 composite-index 推荐。 |
FREE — Azure Monitor + Local samples
设置时间:~10 分钟。成本:US$ 0/月。影响:生产零影响。覆盖 RU Budget、Throughput Optimizer、Throttling 计数、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. 分配 Monitoring Reader 角色
最小范围:持有 Cosmos 账户的资源组。如果想覆盖不同 RG 中的多个 Cosmos 账户,在订阅级别分配。
az role assignment create \ --assignee <APP_ID> \ --role "Monitoring Reader" \ --scope /subscriptions/<SUB_ID>/resourceGroups/<RG_NAME>
3. 复制 Cosmos Resource ID
格式:/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 账户。
- 打开 Cosmos Optimizer(
Ctrl+Alt+Shift+Y或 Tools 菜单)。 - 前往 Cloud Credentials tab。
- 在 TIER B · FREE — Azure Monitor 中填写:Resource ID、Tenant ID、Client ID、Client secret。
- 将 TIER A 部分中的 Workspace ID (GUID) 留空 — 您选择退出付费层级。
- 点击 Save credentials (encrypted)。
Part C — 验证
返回 RU Budget tab。source-mode banner 应显示绿色 Azure Monitor chip + 文本 aggregate only — no per-shape breakdown。点击 Refresh — 数字在 1-2 分钟内填充(Azure 可能需要几分钟才能让新鲜指标可用)。
PAID — 添加 Log Analytics
设置时间:额外 ~15 分钟。成本:~US$ 2.50/GB 摄入 + ~US$ 0.10/GB-月 保留。仅在您需要 per-shape 粒度时才这样做 — 对于 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 — 启用日志之前设置 cost guardrails
- 短保留:大多数层级最少 30 天。
- 每日上限(例如 1 GB/天):超出时停止 ingestion — 现有数据仍可查询。
- 订阅上的 Budget 告警(例如 US$ 50/月,80% 时告警)。
az monitor log-analytics workspace update \ -g <RG_NAME> -n nosqlstudio-cosmos-logs \ --quota 1
Part C — 在 Cosmos 账户上启用 Diagnostic Settings
Portal:Cosmos DB → Monitoring → Diagnostic settings → Add。仅勾选您真正需要的:
- MongoRequests — 必需,in-app KQL pane 查询的内容。
- DataPlaneRequests — 可选,为 Mongo API 复制 MongoRequests 的信息。
- ControlPlaneRequests — 跳过;仅管理操作。
- QueryRuntimeStatistics、PartitionKeyStatistics — 最昂贵,除非明确需要,否则跳过。
目标:Resource specific 表类型(比 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 部分。
- 将 GUID 粘贴到 Workspace ID (GUID)。
- 点击 Save。
Part G — 验证
Diagnostic Logs(KQL)pane:banner 现在显示 Log Analytics — full granularity。Run in app 按钮解锁。选择 "Slow queries — last 1 hour" template,点击 Run。结果在下方表格中渲染。
快速决策表
| 场景 | 推荐 |
|---|---|
| Dev cluster,测试环境 | Path 1(FREE)。跳过 Log Analytics。 |
| 生产 cluster,健康 — 需要基本可观测性 | Path 1(FREE)。 |
| 活动事件 — 需要知道哪个 query 在 14:32 spiked | 暂时使用 Path 1 + 2。调查后禁用 Diagnostic Setting。 |
| 合规 — 需要 N 天的日志保留 | 永久使用 Path 1 + 2。每日上限是强制的。 |
| 完全没有 Azure 预算 | 仅 TIER C(Local samples)。将 Cloud Credentials 留空。Workspace 自动回退 — 仅丢失 Diagnostic Logs(KQL)。 |
Troubleshooting — “我创建了 Diagnostic Setting 但没有数据流入”
一个全新的 Diagnostic Setting 有时会拒绝开始发出事件长达 30+ 分钟(或永远不发),即使 management plane 报告它为“active”。这是 Azure Monitor 的一个已知怪癖,发生在同一 resource 上的前一个 setting 最近被删除时,或仅启用了单个 log 类别时。
如何确认您卡在此状态
运行下面的 probe — 在 workspace 的 Logs blade 内(仅 KQL 部分)或通过终端的 az CLI 都可以工作。将 <your-workspace-guid> 替换为您从 Workspace → Overview → Workspace ID 复制的 GUID。如果在账户正积极服务流量时 cnt 保持为 0 超过 10 分钟,您就卡住了。
az monitor log-analytics query \
--workspace <your-workspace-guid> \
--analytics-query "CDBMongoRequests | where TimeGenerated > ago(10m) | summarize cnt=count()" \
-o table解除卡顿的变通办法
删除 Diagnostic Setting,并以同时启用三个 log 类别而非仅 MongoRequests 重新创建它。额外的类别会激活单类别 setting 未能初始化的诊断 pipeline。
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重新创建后,重新运行 KQL probe。事件通常在 3–7 分钟内出现。一旦开始流动,您可以保持三个类别全部启用(额外两个会多花一点 ingestion 成本,但能在 CDBQueryRuntimeStatistics 和 CDBDataPlaneRequests 中为您提供 query plan + 原始请求 payloads),或在 pipeline 预热后禁用额外的类别。
当连变通办法也不起作用时
- 确认 Cosmos 账户 API 是 MongoDB(运行
az cosmosdb show --ids "$RID" --query "kind"— 必须打印MongoDB;MongoRequests仅对该 API 触发)。 - 确认 workspace 区域与 Cosmos 账户区域匹配(cross-region pipelines 较慢,有时会丢掉第一个小时)。
- 检查
az monitor activity-log list --resource-id "$RID" --offset 1h是否有任何失败的 diagnostic-setting 操作。 - 最后手段:开一张 Azure 支持工单 — diagnostic pipeline 完全由 Microsoft 托管,我们无法从外部进一步检查它。
之后禁用以停止付费
- NoSqlStudio:Cloud Credentials → 删除 Workspace ID (GUID) → Save。应用自动回退到 Azure Monitor(banner 在几秒内变为绿色)。
- Azure:Cosmos 账户 → Diagnostic settings → 删除 setting。停止 ingestion 流。
- 可选:如果 Log Analytics workspace 不用于其他任何东西,则删除它。否则保留 — 保留成本随着没有新日志流入而降到零。