Go2NetSpectra 是一个基于 Go 语言构建的、支持分布式的、高性能网络流量监控与分析框架。项目旨在为网络工程师、安全分析师和系统运维人员提供一个能够对网络流量进行细粒度、多维度深度洞察的平台。它通过高效的数据采集、实时的流处理和强大的数据分析能力,支撑从日常网络性能监控到复杂网络攻击检测等多种上层应用。
核心价值:
- 高性能: 高吞吐、低延迟、低内存占用,满足大规模网络环境需求。
- 深度洞察: 提供从 L2 到 L7 的多维度、细粒度流量指标。
- 分布式架构: 所有组件均可水平扩展,确保高可用性和弹性伸缩能力。
- 实时与离线一体化: 同时支持实时流量监控和历史流量文件(pcap)的回溯分析。
2.1. 数据采集模块 (ns-probe)
- FR-1: 支持从网络接口实时捕获数据包 (依赖
eBPF或AF_PACKET)。 - FR-2: 支持读取并解析标准
pcap/pcapng格式的离线文件。 - FR-3: 支持对捕获的流量进行初步解析,提取关键元数据(如五元组、时间戳、包长)。
- FR-4: 支持将解析后的数据以高效的序列化格式 (如 Protobuf) 发送到数据传输层。
- FR-5: 采集探针必须是轻量级的,对宿主机的资源消耗要尽可能低。
2.2. 数据处理模块 (ns-engine)
- FR-6: 支持从数据传输层(消息队列)消费数据。
- FR-7: 能够对数据进行深度的协议解析,至少包括:Ethernet, IPv4/v6, TCP, UDP, ICMP, DNS, HTTP/1.x。
- FR-8: 支持基于五元组的流聚合。
- FR-9: 必须实现以下核心指标的计算:
- 流量度量: 包数、字节数、流持续时间。
- 基数估算: 使用 SuperSpread 算法估算一个流中独立元素的数量(基数),用于发现超级传播者 (Super-Spreader)。
- 频率估算: 使用 Count-Min Sketch 估算 Top N 的IP、端口、协议等。
- FR-10: 支持将处理和聚合后的结果写入多个数据存储目标,并可根据配置灵活选择写入器类型(如 Gob 文件、ClickHouse 数据库)。
- FR-11: (高级) 支持可插拔的异常检测算法插件。
- FR-12: 提供 gRPC 接口,作为统一的 AI 网关,封装与 LLM 提供商的交互。
- FR-13: 支持通过 gRPC 接收告警信息,并调用 LLM 进行智能分析,生成威胁评估、根因分析和缓解建议。
- FR-14: 支持流式 gRPC 接口,用于通用文本分析和交互式 AI 问答。
- FR-15: 能够通过配置灵活切换 LLM 模型和
base_url,支持 OpenAI 兼容的多种 LLM 服务。
- FR-12: 聚合后的时序指标数据应被写入时序数据库 (如 ClickHouse, VictoriaMetrics)。目前已集成 ClickHouse。
- FR-13: 详细的流记录 (Flow Records) 应被写入支持快速检索的分析型数据库 (如 ClickHouse, Elasticsearch)。
- FR-14: 系统的实时状态(如活跃IP列表)应存储在内存数据库中 (如 Redis)。
2.4. API 与应用模块 (ns-api)
- FR-15: 提供一套 gRPC API 用于高性能数据查询,并为 Grafana 等 Web UI 提供兼容的 JSON HTTP 端点。
- FR-16: API 必须支持按时间范围、一个或多个维度(IP, 端口, 协议等)进行组合查询和过滤。
- FR-17: 提供管理接口,用于配置采集规则和告警阈值。
- FR-18: 支持配置告警规则,并在触发时通过 Webhook 等方式发送通知。
2.5. 可视化模块 (Presentation Layer)
- FR-19: 提供与 Grafana 集成的能力,并预置一套覆盖核心监控指标的仪表盘模板。
- NFR-1 (性能):
- 吞吐量: 单个
ns-engine节点应能处理至少 5Gbps 或 50万 PPS 的流量。整个集群可通过水平扩展线性提升处理能力。 - 延迟: 数据从被采集到在仪表盘上可查询的端到端延迟应低于 5 秒。
- 吞吐量: 单个
- NFR-2 (可靠性):
- 核心服务 (
ns-engine,ns-api) 必须是无状态的,支持多实例部署以实现高可用。 - 数据传输和存储层应采用具备高可用性的集群方案(如 Kafka 集群, ClickHouse 集群)。
- 核心服务 (
- NFR-3 (可扩展性):
- 所有组件都必须能够独立地进行水平扩展。
- 系统设计应支持插件化,方便未来扩展新的协议解析器和分析算法。
- NFR-4 (可维护性):
- 所有组件都应提供详细的日志记录和健康检查端点。
- 提供容器化部署方案(Docker, Kubernetes)。
- NFR-5 (安全性):
- API 接口需要有认证和授权机制。
- 组件间的通信应支持 TLS 加密。
里程碑 1: 核心引擎与离线分析 (MVP) - ✅ 已完成
- 目标: 验证核心数据处理能力。
- 核心交付物:
- 命令行工具
pcap-analyzer: 可读取 pcap 文件,并启动高性能分析引擎。 - 并发聚合引擎: 引擎现在可以根据
aggregator.types配置,同时加载并运行多种聚合器(如exact和sketch)。这使得复杂的联动分析成为可能。 - 插件化架构 (
Factory+TaskGroup): 确立了三层引擎架构。Manager作为并发调度层,Task作为具体的业务逻辑执行层。通过TaskGroup结构,将特定聚合器类型的所有Task和Writer绑定在一起,确保了数据处理的隔离性。 - 高性能并发设计:
Manager内部采用 Worker Pool + Channel 模型,将数据包高效地分发给所有Task。exact任务通过分片并发降低锁竞争,sketch任务则通过无锁原子操作实现极致性能。 - 健壮的数据一致性保证: 通过优雅停机(Graceful Shutdown)机制、只读原子快照和周期性重置机制,确保了数据在每个测量周期内的完整性和准确性。
- 灵活的写入器配置: 每个聚合器组都可以独立配置其
Writer,每个Writer也可以拥有独立的写入频率。
- 命令行工具
里程碑 2: 实时数据流打通 (Alpha) - ✅ 已完成
- 目标: 实现端到端的实时流量监控原型。
- 核心交付物:
- 统一的
ns-probe命令行工具: 支持实时抓包 (probe) 和 NATS 消息验证 (sub)。 - 实时数据管道:
probe能够从网卡抓包,通过 Protobuf 序列化后发布到 NATS。ns-engine则订阅数据并送入处理流水线。 - ClickHouse 集成:
ns-engine已支持将exact和sketch的聚合结果写入不同的 ClickHouse 表中。
- 统一的
里程碑 3: API 服务与产品化 (Beta) - ✅ 已完成
-
目标: 提供数据查询能力,并使系统易于部署和观察。
-
核心交付物:
- gRPC 核心 API:
ns-api服务提供AggregateFlows,TraceFlow,QueryHeavyHitters等多个高性能查询接口。 - 智能查询路由:
ns-api能够根据配置初始化多个Querier实例,并将 gRPC 请求路由到正确的数据源(例如,AggregateFlows查询exact的数据,QueryHeavyHitters查询sketch的数据)。 - 实时预警系统: 新增
Alerter和Notifier模块。聚合任务现在可以生成事件,由Alerter根据规则进行判断,并通过Notifier(如 Webhook) 发送实时告警,满足了FR-18需求。 - AI 智能分析服务 (
ns-ai): 新增ns-ai微服务,作为统一的 AI 网关,为Alerter提供智能告警分析能力,并支持交互式 AI 问答。 - 容器化部署: 提供了
docker-compose.yml,可以一键启动包括nats,clickhouse,ns-engine,ns-api,ns-ai和grafana在内的完整后端服务。 - 预置仪表盘: 提供了一个基础的 Grafana 仪表盘。
- gRPC 核心 API:
-
下一步:
- 为
ns-api增加更完善的日志、监控和错误处理机制。 - 探索更高级的 Grafana 可视化选项。
- 开始规划和设计里程碑 4 的分布式能力。
- 为
里程碑 4: 分布式与高可用 (Release 1.0) - 🚧 进行中
-
目标: 使系统具备生产环境的可靠性和扩展性。
-
核心交付物:
- 高可用后端服务: 通过 Kubernetes 的
StatefulSet,部署了多副本、高可用的 NATS 和 ClickHouse(使用内置 Keeper)集群。 - 可水平扩展的应用服务:
ns-api和ns-ai已配置为多副本部署,可通过 Kubernetes HPA (Horizontal Pod Autoscaler) 进一步实现自动扩缩容。 - Kubernetes 清单: 在
deployments/kubernetes/目录下提供了所有组件的 Kubernetes YAML 清单文件。 - 一键部署脚本: 提供了
scripts/deploy-k8s.sh脚本,用于按正确顺序部署所有原始清单文件。 - Helm Chart: 在
deployments/helm/go2netspectra/目录下创建了完整的 Helm Chart,实现了生产级的、高度可配置的一键部署、升级和回滚能力。
- 高可用后端服务: 通过 Kubernetes 的
-
下一步:
- 完善 Helm Chart 的 Ingress 配置,以更优雅地暴露服务。
- 编写完整的压力测试和稳定性测试方案。
- 完善监控和告警机制(Prometheus + Grafana)。
项目结构遵循 "Standard Go Project Layout" 的最佳实践,并已在第一阶段完成重构。
netspectra/
├── api/ # Protobuf 定义, OpenAPI/Swagger YAML 文件
│ └── proto/
│ └── v1/
│ ├── ai.proto
│ └── traffic.proto
├── cmd/ # 项目主应用入口
│ ├── ns-ai/ # ns-ai 服务的 main.go
│ ├── ns-api/ # ns-api 服务的 main.go
│ ├── ns-engine/ # ns-engine 服务的 main.go
│ ├── ns-probe/ # ns-probe 多功能工具的 main.go
│ └── pcap-analyzer/ # 离线pcap分析工具的 main.go
├── configs/ # 配置文件模板 (config.yaml.example)
├── deployments/ # 部署相关文件
│ ├── docker-compose/
│ ├── kubernetes/ # Kubernetes 原始清单文件
│ └── helm/ # Helm Chart
├── doc/ # 项目文档
│ ├── re.md
│ ├── technology.md
│ └── build.md
├── internal/ # 项目内部私有代码,项目核心逻辑
│ ├── ai/ # ns-ai 服务的核心实现
│ ├── config/ # 配置加载
│ ├── engine/ # ns-engine 服务的核心实现
│ │ ├── exacttask/ # 精确统计任务的实现
│ │ ├── manager/ # 引擎的并发调度与生命周期管理
│ │ └── streamaggregator/ # NATS 数据流接入
│ ├── model/ # 核心数据结构与接口 (Packet, Task, Writer)
│ └── probe/ # ns-probe 的核心实现 (Publisher, Subscriber)
├── pkg/ # 可以被外部应用引用的公共库
│ └── pcap/ # 通用的pcap解析库
├── scripts/ # 辅助脚本
├── test/ # 测试数据与集成测试
│ └── data/
│ └── test.pcap
├── go.mod
├── go.sum
└── README.md
结构说明 (已更新):
/cmd: 各个二进制文件的启动入口。ns-probe被设计为一个多功能工具。/internal: 项目的核心私有代码。engine目录被重构为manager+task的清晰架构。/pkg: 存放可被外部引用的库。/doc: 存放所有项目文档。