跳到主要内容

夜莺监控部署与使用

夜莺(Nightingale,简称 N9E)是一套面向云原生场景的开源监控与告警平台。它可以接入 Prometheus、VictoriaMetrics 等时序数据源,统一管理指标查询、告警规则、通知渠道和监控仪表盘。

核心架构

生产环境中的常见组件如下:

  • n9e:提供 Web 控制台、API 和告警引擎。
  • MySQL:保存用户、权限、告警规则和仪表盘等配置。
  • Redis:保存登录令牌、机器心跳等缓存数据。
  • VictoriaMetrics / Prometheus:存储和查询时序指标。
  • Categraf:采集主机、进程和中间件指标。
  • n9e-edge:在多机房场景中就近执行告警规则。
Categraf / Exporter


Prometheus / VictoriaMetrics ◀── n9e / n9e-edge

MySQL + Redis


邮件 / Webhook / IM

Docker Compose 快速部署

官方发布包和源码仓库均提供 docker/compose-bridge 目录。测试环境可以直接使用:

cd docker/compose-bridge
docker compose up -d
docker compose ps

默认访问地址为:

http://<服务器地址>:17000

默认账号为 root,默认密码为 root.2020

首次登录后立即修改密码

默认凭据只适合初始化。生产环境必须修改管理员密码,并限制管理端口的公网访问。

查看服务日志:

docker compose logs -f nightingale
docker compose logs -f victoriametrics
docker compose logs -f categraf

停止服务:

docker compose down

生产部署建议

生产环境更适合使用官方二进制配合 systemd 管理,并连接独立的 MySQL、Redis 和时序数据库。核心配置文件为:

etc/config.toml

上线前至少检查以下内容:

  1. MySQL 与 Redis 使用持久化、高可用实例。
  2. 多个 n9e 实例共享同一套 MySQL 和 Redis。
  3. 时序数据库启用数据保留、磁盘容量和备份策略。
  4. 使用反向代理提供 HTTPS,并配置访问控制。
  5. 修改默认管理员密码,按团队划分角色与权限。
  6. n9e、MySQL、Redis 和时序数据库自身建立监控。

接入 Prometheus 数据源

在夜莺控制台进入数据源管理,添加 Prometheus 兼容数据源:

名称:production-prometheus
类型:Prometheus
地址:http://prometheus:9090

如果使用 VictoriaMetrics 单机版,地址通常类似:

http://victoriametrics:8428

接入后可使用 PromQL 验证:

up

主机 CPU 使用率示例:

100 - avg by (instance) (
rate(node_cpu_seconds_total{mode="idle"}[5m])
) * 100

配置告警规则

创建规则时建议明确以下字段:

  • 数据源:规则使用的 Prometheus 或 VictoriaMetrics。
  • 查询表达式:返回需要告警的时间序列。
  • 执行频率:规则的评估周期。
  • 持续时间:条件持续多久后触发,避免瞬时抖动。
  • 级别:按严重程度划分优先级。
  • 标签:使用 serviceclusterenv 等标签支持路由。
  • 通知组:指定值班团队和通知渠道。

例如,节点失联持续 5 分钟后触发:

up{job="node-exporter"} == 0
控制告警噪声

不要仅依赖阈值。结合持续时间、业务标签、恢复通知和告警抑制,可以显著减少重复告警。

多机房与边缘模式

当中心机房无法稳定访问边缘机房的数据源时,可以在边缘机房部署 n9e-edge

  • 中心 n9e 统一管理用户、规则和通知配置。
  • n9e-edge 同步规则并访问本地时序数据库。
  • 告警计算在边缘完成,降低跨机房网络波动影响。

边缘模式配置文件通常位于:

etc/edge/edge.toml

常用排查

页面无法访问

ss -lntp | grep 17000
curl -I http://127.0.0.1:17000

同时检查反向代理、安全组和防火墙规则。

数据源查询失败

curl -G 'http://prometheus:9090/api/v1/query' \
--data-urlencode 'query=up'

确认夜莺所在网络能够访问数据源,并核对认证信息和租户参数。

告警规则未触发

依次检查:

  1. PromQL 在对应数据源是否返回数据。
  2. 规则是否启用,执行频率和持续时间是否合理。
  3. 告警引擎是否存活并正常上报心跳。
  4. 通知规则、通知组和时间窗口是否匹配。

参考资料