feat(monitor): NATS 集群 Raft 副本健康 + 基建 ping 延迟(监测组完善)

此前 /status 把 NATS 当一盏二元灯(连不上就 fatal 故恒真),看不出 3 节点集群里
哪个节点掉了、JetStream 持久流的 Raft 副本是否还齐(计费/状态/评测流不丢的关键)。
DB/Redis/MinIO 也只二元 ping、无延迟。

- bus.ClusterStatus:连的节点名 + 集群发现节点数(nc.Servers) + RTT(nc.RTT) + 6 条关键
  持久流(tasks/status/usage/eval/ingest/approvals)的 Raft 副本健康(leader + healthy/total,
  单节点部署记 1/1;某节点掉队 → healthy<total 记降级)。
- /status 新增 nats 集群对象 + NATS 灯改为'连接且无副本降级才绿'、detail 显示'N 节点·连 X·
  流副本齐全/降级'、latency=RTT;PG/Redis/MinIO 加 ping 往返耗时。
- admin StatusPage:新增 NATS 集群面板(节点/RTT/连接 + 各流 leader/副本健康/消息数表),
  基建行显示延迟。

sundynix-shared/gateway build+vet+test 绿;admin tsc 绿。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Blizzard
2026-07-21 16:15:22 +08:00
parent a42f30239f
commit 9b153871eb
5 changed files with 217 additions and 14 deletions
+16
View File
@@ -670,11 +670,27 @@ export interface ToolGroup {
up: boolean;
tools: ToolInfo[] | null;
}
export interface NatsStreamHealth {
name: string;
leader: string;
replicas_healthy: number;
replicas_total: number;
messages: number;
}
export interface NatsClusterStatus {
connected: boolean;
connected_to: string;
known_servers: number;
rtt_ms: number;
streams: NatsStreamHealth[] | null;
degraded: number;
}
export interface SystemStatus {
checked_at: string;
infra: StatusItem[];
services: StatusItem[];
tools: ToolGroup[];
nats?: NatsClusterStatus;
}
export async function getStatus(): Promise<SystemStatus> {