跳转到内容
← Cosmos workspace

Cosmos 监控设置

NoSqlStudio 通过分层数据源读取 Cosmos 指标。本页是接入每个层级的分步指南。选择符合您预算和可观测性需求的路径。

层级矩阵

层级成本生产影响解锁
TIER C · ALWAYS-ON
Local samples
US$ 0RU 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 + retentionMicrosoft 记录为最小;ingestion 流持续运行。应用内完整的 per-shape KQL、Diagnostic Logs pane、per-shape Throttling RCA、来自真实 workload traces 的 composite-index 推荐。
Path 1

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) IDDirectory (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

  1. 在 NoSqlStudio 中连接到您的 Cosmos 账户。
  2. 打开 Cosmos Optimizer(Ctrl+Alt+Shift+Y 或 Tools 菜单)。
  3. 前往 Cloud Credentials tab。
  4. TIER B · FREE — Azure Monitor 中填写:Resource IDTenant IDClient IDClient secret
  5. 将 TIER A 部分中的 Workspace ID (GUID) — 您选择退出付费层级。
  6. 点击 Save credentials (encrypted)

Part C — 验证

返回 RU Budget tab。source-mode banner 应显示绿色 Azure Monitor chip + 文本 aggregate only — no per-shape breakdown。点击 Refresh — 数字在 1-2 分钟内填充(Azure 可能需要几分钟才能让新鲜指标可用)。

Path 2

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 — 跳过;仅管理操作。
  • QueryRuntimeStatisticsPartitionKeyStatistics — 最昂贵,除非明确需要,否则跳过。

目标: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 true

Part 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

  1. Cloud Credentials tab → TIER A · PAID — Log Analytics 部分。
  2. 将 GUID 粘贴到 Workspace ID (GUID)
  3. 点击 Save。

Part G — 验证

Diagnostic Logs(KQL)pane:banner 现在显示 Log Analytics — full granularityRun 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 成本,但能在 CDBQueryRuntimeStatisticsCDBDataPlaneRequests 中为您提供 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 托管,我们无法从外部进一步检查它。

之后禁用以停止付费

  1. NoSqlStudio:Cloud Credentials → 删除 Workspace ID (GUID) → Save。应用自动回退到 Azure Monitor(banner 在几秒内变为绿色)。
  2. Azure:Cosmos 账户 → Diagnostic settings → 删除 setting。停止 ingestion 流。
  3. 可选:如果 Log Analytics workspace 不用于其他任何东西,则删除它。否则保留 — 保留成本随着没有新日志流入而降到零。