架构图

夜莺(Nightingale)训练营视频 2023-4月开始

https://www.aliyundrive.com/s/Xo3ws3rtWcT

1 官网教程

文档:https://flashcat.cloud/docs/
下载:https://flashcat.cloud/download/
博客:https://flashcat.cloud/blog/
视频:https://flashcat.cloud/media/
专栏:https://time.geekbang.org/column/intro/

2 首先我们来看下面的架构图,

2.1 Nightingale 可以接收各种采集器上报的监控数据,转存到时序库(可以支持 Prometheus、M3DB、VictoriaMetrics、Thanos 等)

  • 并提供告警规则、屏蔽规则、订阅规则的配置能力
  • 提供监控数据的查看能力
  • 提供告警自愈机制(告警触发之后自动回调某个 webhook 地址或者执行某个脚本),提供历史告警事件的存储管理、聚合查看的能力。

2.2 橙色的部分是夜莺服务端

包含四个产品功能,

拆分成两个服务模块:n9e-webapi 和 n9e-server,

n9e-webapi 是 API 层,响应 ajax 请求,n9e-server 是一个纯后端模块,跟随时序库,一套时序库对应一套 n9e-server,作为告警引擎,从数据库同步告警规则、屏蔽规则、订阅规则,在内存里处理,生成告警事件,另外 n9e-server 也提供各种数据接收接口,接收推模式的数据上报(后续章节给大家讲讲监控系统中的推拉模型,这是在监控领域一个挺有意思的话题),转发给时序库。

因为要保存用户配置的告警规则、监控大盘、自愈脚本、用户权限信息等,所以需要依赖数据库,可以选用 MySQL 或 PG。因为要处理 jwt token,存储一些心跳信息,所以引入了 Redis,后面我们也要提前一并准备好。

当然,监控系统最核心的就是时序库了,夜莺可以支持多种时序库,比如 Prometheus、VictoriaMetrics、Thanos、M3DB 等,通过 remote write 方式把监控数据发往时序库,假设这里我们选择 Prometheus 作为时序库,即让 n9e-server 把数据通过 remote write 方式写给 Prometheus,那 Prometheus 就要开启 remote-write-receiver,通过 Prometheus 的启动命令参数传入:

3 夜莺的服务端有两个模块:n9e-webapi 和 n9e-server,

  • n9e-webapi 用于提供 API 给前端 JavaScript 使用,
  • n9e-server 的职责是告警引擎和数据转发器。依赖的组件有 MySQL、Redis、时序库,时序库我们这里使用 Prometheus。

文档更新时间: 2023-05-11 14:06   作者:Zach