SLB + 多后端服务器架构下,如何实现简单的告警推送,又不重复?

2021-07-02 16:29:44 +08:00
 feng32
假设后端是 Java / Spring,通过 @Scheduled 注解,可以让后端定期 (比如每 10 分钟) 检查数据库的一些状态,并推送一个告警;假设告警是钉钉自定义 WebHook

如何防止不同的后端,推送了同样的告警呢?

希望告警方案仍然是高可用的,挂了一台服务器不影响推送

目前我只想到基于数据库加锁的方案,还有什么其它的常见方案吗?
1697 次点击
所在节点    程序员
8 条回复
jimmyismagic
2021-07-02 16:47:19 +08:00
用个 mq,多个服务同时消费,使用 queue 方式,谁拿到了谁消费谁推送
Aliencn
2021-07-02 17:13:56 +08:00
做一个选举和分配监控项的机制吧,每个后端服务采集和报警的项目都是独占的。
这样也避免了重复采集数据的问题,减少了被监控端的压力。
coolcoffee
2021-07-02 17:28:19 +08:00
Prometheus 的 Alertmanager 不是可以实现告警发送频率限制吗?

例如: 多个后端服务都指向同一个规则,然后设定 5 分钟推送一次,触发了一个之后,后面再触发就不会提醒了。

或者设定第一次告警等待一段时间,这段时间多次触发的告警会合并一起发送。
zhuichen
2021-07-02 17:54:55 +08:00
方法 1 、选举 master,只能 master 推送,master 挂了之后 slave 选举成为 master,撸一下 raft 算法或者直接用 zookeeper
方法 2 、推送时候,生成唯一标识,利用中间件做去重,记录某一段时间推送过的记录等
wfd0807
2021-07-02 18:08:25 +08:00
这难道不是分布式定时任务调度问题?
而且还是最简单的一种场景,使用 redis 的 setnx 吧
keepeye
2021-07-02 18:16:01 +08:00
借助 redis 吧 setnx 命令
loveyu
2021-07-02 18:22:57 +08:00
feng32
2021-07-02 19:09:05 +08:00
@wfd0807 用 Redis 和用 MySQL 本质上没什么区别吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/787175

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX