V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
feng32
V2EX  ›  程序员

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

  •  
  •   feng32 · 151 天前 · 980 次点击
    这是一个创建于 151 天前的主题,其中的信息可能已经有所发展或是发生改变。
    假设后端是 Java / Spring,通过 @Scheduled 注解,可以让后端定期 (比如每 10 分钟) 检查数据库的一些状态,并推送一个告警;假设告警是钉钉自定义 WebHook

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

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

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

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

    或者设定第一次告警等待一段时间,这段时间多次触发的告警会合并一起发送。
    zhuichen
        4
    zhuichen   151 天前   ❤️ 1
    方法 1 、选举 master,只能 master 推送,master 挂了之后 slave 选举成为 master,撸一下 raft 算法或者直接用 zookeeper
    方法 2 、推送时候,生成唯一标识,利用中间件做去重,记录某一段时间推送过的记录等
    wfd0807
        5
    wfd0807   151 天前
    这难道不是分布式定时任务调度问题?
    而且还是最简单的一种场景,使用 redis 的 setnx 吧
    keepeye
        6
    keepeye   151 天前
    借助 redis 吧 setnx 命令
    loveyu
        7
    loveyu   151 天前
    feng32
        8
    feng32   151 天前
    @wfd0807 用 Redis 和用 MySQL 本质上没什么区别吧
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2625 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 98ms · UTC 13:24 · PVG 21:24 · LAX 05:24 · JFK 08:24
    ♥ Do have faith in what you're doing.