夜莺监控部署与使用
夜莺(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
上线前至少检查以下内容:
- MySQL 与 Redis 使用持久化、高可用实例。
- 多个
n9e实例共享同一套 MySQL 和 Redis。 - 时序数据库启用数据保留、磁盘容量和备份策略。
- 使用反向代理提供 HTTPS,并配置访问控制。
- 修改默认管理员密码,按团队划分角色与权限。
- 对
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。
- 查询表达式:返回需要告警的时间序列。
- 执行频率:规则的评估周期。
- 持续时间:条件持续多久后触发,避免瞬时抖动。
- 级别:按严重程度划分优先级。
- 标签:使用
service、cluster、env等标签支持路由。 - 通知组:指定值班团队和通知渠道。
例如,节点失联持续 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'
确认夜莺所在网络能够访问数据源,并核对认证信息和租户参数。
告警规则未触发
依次检查:
- PromQL 在对应数据源是否返回数据。
- 规则是否启用,执行频率和持续时间是否合理。
- 告警引擎是否存活并正常上报心跳。
- 通知规则、通知组和时间窗口是否匹配。