监控矩阵
状态:Roadmap
最后核对:2026-05-15
本文定义 NexusNet 未来的监控、审计和遥测平面。它是设计目标,不是当前已实现行为。
目标是让每个 agent 产生结构化观测数据,供以下能力使用:
- 用户可见的系统状态检测。
- 节点健康监测。
- 网络性能监测。
- SD-WAN 路径选择和故障切换。
- 安全审计和被攻破迹象检测。
- 长期 TimeDB / TimescaleDB 分析。
目标架构
text
agent runtime
-> observability collector modules
-> local bounded queue
-> secure control stream MetricsReport frame
-> backend telemetry ingest module
-> hot status cache + audit event stream + TimeDB hypertables
-> dashboard, health checks, SD-WAN decision engine, alerting模块边界
| 组件 | 规划模块 | 职责 |
|---|---|---|
| Agent collector root | nexus-agent/src/observability/mod.rs | 采集循环、本地队列、限速和打包。 |
| Agent system collector | nexus-agent/src/observability/system.rs | CPU、内存、磁盘、进程、boot identity、binary measurement 和运行状态。 |
| Agent network collector | nexus-agent/src/observability/network.rs | 网卡、IP、DNS 视角、公网地址视角、路由表、socket/listener 状态。 |
| Agent performance collector | nexus-agent/src/observability/perf.rs | RTT、jitter、丢包、吞吐、TCP_INFO、QUIC DATAGRAM、Noise 和 L3 metrics。 |
| Agent security collector | nexus-agent/src/observability/security.rs | config hash、credential epoch、pin 校验、config replay/apply 状态、可疑事件和完整性信号。 |
| Agent event packer | nexus-agent/src/observability/report.rs | 标准化事件为 protobuf envelope,并通过 secure control stream 发送。 |
| Backend ingest root | nexus-backend/src/telemetry/mod.rs | 校验 report identity、去重、分类 severity,并分发到存储。 |
| Backend status engine | nexus-backend/src/telemetry/status.rs | 维护 dashboard 和健康 API 使用的当前状态。 |
| Backend TimeDB writer | nexus-backend/src/telemetry/timedb.rs | 写入 TimescaleDB。 |
| Backend audit bridge | nexus-backend/src/telemetry/audit.rs | 把安全和控制面观测转换为持久 audit entry。 |
| SD-WAN signal builder | nexus-backend/src/telemetry/sdwan.rs | 为路径选择和故障切换生成评分输入。 |
gRPC Envelope
现有 secure control stream 已经有 SECURE_FRAME_KIND_METRICS_REPORT。未来应扩展 MetricsReport 为带版本的 observability envelope,不新增未认证通道。
规划形状:
protobuf
message ObservabilityReport {
string node_id = 1;
uint64 sequence = 2;
google.protobuf.Timestamp collected_at = 3;
string schema_version = 4;
string agent_version = 5;
string config_hash = 6;
uint64 config_version = 7;
string credential_epoch = 8;
repeated Observation observations = 9;
}
message Observation {
string id = 1;
string category = 2; // system, network, performance, security, audit
string subject_type = 3; // node, link, listener, route, upstream, credential
string subject_id = 4;
string severity = 5; // debug, info, warn, critical
google.protobuf.Timestamp observed_at = 6;
map<string, string> labels = 7;
bytes payload_json = 8;
}规则:
- Report 只通过加密 secure control stream 发送。
node_id、sequence、config_hash和credential_epoch必填。- backend 必须按 active control session 拒绝过期或重放 sequence。
- payload 由
category和subject_type定型;backend 保存 raw JSON,并抽取索引字段进入 typed tables。 - report 必须有上限。大对象要采样、截断,或在后续诊断 artifact 设计中发送。
数据矩阵
安全和审计信号
| 信号 | Labels | 字段 | 用途 |
|---|---|---|---|
| Config applied | config_version, config_hash, signature_id | apply result、listener hash、route hash、duration | 发现 stale config、发布失败、回滚。 |
| Config replay state | config_version, config_hash, replay_source | requested version、applied hash、duplicate skipped、replay latency、backend session id hash | 重启恢复、stale config 检测和发布审计。 |
| Credential epoch | credential_epoch, credential_ids_hash | active key ids hash、revoked key ids hash、next rotation time | 吊销和 stale key 检测。 |
| SPKI pin validation | upstream_id, pin_id, transport | expected pins、observed SPKI SHA-256、result、peer address | 检测 agent 到 upstream 之间的 MITM。 |
| REALITY validation | credential_id, server_name, short_id, listener | accept/reject reason、target host、protocol、peer address | REALITY 滥用检测和路由审计。 |
| Noise handshake | credential_id, listener, peer_node_id | result、handshake duration、rekey count、error kind | 检测 Noise 失败尖峰或 stale key。 |
| Control session | session_id_hash, psk_fingerprint | open/close reason、sequence window、rekey age | 发现重复会话、重放、异常断连。 |
| Node identity drift | node_id | boot id hash、machine id hash、binary hash、public IP/ASN、region | 发现克隆节点或异常迁移。 |
| Integrity signal | binary_hash, config_hash | process start time、executable path hash、container image digest | 发现 agent binary 被替换或运行环境异常。 |
| Operator action echo | audit_id, resource_type | applied version、node ack set、failed node set | 关联用户操作和分布式 apply 状态。 |
系统状态信号
| 信号 | Labels | 字段 | 用途 |
|---|---|---|---|
| Node resource snapshot | node_id | CPU、memory、load average、uptime、process RSS、fd count | 节点健康和容量规划。 |
| Disk state | mount | free bytes、inode pressure、read-only flag | 发现主机存储压力和 agent 不稳定。 |
| Process state | pid, agent_version | restart count、panic count、last error class、runtime thread count | Agent 健康状态。 |
| Clock state | node_id | wall clock offset、monotonic drift estimate、NTP sync state | TLS/REALITY 有效期和日志排序。 |
| Capability report | feature | supported、enabled、reason、kernel version | DCO、GSO/GRO、TUN、QUIC DATAGRAM 能力。 |
| Listener state | transport, listen_addr, listen_port | bound、owner、route count、policy hash、bind error | 端口冲突和路由状态。 |
网络状态信号
| 信号 | Labels | 字段 | 用途 |
|---|---|---|---|
| Interface snapshot | ifname | addresses、MTU、carrier、rx/tx counters、drops、errors | 链路健康和 SD-WAN 可用性。 |
| Route table snapshot | table, ifname | default route、route count、managed route hash | 发现 route drift 和 L3 apply 失败。 |
| Public address view | source | observed IPv4/IPv6、ASN、region、changed flag | 节点可达性和克隆检测。 |
| DNS view | resolver | answer set hash、latency、failure rate | 发现 DNS 污染或地域差异。 |
| Peer reachability | peer_node_id, transport | reachable、last success、failure reason、NAT observation | SD-WAN peer graph。 |
| Upstream reachability | upstream_id, transport | connect success、error class、observed peer cert pin | 源站健康和 MITM 检测。 |
网络性能信号
| 信号 | Labels | 字段 | 用途 |
|---|---|---|---|
| Peer link metric | peer_node_id, transport | RTT、jitter、packet loss、throughput estimate | SD-WAN path score。 |
| TCP_INFO snapshot | listener, upstream | srtt、rttvar、cwnd、retrans、pmtu | TCP 路径质量和拥塞判断。 |
| QUIC connection metric | route_id, upstream | handshake time、RTT、loss、cwnd、datagram sent/received/dropped | QUIC REALITY path score。 |
| Noise session metric | peer_node_id | handshake duration、packets、bytes、decrypt failures | UDP ENC 健康。 |
| L3 tunnel metric | network_id, endpoint_id, peer_endpoint_id | packets、bytes、drops、MTU errors、route installs | L3 健康和路由决策。 |
| Listener route metric | chain_id, listener | active connections、total connections、errors、bytes in/out | 容量和策略调优。 |
| Health probe metric | upstream_id | TCP connect time、TLS pin result、REALITY result | 源站选择和告警。 |
用户可见状态信号
| 状态 | 输入 | 输出 |
|---|---|---|
| Node status | control session、resource snapshot、config ack、listener state | online、degraded、offline、maintenance、compromised-suspected |
| Link status | peer reachability、RTT、loss、jitter、QUIC/Noise errors | healthy、degraded、unstable、down |
| Upstream status | reachability、pin validation、route errors、health probes | healthy、degraded、pin-mismatch、unreachable |
| Security status | pin mismatch、identity drift、stale credential epoch、config replay mismatch | normal、suspicious、compromised-suspected |
| SD-WAN score | latency、loss、jitter、throughput、stability、security flags | numeric route score and reason codes |
TimeDB 存储计划
backend compose 中已有 postgres-timescale 服务用于未来 metrics。ingest 模块应区分当前状态表和时序 hypertables。
规划 hypertables:
| Hypertable | Time column | 主要维度 | 示例 |
|---|---|---|---|
node_metric_ts | time | node_id, metric | CPU、memory、disk、process counters。 |
link_metric_ts | time | node_id, peer_node_id, transport | RTT、jitter、loss、throughput。 |
listener_metric_ts | time | node_id, transport, listen_addr, listen_port | route counts、active connections、errors。 |
route_metric_ts | time | node_id, route_id, chain_id, network_id | bytes、packets、connection count。 |
security_event_ts | time | node_id, event_type, severity | pin mismatch、identity drift、stale config。 |
probe_result_ts | time | node_id, target_id, probe_type | TCP connect、TLS pin、REALITY、DNS。 |
sdwan_score_ts | time | src_node_id, dst_node_id, transport | score、selected path、reason codes。 |
保留策略:
- 高频 raw samples:7-14 天。
- 1 分钟 rollups:30-90 天。
- security events 和 audit-derived records:按 audit 策略保留。
Backend 处理流水线
规划 ingest 流程:
- 解密
SecureFrame。 - 解码
ObservabilityReport。 - 校验 node identity、active session、sequence、config hash 和 schema version。
- 按
(node_id, sequence, observation_id)去重。 - 更新 hot status cache。
- 写入 TimeDB。
- 将安全观测转换成 audit log entry。
- 输出 SD-WAN 决策输入。
backend 不能只信节点自报的 compromise signals。安全状态必须结合 self-report、cross-node probes 和 backend-side facts。
跨节点验证
为了检测 MITM 或异常路径,backend 应调度独立 probe:
- 要求多个节点观测同一个 upstream SPKI pin。
- 跨区域比较 DNS answers 和 public address views。
- 比较 REALITY handshake result 和目标行为。
- 当只有某个节点观测到不同 pin 或路由行为时,将该节点标记为 suspicious。
跨节点验证是检测层,不替代 TPM 或 remote attestation。
安全要求
- Telemetry 中绝不发送明文私钥或 PSK。
- 不需要精确值时使用 hash id。
- 不能过度脱敏影响功能;SD-WAN 和健康检测经常需要精确 endpoint 地址。
- agent telemetry 在和控制面状态、跨节点观测对齐前都视为不可信输入。
- 安全观测必须包含足够审计上下文,但不能包含 secret material。
实施阶段
| 阶段 | 状态 | 工作 |
|---|---|---|
| 1. Schema and modules | 规划 | 增加 agent observability 模块、backend telemetry 模块和 versioned report protobuf。 |
| 2. Config replay audit | 规划 | 上报 config hash、signature id、replay/apply state、listener hash 和 apply result。 |
| 3. Security pins | 规划 | 上报 SPKI pin validation result 和 pin mismatch event。 |
| 4. System and listener status | 规划 | 上报 resource snapshot、listener bind state、route counts 和 capability report。 |
| 5. Network performance | 规划 | 上报 peer link、TCP_INFO、QUIC、Noise、L3 和 health probe metrics。 |
| 6. TimeDB ingest | 规划 | 增加 TimescaleDB hypertables、retention 和 rollup policy。 |
| 7. SD-WAN signals | 规划 | 从 TimeDB/current status 生成 route score inputs。 |
| 8. Attestation-ready signals | 规划 | 增加 boot id、binary hash、image digest、TPM measurement placeholders 和 trust-level scoring。 |