首页
/ Nightingale 架构部署全解:从集中式单机到边缘混合集群的监控告警平台实践指南

Nightingale 架构部署全解:从集中式单机到边缘混合集群的监控告警平台实践指南

2026-09-14 11:10:34作者:翟萌耘Ralph

Nightingale(n9e)是一个以告警为核心的一体化开源可观测性平台,定位类似于"监控告警领域的 Grafana"——它本身不采集数据,而是连接 Prometheus、VictoriaMetrics、ElasticSearch 等数据源,重点解决告警规则配置、告警分发与事件管理的专业化问题。本文基于当前仓库的官方介绍文档 doc/README.bak.md 与源码,系统讲解 Nightingale 的架构设计、两种主流部署拓扑(集中式部署与边缘混合部署)以及时序数据库集群方案,并给出可直接落地的配置示例,帮助读者根据自身网络条件与数据规模设计出高可用、可扩展的监控告警平台。

Nightingale 推荐的 VictoriaMetrics 集群部署架构

Nightingale 的核心定位与设计理念

Nightingale 的核心理念可以概括为三句话:开箱即用(Ready out of the box)、专业的告警能力(Professional alerting)、云原生友好(Cloud native)。它与 Grafana 的关系是互补而非竞争:Grafana 强于可视化,Nightingale 强于告警引擎与告警的处理、分发。官方推荐用户将 Prometheus + AlertManager + Grafana + ELK + Jaeger 这套组合栈整体升级为 Nightingale,以降低构建、学习与运维成本。

README.md 可以看到项目自我定位为 "Open-Source Alerting Expert"。从仓库的目录结构可以推断,Nightingale 的功能面覆盖:

  • 数据采集接入:自身不采集,推荐与 Categraf(Nightingale 的默认采集器)配合,同时兼容 Telegraf、Grafana-agent、Datadog-agent 等,通过 Prometheus Remote Write 协议上报数据;
  • 多数据源管理:支持 Prometheus、VictoriaMetrics、M3DB、ElasticSearch、Loki 等,可导入 Grafana 看板;
  • 专业告警:可视化的告警规则配置、静默(mute)规则、订阅(subscribe)规则、多通道通知、告警自愈(触发 webhook 或自动执行脚本)、告警事件管理;
  • 时序数据存储:通过 pushgw 转发模块将指标写入后端时序数据库,并可选内置嵌入式时序库(EmbeddedTSDB)。

数据在 Nightingale 中的流转路径

官方文档给出了一条清晰的端到端数据流:各类采集器上报监控数据 → Nightingale 接收后写入主流时序数据库(Prometheus、M3DB、VictoriaMetrics、Thanos、TDEngine 等)→ 用户在平台中配置告警规则、静默规则、订阅规则、查看监控数据、使用告警自愈 → 历史告警事件入库并可按业务组浏览。

这一点在源码中有对应实现:指标上报的接收与转发由 pushgw 模块承载(pushgw/pushgw.go),转发目标在配置文件的 <a href="https://link.gitcode.com/i/09ee2a7b8e5efddacd71d470a601e9ba" target="_blank">[Pushgw.Writers]] 中声明;告警规则同步、评估、事件处理则由 [alert/alert.go 中的调度器与分发器完成。

部署拓扑一:集中式部署(Centralized Deployment)

集中式部署是最简单、维护成本最低的架构,适合各数据中心之间网络质量较好(通常为专线)的场景。

拓扑构成

  • 单一模块 n9e:整个平台只有一个核心模块 n9e,可部署多个 n9e 实例组成集群;
  • 两个数据依赖:n9e 依赖数据库(MySQL 或 Postgres 二选一)与 Redis;
  • 前置负载均衡:n9e 对外暴露 HTTP 接口,前置 LB 四层或七层均可,官方推荐 Nginx;
  • 各机房 Agent 直推:各数据中心的 Categraf、Telegraf、Grafana-agent、Datadog-agent 等直接将数据推送到 n9e。

数据转发配置:Pushgw

n9e 模块收到数据后,需要将其转发到后端的时序数据库。官方文档给出的核心配置如下:

[Pushgw]
LabelRewrite = true
[[Pushgw.Writers]]
Url = "http://127.0.0.1:9090/api/v1/write"

注意:即使数据源可以在 Web UI 中配置,上报与转发路径仍然必须在配置文件中指定

对照仓库中的完整配置 etc/config.toml,我们可以展开该配置块的完整含义:

[Pushgw]
# 使用数据库中的目标标签而非序列内的标签
LabelRewrite = true
ForceUseServerTS = true

# 将样本转发到外部 TSDB,可与 [EmbeddedTSDB] 同时开启(双写)
# [[Pushgw.Writers]]
# Url = "http://127.0.0.1:8480/insert/0/prometheus/api/v1/write"
# Url = "http://127.0.0.1:9090/api/v1/write"
# BasicAuthUser = ""
# BasicAuthPass = ""
# Headers = ["X-From", "n9e"]
# Timeout = 10000
# DialTimeout = 3000
# TLSHandshakeTimeout = 30000
# ExpectContinueTimeout = 1000
# IdleConnTimeout = 90000
# KeepAlive = 30000
# MaxConnsPerHost = 0
# MaxIdleConns = 100
# MaxIdleConnsPerHost = 100
# [[Pushgw.Writers.WriteRelabels]]
# Action = "replace"
# SourceLabels = ["__address__"]
# Regex = "([^:]+)(?:\\d+)?"
# Replacement = "$1:80"
# TargetLabel = "__address__"

各关键参数说明:

  • LabelRewrite:控制时序标签的重写行为,开启后使用数据库中的目标标签(target labels)而非序列内标签,便于统一管理对象维度;
  • Url:后端时序数据库的 Remote Write 写入地址,可以是 Prometheus、VictoriaMetrics、M3DB、Thanos、TDEngine 等任意兼容 Remote Write 协议的存储;
  • Headers:向写入请求附加的自定义头,例如 ["X-From", "n9e"]
  • Timeout / DialTimeout / IdleConnTimeout / KeepAlive:写入链路的连接超时与连接池控制,单位为毫秒;
  • MaxIdleConns / MaxIdleConnsPerHost:连接池容量,默认 100;
  • WriteRelabels:写入前的 relabel 配置,支持 replace 等 Action,与 Prometheus 的 relabel 语义一致;
  • 可配置项还包括 Basic Auth 认证(BasicAuthUser / BasicAuthPass)与 mTLS 双向认证(UseTLSTLSCATLSCertTLSKeyInsecureSkipVerify)。

另外从配置中可以看到,pushgw 还支持 Kafka 转发通道([[Pushgw.KafkaWriters]]),可将指标投递到 Kafka 消息队列,适用于流式处理场景。

源码印证:pushgw 模块的独立与内嵌

从源码结构看,pushgw 既可以作为独立进程运行(入口见 cmd/pushgw/main.go,通过 -configs 参数或环境变量 N9E_PUSHGW_CONFIGS 指定配置目录),也可以内嵌在 n9e 进程中运行。在 cmd/edge/edge.go 的初始化逻辑中,pushgwrt.New(...)writers := writer.NewWriters(config.Pushgw) 表明边缘节点同样内嵌了 pushgw 路由与写入器,用于把边缘侧指标转发到边缘时序库,这正是下一节"边缘混合部署"的实现基础。

部署拓扑二:边缘混合部署(Mixed Deployment with Edge Components)

当某些数据中心与中心之间的网络链路较差时,集中式直推不再适用,需要引入边缘组件。官方文档给出了三种典型场景:

  1. 机房 A(链路良好):Categraf 直接将数据上报给中心的 n9e 模块;
  2. 某机房(链路差):时序数据库必须部署在边缘,且告警引擎与转发网关必须随之部署,保证数据不跨数据中心边界,从而保证稳定性;但心跳仍要上报中心,否则机器列表(对象列表)中看不到这些主机的 CPU、内存等使用情况;
  3. 接入已有 Prometheus:如果已有 Prometheus 采集不经过 Categraf,只需将其添加为 Nightingale 数据源即可。可以在 Nightingale 中看图、配置告警规则,但主机不会出现在对象列表中,且告警自愈不可用——这并不影响核心功能。

边缘组件的依赖关系(关键注意事项)

在边缘数据中心部署时序数据库、告警引擎、转发网关时,需要注意:

  • 告警引擎依赖数据库:因为它需要从数据库同步告警规则;
  • 转发网关也依赖数据库:因为它要把对象(机器)注册进数据库;
  • 告警引擎与转发网关都不使用 Redis,因此不需要打通到 Redis 的网络路径

换言之,边缘机房只需要打通到中心数据库的网络,即可让告警引擎正常同步规则、让转发网关正常注册对象。

源码印证:n9e-edge 与中心各司其职

边缘部署模式在仓库中有完整实现,独立进程为 n9e-edge,其初始化入口在 cmd/edge/edge.go。从 cmd/center/main.go 的初始化逻辑可以看出中心 n9e 进程与边缘组件的职责划分:

  • 中心 n9e 进程(cmd/center/main.go)内置了 pushgw 路由(pushgwRouter.Config(r))、告警引擎(alert.Start(...) 及告警路由 alertrtRouter.Config(r))、对象注册(dumper.ConfigRouter(r))等,支持通过 Alert.Disable 配置关闭内置告警引擎;
  • 边缘 n9e-edgecmd/edge/edge.go)同样初始化了告警引擎(alert.Start(...))、pushgw 写入器(writer.NewWriters)、缓存同步(memsto 系列)、Redis(可选)与 dscache,并内嵌了任务执行组件 ibex(ibex.ServerStart);
  • models/datasource.go 可以看出,非中心节点(!ctx.IsCenter)通过 poster.GetByUrls 从中心拉取数据源列表并本地解密使用——这正是边缘告警引擎"数据不跨机房、规则配置在中心"的机制来源。

时序数据库选型:VictoriaMetrics 集群架构

当单节点时序数据库(如 Prometheus)成为性能瓶颈或灾备能力不足时,官方推荐使用 VictoriaMetrics。

为什么推荐 VictoriaMetrics

官方文档给出的理由是:VictoriaMetrics 架构简单、性能卓越、易于部署运维。在 doc/README.bak.md 的架构图中可以看到其推荐的部署形态——以 VictoriaMetrics 集群作为后端存储,配合 n9e 实现大规模时序数据的写入、查询与告警分析。

与 Nightingale 的对接方式

对接方式非常直接:只需把 VictoriaMetrics 的 Remote Write 写入地址配置到 pushgw 的 [[Pushgw.Writers]] 中,并在 Nightingale 的 Web UI 中把 VictoriaMetrics 添加为 Prometheus 类型数据源。VictoriaMetrics 集群模式的写入地址形如:

[[Pushgw.Writers]]
Url = "http://127.0.0.1:8480/insert/0/prometheus/api/v1/write"

该地址格式(/insert/0/prometheus/api/v1/write)正是 etc/config.toml 中官方注释给出的 VictoriaMetrics 集群写入端点示例。

内置嵌入式时序库(EmbeddedTSDB):小规模场景的开箱即用

值得注意的是,当前仓库还提供了内置时序数据库能力。在 etc/config.toml[EmbeddedTSDB] 段中,开启后 Categraf 推送的指标会存储在本地,无需外部 TSDB 即可看图,并自动注册名为 embedded-tsdb 的 Prometheus 数据源:

[EmbeddedTSDB]
Enable = true
Dir = "data/tsdb"
RetentionDuration = "15d"
MaxBytes = "10GiB"
OutOfOrderTimeWindow = "10m"
QueryTimeout = "1m"
QueryMaxSamples = 50000000
LookbackDelta = "5m"

配置注释明确说明了适用边界:该模式仅适合小规模(约 10 万活跃序列以内);更大规模应关闭它并配置 <a href="https://link.gitcode.com/i/628c6e07ccdbab5fdbf2029b65a50732" target="_blank">[Pushgw.Writers]] 到外部 TSDB,两者也可以同时开启实现迁移期双写。同时由于数据存储在本机磁盘,只适合单实例中心部署,多副本中心必须使用外部 TSDB。该数据源的自动注册逻辑在 [models/datasource.go 中实现,标识为 n9e-embedded-tsdb,且当已存在其他启用的 Prometheus 数据源时会跳过自动注册,避免干扰已有部署。

三种使用场景的选型建议

官方文档针对不同的用户现状给出了明确的选型指引:

1. 需要统一管理 Metrics / Logging / Tracing 的用户

如果希望在一个平台上统一查看指标、日志与链路数据,推荐直接选用 Nightingale——它是一体化(all-in-one)的可观测性平台。

2. 正在使用 Prometheus 且遇到以下痛点的用户,推荐无缝升级

  • Prometheus、Alertmanager、Grafana 三者割裂,没有统一视图,无法开箱即用;
  • 靠编辑配置文件管理 Prometheus 与 Alertmanager,学习曲线陡峭且难以多人协作;
  • 数据量增长超出当前 Prometheus 集群的可扩展能力;
  • 生产环境中运行多个 Prometheus 集群,管理与使用成本过高。

3. 正在使用 Zabbix 且遇到以下痛点的用户,推荐升级

  • 监控数据量过大,需要更具扩展性的方案;
  • 学习曲线陡峭,希望在多团队多人间提升协作效率;
  • 在微服务与云原生架构下,监控数据的生命周期多变、维度基数高,Zabbix 的数据模型难以适应。

4. 正在使用 Open-Falcon 的用户

Open-Falcon 用户同样可以升级到 Nightingale,以获得云原生监控能力与一体化可观测性体验。

5. 采集器选型:首选 Categraf

Categraf 是 Nightingale 的默认采集器,采用开放插件机制与 all-in-one 设计,可同时采集指标、日志、链路与事件,覆盖系统级指标(CPU、内存、网络)以及大量开源组件与 Kubernetes 生态的采集,并配套开箱即用的看板与告警规则。

高可用与弹性扩展能力

官方文档总结了 Nightingale 在规模与可用性方面的设计目标:

  • 高性能、高可用:依托多数据源管理引擎与引擎侧架构,搭配高性能时序数据库,可支撑海量时序数据的采集、存储与告警分析;所有组件均可水平扩展,无单点故障;
  • 弹性伸缩:可以跑在 1 核 / 1GB 的云主机上,也能扩展为数百台机器的集群并运行在 Kubernetes 中;
  • 集中化分级部署:可以把时序数据库、告警引擎等组件下沉到各数据中心/区域,将边缘部署与集中管理结合,解决数据碎片化与缺乏统一视图的问题。

从源码层面看,告警引擎的横向扩展由 alert/naming 的 hashring 与心跳选举机制支撑(对应配置文件中的 [Alert.Heartbeat] 段),多引擎实例通过心跳向中心注册、按哈希环分片评估规则,任一实例故障时其余实例自动接管,这也解释了为何边缘部署的告警引擎"断网仍可用"——评估完全在边缘本地完成。

部署前提与注意事项小结

  1. 集中式部署:n9e + MySQL/Postgres + Redis,前置 Nginx 或四层 LB,各机房 Agent 直推 n9e,前提是机房间链路良好(建议专线);
  2. 边缘混合部署:链路差的机房部署"边缘时序库 + 告警引擎 + 转发网关",保证数据不出机房;务必打通边缘到中心数据库的网络(告警引擎同步规则、转发网关注册对象都需要),Redis 网络路径则不需要;
  3. 数据转发:上报与转发路径必须在配置文件([[Pushgw.Writers]])中指定,Web UI 中的数据源配置只解决查询与告警分析,不解决数据落库;
  4. 小规模场景:可直接开启 [EmbeddedTSDB] 实现免外部 TSDB 的开箱即用;大规模或多副本中心请使用外部 TSDB(推荐 VictoriaMetrics);
  5. 采集器:优先选择 Categraf,通过 Prometheus Remote Write 协议与 Nightingale 无缝集成,并获得配套看板与告警规则模板。

通过以上架构解读与配置说明,读者可以依据自身网络拓扑、数据规模与团队协作需求,在"集中式部署"与"边缘混合部署"之间做出合理选择,并借助 VictoriaMetrics 或内置 TSDB 完成时序数据的存储设计,构建出一套专业、稳定、可扩展的云原生监控告警平台。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
34
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.21 K
2.81 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
945
1.86 K
docsdocs
暂无描述
Markdown
906
5.84 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
537
607
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
864
1.36 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
4.28 K
1.03 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.39 K
1.48 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
550
401
flutter_flutterflutter_flutter
本仓库是 Flutter SDK 与 Flutter Engine 的 OpenHarmony 适配版本,由 CPF-Flutter 团队维护。开发者可使用熟悉的 Flutter 技术栈开发 OpenHarmony 应用,3.35.7 及以后的适配版本可基于本仓库源码构建支持 OpenHarmony 的 Flutter Engine。
Dart
1.19 K
347