BEACO-216: fix initial monitoring integration (Longhorn scrape, CNPG identities) #280
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "agent/gitops/beaco-216-longhorn-prometheus-allow"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
首次接入的两项最小修复(可审查准备,不是已授权部署)
本 PR 接续 #280,把 2026-10-17 首次接入后发现的两个确定缺陷合并为一份审阅变更;不扩展为新的监控栈或准备套娃。
7775b05990c17c73ae49397a976c839114c1aebcf786e053792778a6aa5afad7387950a0193c41c79f1408c2be5a9b70ba0997edc4acdbd7837f5732fix(storage): allow Prometheus to scrape longhorn-managerf786e053792778a6aa5afad7387950a0193c41c7fix(monitoring): identify CNPG targets by owner kindwanxiang/kubernetes/apps/storage/longhorn/app/networkpolicy-prometheus.yaml(新增)wanxiang/kubernetes/apps/storage/longhorn/app/kustomization.yamlwanxiang/kubernetes/apps/monitoring/prometheus-stack/app/prometheusrule.yamlutils/test-observability-prep.pyverified=true;parent 为当前 main,fast-forward 成立;PR open、mergeable、未合并修复一:Longhorn 采集被 NetworkPolicy 阻断
实际只读核查(2026-10-18)确认:
storage/longhorn-managerNetworkPolicy 的 ingress 只允许 Longhorn 自身组件,未允许monitoring的 Prometheus;3 个longhorn-backendtarget 均health=down(context deadline exceeded),apiserver Service proxy 访问longhorn-backend:9500/metrics也超时。集群无 CiliumNetworkPolicy/CiliumClusterwideNetworkPolicy。新增
storage/longhorn-manager-prometheusNetworkPolicy,只增加一条 additive allow:storage中app=longhorn-managerPodnamespaceSelector(kubernetes.io/metadata.name=monitoring)与podSelector(app.kubernetes.io/name=prometheus且prometheus=kube-prometheus-stack-prometheus)在同一 peer 内形成 AND不开放其他 namespace、其他 Pod 或其他端口;源绑定当前已部署的 Prometheus 实例,不退化为整个
monitoring。旧longhorn-manager策略保持不动。授权边界(必须让批准人知道)
该 NetworkPolicy 是 TCP 9500 端口级的允许,不能限制只访问
/metrics;源已绑定当前 Prometheus 实例,9500 也是 Longhorn 管理服务端口。这不等于本次会调用管理 API,但批准人应知道该来源对该端口的访问范围。保留原有策略并不等于没有增加访问权限,只是增量被限制在一个来源和一个端口。修复二:CNPG
WanxiangMonitoredTargetMissing误报2026-10-18 14:03 只读证据:规则对
ai/memoh-postgres-0、ai/memoh-pgvector-0firing。两者是普通apps/v1StatefulSet 所有的 Postgres,分别为postgres:18-alpine与pgvector:pg18,没有 CNPG 标签,只有 5432 业务端口,不属于monitoring/cnpg-instancesPodMonitor。旧规则仅凭container="postgres"判断期望 inventory,构成目标身份误判。修复为基于现有 KSM 指标
kube_pod_owner识别真实 CNPG 管理身份:Cluster,普通 Postgres StatefulSet 为StatefulSet;不新增权限、不改业务 Pod、不引入大范围 KSM 标签或新服务。up{job="monitoring/cnpg-instances"}的逐 Pod 消失作为报警条件,不把up本身当期望清单;真实 CNPG 目标从发现消失、单目标丢失而其他 peer 健康时仍会报警。WanxiangKubeStateMetricsMissing覆盖。现场只读验证(修复前):旧表达式匹配 2 个 memoh Pod;
kube_pod_owner{owner_kind="Cluster",owner_is_controller="true"}为 24(当前 CNPG 实例数);修复后表达式对当前实时数据返回 0 个误报,24 个 CNPG 实例仍被识别为期望目标。测试
bash utils/run-observability-test.sh通过(规则、chart 渲染、循环送达、看板查询)。utils/test-observability-prep.py的 promtool 场景新增/覆盖:memoh-postgres-0)不告警;kubectl kustomize渲染出 1 ingress / 1 peer / 1 port;实际 namespace/Pod 标签与 9500 端口匹配;错误 namespace、错误 Pod、错误端口负例均被拒绝;旧策略未改。policy/merge-gate仍 pending。合入后的只读验收
storage/longhorn-manager-prometheus,Kustomization/longhornReady;既有longhorn-manager策略内容不变;job="longhorn-backend"恢复 3/3 health=up,Longhorn 指标新鲜,WanxiangMonitoredTargetDown{job="longhorn-backend"}不再 firing 并 resolved(null receiver 不外发)。WanxiangMonitoredTargetMissing对memoh-postgres-0/memoh-pgvector-0不再 firing;真实 CNPG target 缺失仍能在健康 peer 存在时触发。/varxfs)、20Gi+2Gi PVC 与 Longhorn 三副本健康均不因本 PR 改变。撤销
生产 undo 通过 branch/PR/门禁对相应 commit 做 revert(两处修复可整体或分别撤销),不能以本地 revert 代替;Flux prune 后 Longhorn 会回到原失败状态、CNPG 规则回到旧误报行为。保留原有 Prometheus/Alertmanager/Operator/KSM/exporter 与 20Gi+2Gi PVC,不改 Longhorn 自身策略、业务 Pod、节点网络/存储。
边界
当前节点 CPU/内存/磁盘/存活已实际运行;存储/Longhorn 采集尚未通过(3 个 target down);CNPG 误报为本次修复对象。Grafana/共享入口、真实通知、主动故障演练仍未完成。本 PR 只是可审查准备,生产生效需另行授权;不授权 apply/reconcile、批准/合并、Secret/RBAC/业务 Pod 变更、真实通知或故障注入。
Refs: BEACO-216
BEACO-216: allow Prometheus to scrape longhorn-managerto BEACO-216: fix initial monitoring integration (Longhorn scrape, CNPG identities)/approve
f786e05379