监控
Ongrid 开箱发一条能用的监控管线,并设计为贴合你已有的那条。
数据面
edge:
hostmetrics, procmetrics, node-exporter ─┐
│ remote_write (HTTPS direct)
▼
┌─────────┐
│ Prom │ (default: bundled)
└────┬────┘
│ query_range / instant
▼
┌──────────────────────┐
│ manager: │
│ - alert evaluator │
│ - query_promql │
│ - /api/grafana │
└──────────────────────┘默认是 docker-compose 里 prometheus:9090 上的内置 Prometheus。edge 通过 HTTPS 直接推到它 —— 不 scrape,不发现节点。这是 ADR-014 的数据面 / 控制面 分离:geminio tunnel 走控制,遥测直走。
为什么直推,不走 tunnel
在 50 台 host 装机上、cardinality ≥ 5k series/sec 时,把 remote_write 多路 复用到 geminio 控制 tunnel 上就堵了。直接 remote_write 把 manager 从热路径 上拿掉,让 Prom 自己的 write-ahead-log 处理摄入缓冲。代价是多暴一个 HTTPS 端点;nginx 反代片段见 服务端安装。
内置 vs 外接 Prom
两种模式都是一等公民。
内置(默认)
docker compose up 起 prometheus:v2.55,带 --web.enable-remote-write-receiver。 存储是命名卷 ongrid_prom_data。保留期默认 15d —— 在 .env 里通过 PROMETHEUS_RETENTION 调。
manager 通过 ONGRID_PROM_QUERY_URL env 在 http://prometheus:9090 上跟它 说话。不需要别的配置。
外接
把 ONGRID_PROM_QUERY_URL 指向你自己的 Prom / VictoriaMetrics / Thanos 查询端点。edge 还是 remote_write —— 通过 Edge 插件配置里每 edge 的 remote_write_url 指向你的摄入 URL (internal/manager/biz/edge/plugin_config.go)。
云端内置那份 Prom 可以继续跑,作为只 scrape manager 本身的 "self-observability" Prom(ADR-026 self-obs 指标住这)。需要两边都覆盖的告警可以定义两次,带不 同的 match_scope_types。
查询路径
两个消费方,一个 client。
告警 evaluator
PipelineEvaluator.evaluatePromQuery 每 tick 跑每条启用 metric_raw 规则 的 Expr。PromQL 自己的比较运算符(up == 0、cpu_pct > 90)就是谓词 —— Prom 把不匹配的 series 从响应里丢掉,所以 evaluator 按返回 vector 每个 条目触发一条 incident,剩下的在下一 tick 的 recovery sweep 里收掉。
// pipeline.go:269
res, err := e.prom.Query(ctx, rule.Expr, now)
// ...
for _, ent := range entries {
dedupeKey := fmt.Sprintf("pipeline:%s:%s", rule.RuleKey, labelSetKey(ent.Metric))
// ... RecordFiring + notify
}query_promql 工具
LLM 拿到一个叫 query_promql 的 BaseTool,吃 instant 或 range 查询,返回 JSON vector / matrix。investigator persona 把它当主要指标探针;coordinator chat 用它来回答 "edge-prod-04 现在 CPU 多少?"。
Schema 在 query_promql_basetool.go; 底层引擎是 internal/pkg/promquery。
内嵌 Grafana
compose 里发 Grafana 在 grafana:3000。manager 通过 /api/grafana/* 反代 (认证在代理层做),让 SPA 的 MonitorPanel.tsx 一键嵌 iframe —— 不用单 独登录 Grafana。
开箱即用的情况下,manager 通过 biz/grafana/Service 按同步 tick 把内部 monitor 面板定义镜像到 Grafana 里。运维在 Grafana (富编辑器)里改面板,manager 捡回来。SPA 的 MonitorEditor 页面是个轻量 的 "读完跳转",把 Grafana 面板编辑器弹出来并预填相关 series。
Grafana 凭证
内置 Grafana 出厂账号是 admin / admin。暴露前先改。参见 首次启动清单。
self-observability
ADR-026 给 manager 接上 /metrics 加 6 条基线告警(LLM token 飙升、告警 evaluator 卡住、tunnel 断连风暴、审计日志延迟、investigator 积压、RCA 延迟 p99)。首次启动时种到规则 + dashboard 表里,每次升级都会重新断言。
内置 Prom 会去 scrape manager 的 /metrics。外接 Prom 模式需要你在 manager:9100(默认 ONGRID_METRICS_ADDR)加一个 scrape target。