登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
夜莺监控设计思考(一)整体定位、架构设计、单进程多进 ...
夜莺监控设计思考(一)整体定位、架构设计、单进程多进程选择、高可用设计
[ 复制链接 ]
魁睥
2025-10-14 10:05:16
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
这将是一个系列,讲解 夜莺监控 的设计思考,可以理解为原理+最佳实践+产品设计时的折中取舍。
整体定位
了解一个开源项目,最应该了解的就是其定位,或者说它要解决的问题域。
夜莺的定位就是四个字:
告警引擎
。夜莺对接多种数据源(比如 Prometheus、VictoriaMetrics、MySQL、ClickHouse、Postgres、ElasticSearch),根据用户配置的告警规则,判定并产生告警事件,然后对事件做 Pipeline 处理,最终通过各类通知媒介发出告警。
可以对比 Grafana 来理解,Grafana 也是对接多种数据源,不过 Grafana 侧重在数据可视化,夜莺侧重在告警。
没有夜莺之前,各个数据源的告警是怎么处理的?
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 的心跳表里就可以查到所有实例列表,以及最近一次心跳时间,从而得知哪些实例活着哪些已经挂了(长时间没有心跳就认为挂了)。
这样的架构极为简单,每个实例的配置都是相同的,要做高可用就搞多个机器部署多个实例即可。社区用户用起来也简单。
后记
本文介绍了夜莺的定位、架构、单进程还是多进程的抉择、高可用设计,如果你们公司只有一个机房或者有多个机房但是机房之间有很好的网络专线,那就部署一套夜莺就可以了,如果有多个机房,但是机房之间的网络链路很差,就需要考虑夜莺的边缘机房架构模式,咱们下一节详细介绍。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
设计
进程
高可用
选择
夜莺
相关帖子
关于幼儿园STEM课程设计的思考
团体设计天梯赛L1题解
仿everything制作搞笑检索设计(是的,我没有打错字)
offer选择:优先薪资还是平台?3分钟理清决策思路
高性能表格组件AG Grid 35 全新发布:支持单元格公式、分组拖拽、绝对排序、列选择等
多进程架构+多系统兼容,开发必备!
2026年主流原型设计工具:Axure、墨刀功能差异解析对比
数据库表设计
DDD领域驱动设计
当遇见 CatchAdmin V5-模块化设计重新定义 Laravel 后台开发
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
关于幼儿园STEM课程设计的思考
1
838
能拘
2025-12-05
业界
团体设计天梯赛L1题解
1
673
当贵
2025-12-06
安全
仿everything制作搞笑检索设计(是的,我没有打错字)
1
192
渭茱瀑
2025-12-10
安全
offer选择:优先薪资还是平台?3分钟理清决策思路
0
200
揉幽递
2025-12-10
代码
高性能表格组件AG Grid 35 全新发布:支持单元格公式、分组拖拽、绝对排序、列选择等
0
115
彼瞄
2025-12-11
安全
多进程架构+多系统兼容,开发必备!
2
65
百里宵月
2025-12-11
安全
2026年主流原型设计工具:Axure、墨刀功能差异解析对比
0
299
劳怡月
2025-12-17
业界
数据库表设计
1
292
崔竹
2025-12-18
安全
DDD领域驱动设计
0
335
吁寂
2025-12-19
业界
当遇见 CatchAdmin V5-模块化设计重新定义 Laravel 后台开发
0
693
于映雪
2025-12-21
回复
(7)
锟及
2025-10-23 08:08:53
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
不错,里面软件多更新就更好了
鞭氅
2025-10-30 16:39:07
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
鼓励转贴优秀软件安全工具和文档!
这帜
2025-11-5 07:22:40
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
谢谢楼主提供!
诀锺
2025-11-22 05:30:06
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
收藏一下 不知道什么时候能用到
勺缓曜
2025-12-3 21:21:22
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
谢谢楼主提供!
柄利
2025-12-13 16:55:52
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢,下载保存了
珠尿娜
7 天前
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
东西不错很实用谢谢分享
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
魁睥
7 天前
关注
0
粉丝关注
13
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994892
kk14977
6845358
4
xiangqian
638210
5
韶又彤
9997
6
宋子
9981
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9950
查看更多
今日好文热榜
590
《痞子衡嵌入式半月刊》 第 120 期
619
go项目使用go build 与 MakeFile 构建项目
761
监控指标与容量预警——延迟、命中率、慢查
673
2026 年别墅防水服务商 TOP5 推荐:高端住
962
MAUI库推荐二:MPowerKit
962
.NET10 New feature 新增功能介绍-JIT编译
404
报考陪诊师选守嘉陪诊的理由
272
C#AI系列(7):从零开始LLM之Tokenizer实现
284
C#AI系列(7):从零开始LLM之Tokenizer实现
825
Pytest 测试用例自动生成:接口自动化进阶
848
一天一个Python库:NumPy - 科学计算的基石
14
FFmpeg 内存输入&输出
745
一文读懂RAG架构如何助力AI
500
一文读懂RAG架构如何助力AI
549
ROS2之TF介绍
400
SW 随笔 001 — InlineArray 带你飞(Since
693
当遇见 CatchAdmin V5-模块化设计重新定义
495
【有手就行】SWIFT:花20分钟把大模型的名
562
论文速读记录 | 2025.12(2)
376
浮点数的本质:为什么计算机无法精确表示0.