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

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

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

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

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

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

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

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