运维部署
为指定服务创建、更新或复制 Coralogix 仪表盘时…
当需要为某个服务基于日志、Span、指标和服务规格生成、验证并部署 Coralogix 监控仪表盘时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
为指定服务创建、更新或复制 Coralo特定
解决思路
- 加载 `references/dataprime-reference.md` 获取 DataPrime 查询语法。
- 加载 `references/promql-guidelines.md` 获取 PromQL 查询语法、counter vs gauge、histogram 指南。
- 加载 `references/logs-querying.md` 获取日志字段发现、查询模式和 wildfind 策略。
- 加载 `references/spans-querying.md` 获取 Span 字段发现、延迟分析和 trace 查询。
- 加载 `references/query-syntax.md` 获取仪表盘特定查询陷阱(`${__range}`、`promqlQueryType`)。
- 加载 `references/widget-templates.md` 获取 widget JSON 模板。
- 选择正确信号时使用 `cx-telemetry-querying`。
- 运行 `cx dashboards catalog -o json` 列出 catalog 中所有仪表盘。
- 运行 `cx dashboards get <id> -o json` 获取仪表盘定义,可作为模板。
- 运行 `cx dashboards folders list -o json` 列出仪表盘文件夹。
- 运行 `cx dashboards folders create --name "Name"` 创建仪表盘文件夹。
- 运行 `cx dashboards folders create --name "Sub" --parent-id <id>` 创建嵌套文件夹。
- 运行 `cx dashboards replace --from-file dashboard.json` 用更新后的 JSON 替换已有仪表盘。
- 运行 `cx dashboards check --from-file dashboard.json` 在不持久化的情况下校验仪表盘定义(服务端严格检查;出错时非零退出)。
- 运行 `cx dashboards check <dashboard-id>` 按 id 校验已存储的仪表盘。
- 更新已有仪表盘时,运行 `cx dashboards get <dashboard-id> -o json > dashboard.json`。
- 编辑 `dashboard.json`,修改名称、widget 等。
- 运行 `cx dashboards replace --from-file dashboard.json` 完成更新。
- 复制仪表盘为新副本时,运行 `cx dashboards get <dashboard-id> -o json > dashboard.json`。
- 删除 JSON 中的 `id` 字段,然后作为新仪表盘创建:`cx dashboards create --from-file dashboard.json`。
- 按检查清单跟踪进度:Phase 1 发现遥测与业务含义。
- Phase 2 从用户收集仪表盘规格。
- Phase 3 起草内部仪表盘计划(sections/rows/widgets)。
- Phase 4 生成 Coralogix JSON。
- Phase 5 通过 cx CLI 实时验证每个查询。
- Phase 6 按清单自检结构。
- Phase 7 通过 `cx dashboards check` 做服务端校验。
- Phase 8 通过 `cx dashboards create` 部署。
- Phase 9 与用户分享仪表盘链接。
- 按顺序推进;不要在用户批准 Phase 3 计划前跳到 Phase 4。
- 不要在 Phase 5–7 全部通过前运行 Phase 8。
- Phase 9 是强制步骤;直到用户拿到可点击链接才结束。
- 读取 `README.md` 与顶层入口(`main.*`、`index.*`、`cmd/main.go` 等),用 2–3 句话总结目标服务做什么、关键阶段、可能出错的地方。
- 对每个候选关键词(服务名、子系统、`request`、`error`、`latency`、`dlq` 等动词)运行 `cx metrics search --name '*<keyword>*'`。
- 当某个 metric 看起来有希望时,用 `cx metrics get-labels <metric>` 列出其 labels。
- 只使用 `cx metrics search` 返回的 metric 名称,以防止虚构 metric 进入 Phase 5。
- 交叉检查服务 instrumentation(`prometheus_client`、`promauto.NewCounter/Histogram/Gauge`、OTel meters、`prom-client`、Micrometer、`metrics.py`)以确认语义和 histogram buckets(`_sum`、`_count`、`_bucket`)。
- 在假定自定义 `$d.*` 字段存在前,用 `cx search-fields "<description>" --dataset logs` 发现它。
- 用 `cx logs "filter \$l.applicationname == '<app>'" --limit 5 -o json` 采样 message templates 和 severity。
- 标准字段(`$m.severity`、`$m.timestamp`、`$l.applicationname`、`$l.subsystemname`)不需要发现。
- 用 `cx search-fields "<description>" --dataset spans` 发现 span attributes。
- 用 `cx spans "filter \$l.serviceName == '<svc>'" --limit 5 -o json` 采样。
- 错误约定会变化(`$d.tags.error`、`$d.http.status_code`);过滤前先检查样本。
- grep Kafka、RabbitMQ、SQS、Pub/Sub 客户端以及任何 `dlq`/`DLQ` 引用。
- 记录 topic/queue 名称用于 DLQ panels。
- 检查 `meta.yaml`、Helm `values.yaml`、`Deployment`、`Dockerfile`、`chart.yaml`。
- 提取在 Coralogix 中出现的 `applicationname` / `subsystemname` label 值。
- 提取用作 metric 或 log labels 的 tenant/account/team 标识符。
- 提取部署环境(`prod`、`staging`、`dev` 等)。
- 如果问题对应的信号不明确(例如“上周收入多少”),先委托给 `cx-telemetry-querying`。
- 继续前生成简短内部摘要。
- 如果关键遥测缺失(例如没有 metrics),向用户指出并询问是否要 log-only 或 trace-only dashboard。
- 向用户询问一小组聚焦问题(≤6),优先用 `AskQuestion`。
- 询问 Audience & use:on-call triage、product/business tracking、capacity planning、customer success?
- 询问 Default time range:典型查看窗口(如 24h、7d);查询仍使用 `${__range}` 以便用户缩放。
- 询问 Slicing dimensions:顶层 filters(`tenant_id`、`account_id`、`subsystem_name`、`region`、`env` 等)。
- 询问 Environment scope:包含/排除哪些环境(常见默认:排除 `dev`、`staging`、`test`)。
- 询问 SLO-ish signals:要突出显示的 success-rate、latency、throughput 目标?
- 询问 Priorities:先看什么,决定 row 顺序和哪个 section 设 `collapsed: true`。
- 不要因可合理推断的答案而阻塞;说明推断并继续。
- 写一份用户可在生成 JSON 前批准的 markdown 计划,包含 `## Dashboard: <Service> - <Purpose>`。
- 计划中包含各 section:`### Section 1: <Overview> (collapsed: false)`。
- 计划中包含各 row:`- Row 1: [widget type] <title> - <what it shows> - source: metrics|logs|spans`。
- 计划中包含 `### Top-level filters` 和 `- <label> (<source>)`。
- 计划中包含 `### Assumptions / gaps`。
- Section design:第一个 section 为 at-a-glance health(gauges + key rates),始终展开。
- Section design:把相关 time-series 放在同一 row(rate + latency)。
- Section design:最后一个 section(raw logs、rare breakdowns)设 `collapsed: true`。
- Section design:目标 3–5 个 sections、6–20 个 widgets。
- Widget 类型选择:单个 headline number(count、% success、totals)用 `gauge`,Coralogix 称之为 “stat”。
- Widget 类型选择:≤8 个类别的 breakdown 用 `pieChart`。
- Widget 类型选择:随时间变化(rate、latency、count per bucket)用 `lineChart`。
- Widget 类型选择:Top-N tables、last errors、per-entity listings 用 `dataTable`。
- 除非用户要求,不要使用其他 widget 类型。
- 等待用户批准或调整计划后再生成 JSON。
- 按 `references/widget-templates.md` 生成单个 JSON 文档。
- Top-level shape 为:`{"id": "<21-char-nanoid>", "name": "<Dashboard Name>", "layout": { "sections": [ ... ] }, "variables": [], "variablesV2": [], "filters": [ ... ], "relativeTimeFrame": "<seconds>s", "annotations": [], "off": {}, "actions": []}`。
- 为每个 `section`、`row`、`widget` 和 query `id` 使用全新的 UUID。
- Row height 使用 `"appearance": { "height": 19 }`,除非有理由更改。
- Section options 包含 `options.custom.name`、`collapsed` 和 `color.predefined: "SECTION_PREDEFINED_COLOR_UNSPECIFIED"`。
- Filters:为 Phase 2 的每个 slicing dimension 写一个条目。
- Filters 默认 operator 为 `equals` 且 `values` 为空,便于用户填写。
- 对排除环境使用 `notEquals`,见 `references/widget-templates.md`。
- `relativeTimeFrame` 默认 `"172800s"`(48h),除非用户另有指定。
- Query 语法遵循 `references/query-syntax.md`。
- 完整查询语言加载 `references/dataprime-reference.md` 和 `references/promql-guidelines.md`。
- 在 Phase 8 前,draft 中每个 PromQL 和 DataPrime query 都必须通过 `cx` 成功运行。
- 这能捕获虚构 metric 名称、拼错 field path、格式错误 pipeline。
- Frequent(`TIER_FREQUENT_SEARCH`):热层,用于最近 logs/spans 的快速搜索。
- Archive(`TIER_ARCHIVE`):冷层,用于较旧 logs/spans(长期)。
- 选择 Frequent 用于 on-call 和最近调查(小时/天)。
- 选择 Archive 用于长回溯(周/月)或时间范围超出热保留期时。
- PromQL 验证:将 `relativeTimeFrame` 映射为 `$RANGE` token(例如 `172800s` 用 `48h`)。
- PromQL 验证:在 CLI 调用中用 `[$RANGE]` 替换 `${__range}`,然后在 Phase 6 前在 JSON 中恢复 `${__range}`。
- PromQL 验证:range vector 对窗口敏感,检查必须匹配 dashboard 将评估的内容。
- DataPrime 验证:用固定短窗口(`now-15m` → `now`,`--limit 1`)验证。
- DataPrime 验证目标:语法/字段/pipeline 校验,不是 dashboard 窗口上的数据存在性;短窗口更快、失败信号更干净。
- 完整流程(CLI 调用、`$RANGE` 映射表、重试预算、失败模式)见 `references/verification.md`。
- 如果 query 在重试预算内无法通过,把 CLI 错误原文展示给用户——不要发布损坏 widget。
- Query syntax 检查:metrics widget 中每个 PromQL range vector 使用 `[${__range}]`——绝不用 `[$__range]`,绝不用 `[5m]`(除非 panel 有意为 sliding window)。
- Query syntax 检查:单值 widgets(gauge、pieChart、dataTable)的 `promqlQueryType` 为 `PROM_QL_QUERY_TYPE_INSTANT`;`lineChart` 省略。
- Query syntax 检查:DataPrime log queries 使用 `$d.message` / `$l.applicationname` / 不带引号的 severity enums,完整规则见 `references/dataprime-reference.md`。
- Query syntax 检查:每个 DataPrime widget query 以 `source logs` 或 `source spans` 开头;dashboard widgets 需要 source 前缀,Phase 5 验证会剥离它再交给 `cx logs` / `cx spans`。
- Query syntax 检查:success-rate 分母包在 `clamp_min(..., 1)` 中。
- Query syntax 检查:histogram queries 使用正确后缀(`_sum`、`_count`、`_bucket`)。
- Query syntax 检查:widget queries 在没有 dashboard-level `filters` 时也有效——Coralogix 在渲染时注入它们。
- Structure 检查:每个 section 有 `id.value`、`rows`、`options.custom`。
- Structure 检查:每个 row 有 `id.value`、`appearance.height`、`widgets`。
- Structure 检查:每个 widget 有唯一 `id.value`,`definition` 恰好包含 `gauge` / `pieChart` / `lineChart` / `dataTable` 之一。
- Structure 检查:每个 gauge 有数值 `min` 和 `max`,且 `min < max`。
- Structure 检查:success-rate gauges 使用 `thresholdType: "THRESHOLD_TYPE_ABSOLUTE"`,高值绿色;error/DLQ gauges 高值红色。
- Structure 检查:`Total` / `stat` widgets 编码为 `gauge`,不是 stat 类型。
- Structure 检查:top-level `filters` 包含 Phase 2 的每个 slicing dimension。
- Structure 检查:所有 IDs 是新生成 UUID,在文档内唯一。
- Content 检查:dashboard name 具有描述性(`<Service> - <Purpose>`)。
- Content 检查:widget titles 简短、人类可读,并与 query 计算内容匹配。
- Content 检查:logs/errors section 为 `collapsed: true`,除非用户另有说明。
- 如果任何检查失败,修复并重新检查,然后再进入 Phase 7。
- 运行 `cx dashboards check --from-file /tmp/cx-dashboard-<slug>.json`。
- 如果命令非零退出,输出会列出 issues,包含 `severity`、`location`(指向 dashboard 的 RFC 6901 JSON Pointer,例如 `/sections/0/rows/1/widgets/2`)和 `message`。
- 在 JSON 中修复每个 issue,回到 Phase 4。
- 对任何更改过的 query 重新运行 Phase 5。
- 重新运行 Phase 7。
- 当 `check` 退出 0(文本输出:`Dashboard is valid (no issues)`)时,进入 Phase 8。
- `check` 是只读的——绝不持久化 dashboard。
- Warnings(`SEVERITY_WARNING`)会打印但不使 gate 失败;只有 errors(`SEVERITY_ERROR`)导致非零退出。
- 在多 profile fan-out 中,任何 profile 返回 errors 都会使命令失败。
- 不要告诉用户把 JSON 粘贴到 Coralogix UI——直接部署。
- 列出 folders:`cx dashboards folders list -o json`。
- 建议最匹配的 folder(团队、产品区域,或以服务命名的 folder)。
- 如果没有匹配,默认根目录(省略 `--folder`)。
- 把已验证 JSON 写入 temp file,并运行 `cx dashboards create --from-file /tmp/cx-dashboard-<slug>.json --folder <id>`。
- CLI 生成 `requestId` envelope 并打印创建的 dashboard ID。
- 完整流程(folder-picking UX、命令模板、idempotency note)见 `references/deploy.md`。
- 失败时:原样展示 CLI 错误并返回 Phase 5。
- 最常见原因是 query 在本地可解析但 live API 拒绝。
- 在 Phase 8 成功后,捕获 `cx dashboards create` 打印到 stderr 的 `View in Coralogix: <url>` 行;何时省略见 `references/deploy.md` § "Share the link"。
- 发出指定输出模板,并把 dashboard name 渲染为链接文本——这是用户点击的内容。
- 链接到通过 `cx dashboards catalog` 找到的 dashboard(而非刚创建的)时:`catalog` 只打印一个指向 catalog page 的链接,不是 per-dashboard 链接。
- 要从该列表链接到某个特定 dashboard,构建 `<base>/dashboards/<dashboard_id>`。
- `<base>` 是本次会话中任何 `cx dashboards` 命令打印的 `View in Coralogix: <base>/...` 行里已经出现的 console URL——绝不自己捏造 `<base>`,也绝不在尚未打印此类行时发明它。
- 当 `cx dashboards create` 打印了 `View in Coralogix:` 链接时,输出模板包含 `## Plan`、`## Verification`(PromQL queries verified: <N>/<N>、DataPrime queries verified: <N>/<N>)、`## Deployed`(Dashboard 名称链接、ID、Folder、Profile)、`Open it:` 链接,以及提示打开后调整 filter 值(如 `account_id`)。
- 当 `cx dashboards create` 未打印 `View in Coralogix:` 行(profile 无法解析 console link 且未配置 `console_url` override)时,完全省略链接——不要发明 URL。
- 在未打印链接的模板中,`## Deployed` 写 `- Dashboard: **<Name>** (open via the Coralogix UI; ID `<id>`)`、`- ID`、`- Folder`、`- Profile`,并提示打开后调整 filter 值。
- 相关技能:`cx-observability-setup` 用于完整监控 setup workflow(views、webhooks、notifications、integrations)。
- 相关技能:`cx-slos` 用于可在 dashboard 上展示的 SLO-connected reliability targets。
- 相关技能:`cx-cases` 用于 triage dashboard 所监控服务产生的 cases。
- 相关技能:`cx-telemetry-querying` 用于在构建 dashboard 前发现正确 telemetry signal。
- 参考:Coralogix Custom Dashboards docs: https://www.coralogix.com/docs/user-guides/custom-dashboards/introduction/
- 参考:inline DataPrime help 用 `cx dataprime list`、`cx dataprime show <command>`。
适用边界 · 注意事项
- 没有 Coralogix 账号、`cx` CLI 或目标服务的日志/Span/指标遥测时。
- 需要为其他可观测平台或非 Coralogix 仪表盘创建仪表盘时。
- 无法联网实时验证查询或通过 `cx` 部署时。