集中监控方案对比
| 维度 | Prometheus | Zabbix | 夜莺 N9E |
|---|---|---|---|
| 数据采集 | ✅ 自己拉取(pull) | ✅ 自己采集(agent) | ❌ 不做采集,靠外部 |
| 数据存储 | ✅ 本地 TSDB | ✅ 自带数据库 | ❌ 不存数据,接外部库 |
| 查询语言 | PromQL | 自有查询 | 用数据源的查询语言 |
| 可视化 | 基础 | 中等 | 基础(官方建议用 Grafana) |
| 告警引擎 | Alertmanager | 内置 | ✅ 这是核心 |
| 通知渠道 | 几种(需要配置) | 几十种 | 20种内置 |
| 告警自愈 | ❌ | ✅ | ✅ |
| 多数据源 | ❌ 只管自己 | ❌ 只管自己 | ✅ Prom/ES/Loki/CK/MySQL等 |
我之前还以为夜莺是prometheus的替代品,实际上不是的 , 某种意义上来说它与alertmanager定位相同
产品特点
| 能力 | 说明 |
|---|---|
| 告警规则 | 支持 PromQL / 日志查询,可导入 Prometheus 原生规则 |
| 屏蔽规则 | 按时间/标签条件屏蔽告警 |
| 订阅规则 | 用户订阅自己关心的告警 |
| 通知规则 | 灵活的分发策略 |
| 20种通知媒介 | 电话、短信、邮件、钉钉、飞书、企微、Slack 等 |
| 事件管道 | Pipeline 处理,给告警附加元信息 / relabel |
| 告警自愈 | 告警后自动触发脚本(清磁盘、抓现场等) |
| 业务组 | 分门别类管理规则,支持权限体系 |
| 历史告警 | 存档 + 多维查询统计 + 聚合分组 |
多数据源对接:
- Prometheus / VictoriaMetrics
- ElasticSearch / Loki(日志告警)
- ClickHouse / TDEngine
- MySQL / Postgres
- 一套告警规则可以跨数据源
边缘机房下沉部署:
- 中心端 + n9e-edge 模式
- 边缘机房网络割裂时,告警不受影响
- 对多机房场景很实用
采集器 Categraf:
- All-in-one,替代 Node Exporter + 各种中间件 Exporter
- 指标命名跟 Telegraf(而非 Node Exporter)
- 和夜莺丝滑对接
Docker Compose部署
官方文档:夜莺项目整体介绍
居然是中文文档,甚至有点不习惯
1 | git clone https://github.com/ccfos/nightingale.git |

添加数据源
我本地的架构比较复杂,目前我的prometheus是通过remote write转发到vm中进行存储
而且夜莺的数据源一方面是要从里面读取数据来查询,一方面是categraf要往里面写数据
所以我连数据源应该连我的vm
1 | 1.添加数据源vm |


配置n9e仪表盘(入门)
感觉和grafana比也差不多,而且也不算夜莺的核心,所以不详细展开了

配置告警规则(UI/API/prometheus导入)
为了进行这个测试,我用python手动起一个测试的端口python -m http.server 8080
然后添加一个配置采集curl -sSfL 'http://192.168.10.100:17000/api/n9e/agents/categraf/collect.sh' | sudo bash -s -- --input 'http_response' --conf-b64 'IyBtYW5hZ2VkIGJ5IG5pZ2h0aW5nYWxlIGNvbGxlY3Qgd2l6YXJkIChpbnB1dC5odHRwX3Jlc3BvbnNlKQoKW1tpbnN0YW5jZXNdXQp0YXJnZXRzID0gWyJodHRwOi8vMTkyLjE2OC4xMC4xMDA6ODA4MCJdCmV4cGVjdF9yZXNwb25zZV9zdGF0dXNfY29kZXMgPSAiMjAwIgo='
UI 手动创建
选择基础配置→选择数据源→选择告警条件(先做到这,通知以后再配)
导入 Prometheus 原生规则文件

API形式创建
| 操作 | 方法 | 路径 |
|---|---|---|
| 登录拿 token | POST | /api/n9e/auth/login |
| 列出业务组 | GET | /api/n9e/busi-groups |
| 列出某业务组规则 | GET | /api/n9e/busi-group/{group_id}/alert-rules |
| 创建规则 | POST | /api/n9e/busi-group/{group_id}/alert-rules |
| 更新规则 | PUT | /api/n9e/alert-rule/{rule_id} |
| 删除规则 | DELETE | /api/n9e/alert-rule/{rule_id} |
业务组是 id=1(Default Busi Group)
1 | # 第1步:拿 token(用 root / root.2020 换) |

配置告警通知
告警产生 → ①通知规则(notify-rule) → ②通知媒介(channel) → ③用户联系方式(contact) → ④送达
| 维度 | Zabbix | 夜莺 |
|---|---|---|
| 通知对象 | 固定:用户/用户组(配好媒体类型) | 用户组 + 订阅规则(用户可自订阅) |
| 通知媒介 | 内置多种,但每用户逐个配置媒体 | 20 种渠道,channel 集中管理 |
| 分发策略(核心差异) | 相对固定,按 action 触发 | 显式的「通知规则」:可对事件做复杂路由 |
| 模板 | Message 模板(宏变量) | 更丰富的模板 + 事件 Pipeline 附加元信息 |
| 屏蔽/抑制 | 维护期、依赖关系 | 屏蔽规则 + 抑制(自抑制/跨规则) + 订阅 |
| 告警自愈 | 有(远程命令) | 有(回调脚本),但更标准化 |
- 创建媒介→创建通知规则
- 通知规则绑定告警

精细化路由
仅了解,我感觉这个也不太难,夜莺的引导做的还是挺好的,网页上点点点就都有了
| 场景 | 路由逻辑 |
|---|---|
| 按级别 | P1 严重 → 电话+飞书,P2 警告 → 飞书,P3 提醒 → 邮件 |
| 按业务组 | 数据库告警 → DBA组,网络告警 → 网络组,应用告警 → 开发组 |
| 按时间段 | 工作时间 → 飞书,非工作时间 → 电话(升级) |
| 按标签 | team=backend → 后端群,team=frontend → 前端群 |
告警治理
仅了解即可,升级和聚合是商业版功能(但其实也可以通过webhook的方式实现)
订阅本质上其实也是将告警规则与通知媒介进行绑定,但是视角是用户侧的
| 手段 | 作用 | 夜莺实现 |
|---|---|---|
| 屏蔽规则 | 按时间/标签静默告警(维护窗口、已知问题) | 配置 mute 规则 |
| 抑制 | 同一个服务挂了,只发第一条,后续同类告警压住 | 通知规则里的 notify_repeat_step |
| 订阅 | 用户自己订阅关心的告警,不关心的不发 | subscribe 规则,按标签匹配 |
| 聚合 | 10 台机器同时告”磁盘满”,合并成一条发 | 事件管道 relabel + 聚合分组 |
| 升级 | 5 分钟未恢复,自动升级通知方式(飞书→电话) | 通知规则里的 escalation |
Helm chart部署
在摸清了夜莺核心的基础上,引申出来的内容,也是更多生产会用到的部署方式
参考文档:https://github.com/flashcatcloud/n9e-helm
这是官方推荐的helm git项目,不过官方其实并不推荐k8s部署的方式:
“不过,我们不建议您把夜莺部署到 Kubernetes 中,因为监控系统太过重要,如果 Kubernetes 集群出现问题,可能会导致监控系统无法正常工作。而此时您可能希望通过监控数据排查 Kubernetes 的问题,导致循环依赖。尤其是,其他团队此时想使用监控系统发现用不了,可能会来怼你。”
1 | git clone https://github.com/flashcatcloud/n9e-helm.git |
