当前位置: 首页 > news >正文

夜莺监控设计思考(一)整体定位、架构设计、单进程多进程选择、高可用设计

整体定位

了解一个开源项目,最应该了解的就是其定位,或者说它要解决的问题域。

夜莺的定位就是四个字:告警引擎。夜莺对接多种数据源(比如 Prometheus、VictoriaMetrics、MySQL、ClickHouse、Postgres、ElasticSearch),根据用户配置的告警规则,判定并产生告警事件,然后对事件做 Pipeline 处理,最终通过各类通知媒介发出告警。

可以对比 Grafana 来理解,Grafana 也是对接多种数据源,不过 Grafana 侧重在数据可视化,夜莺侧重在告警。

image

没有夜莺之前,各个数据源的告警是怎么处理的?

Prometheus 是直接配置在 prometheus.yml 里,管理起来稍有不便

VictoriaMetrics 是使用 vmalert,和 Prometheus 是类似的逻辑

ElasticSearch 社区里用的比较多的是 elastalert 开源项目做告警判定

ClickHouse、MySQL、Postgres 等貌似没有专门的告警引擎

有了夜莺之后,就可以在夜莺里统一管理告警规则、通知媒介、消息模板、用户联系方式等。而且,夜莺可以对告警事件做 Pipeline 处理,比如:

Relabel:类似指标的 Relabel,夜莺可以对告警事件做 Relabel

Enrichment:事件丰富,比如调用 CMDB 的接口为事件附加更多丰富的上下文信息

Drop:一些特定的告警事件要丢弃掉

等等

夜莺的核心功能部件

确定了定位之后,如果你是夜莺的设计者,要如何设计其功能部件呢?

首先,需要一个 webapi。用于和用户、第三方交互,用户需要做一些配置,比如:

数据源的配置

用户、角色的管理

用户联系方式管理(比如电话、手机号等,未来在告警触发时,要打电话发告警短信等)

各类规则配置,比如告警规则、屏蔽规则、订阅规则

通知媒介、消息模板的管理

Pipeline 的管理

查看历史告警事件,做一些统计分析等

其次,需要有一个后台任务执行的逻辑,根据用户配置的告警规则,周期性执行,去查询数据源,判定数据异常并生成告警事件,最终发送。

最简单的就是一个告警规则一个 goroutine(轻量级线程)后台执行

如果执行失败,通过某些监控指标反应异常,同时打印执行失败的日志

需要考虑高可用,如果某个实例挂了,其他实例要顶上来

需要考虑 sharding,比如有两个实例,有 1000 条规则,那每个实例要处理 500 条规则,不能重复执行,而且要均匀分配,如果某个实例挂了,剩下的实例要能承接原本宕机的实例负责的那些规则

对于某个实例而言,就要知道当前总共有多少实例,哪些实例存活,哪些实例挂了,否则,我不知道谁挂了我就没法接管。这需要一个中心状态存储,或者引入 Raft 等协议

这个功能部件主要是负责告警,姑且称之为 alert。所以,夜莺至少有两个功能部件:webapi + alert。实际上,夜莺还有其他功能部件,后文再说。

单进程还是多进程

刚才讲,夜莺至少包含两个功能部件:webapi + alert。那是做成一个进程?还是做成两个进程?

如果是公司内部的系统,我更倾向于做成两个进程,方便维护。但作为一个开源项目,还要考虑普通用户的部署复杂度,则更倾向于做成一个进程。

高可用设计

对于 webapi 功能部件而言,是一个无状态的组件,接收 api 请求然后对数据库做 CRUD,所以 webapi 可以水平扩展,部署多个,前面架设负载均衡,就是高可用了。

alert 模块需要协调分配告警规则,是有状态的,既然我们不可避免要使用数据库存储各类配置信息,那就顺便用数据库存储 alert 的心跳信息得了,比较简单。

所以,所有 alert 复用一个 MySQL,周期性心跳,这样 DB 的心跳表里就可以查到所有实例列表,以及最近一次心跳时间,从而得知哪些实例活着哪些已经挂了(长时间没有心跳就认为挂了)。

这样的架构极为简单,每个实例的配置都是相同的,要做高可用就搞多个机器部署多个实例即可。社区用户用起来也简单。

后记

本文介绍了夜莺的定位、架构、单进程还是多进程的抉择、高可用设计,如果你们公司只有一个机房或者有多个机房但是机房之间有很好的网络专线,那就部署一套夜莺就可以了,如果有多个机房,但是机房之间的网络链路很差,就需要考虑夜莺的边缘机房架构模式,咱们下一节详细介绍。

http://www.rkmt.cn/news/86968.html

相关文章:

  • 自助项目全解析:适配老板画像业态选择指南
  • 2025年质量好的圆弧净化铝材高评价厂家推荐榜 - 品牌宣传支持者
  • 2025年靠谱的减震中空板/中空板行业内知名厂家排行榜 - 品牌宣传支持者
  • Stage应用模型及状态存储
  • springboot基于vue的共享电动车租赁系统设计与实现_6nk626x6
  • python3.14版本的free-threading功能体验
  • 传统vsAI:开发魔兽插件效率提升300%的秘密
  • 5分钟构建Java安全沙箱原型
  • Python MD5在实际项目中的5个典型应用场景
  • 5个关键步骤:轻松掌握Docker容器化部署的版本管理艺术
  • Apache Airflow数据治理自动化工具链终极指南
  • 3分钟完成OpenSSL安装:极速方案对比
  • 2025年评价高的伺服减速器/行星减速器厂家实力及用户口碑排行榜 - 行业平台推荐
  • 甲基化分析利器MethylDackel:3步掌握BS-seq数据处理核心技能
  • PictureSelector终极指南:Android图片选择库的完整使用教程
  • 包装设计创意大比拼,谁才是行业王者?
  • Python语言编程导论第三章 编写程序
  • 有序数组的平方——双指针
  • ssm 框架的校园二手交易市场系统
  • 如何通过5大核心升级打造专业级虚拟显示方案?
  • 电视盒子刷机终极方案:高安版设备完整避坑指南
  • 从按键到艺术:GSE宏编译器的用户体验进化之旅
  • Scrypted:打造智能家居视频监控的终极解决方案
  • 【2025 最新版】Audacity 下载安装教程(超详细图文步骤 + 新手快速上手指南) - PC修复电脑医生
  • 微信小程序图片裁剪实战:从入门到精通掌握we-cropper配置技巧
  • 小爱音箱音乐播放优化指南:三步完美解锁功能
  • 300B参数效率革命:ERNIE 4.5如何用异构MoE架构重塑企业AI格局
  • 人类知识已经喂不饱 GPT-5.2 了!下一代 AGI 靠“AI 凭空想象”出来的数据训练?一场模型自我进化的革命!
  • Tabula表格提取工具:三步快速掌握PDF数据自动化处理
  • 2025年度二乙烯三胺生产厂家综合实力排行榜,看哪家质量稳定 - myqiye