加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 服务器 > 安全 > 正文

介于Alertmanager设计告警降噪系统 成本低可落地

发布时间:2023-09-18 10:35:54 所属栏目:安全 来源:
导读:转转基于Prometheus落地了一体化监控系统,并自研了告警系统,但研发同学每人每天都会接收到很多告警,导致重要的告警被淹没,部分同学会选择直接屏蔽掉所有告警,进一步加重问题。告警过多等同于没有告警。另外,多

转转基于Prometheus落地了一体化监控系统,并自研了告警系统,但研发同学每人每天都会接收到很多告警,导致重要的告警被淹没,部分同学会选择直接屏蔽掉所有告警,进一步加重问题。告警过多等同于没有告警。

另外,多个告警之间通常具有一定的关联性,如:SQL执行错误告警导致异常日志过多告警。而面对杂乱无章的告警,很难快速分析出告警的根本原因。

告警降噪治理十分重要,在此背景下,我们基于Alertmanager扩展研发了转转告警中心。

Alertmanager提供了告警发送的OpenAPI,其中,告警的labels用于识别同一条告警并对告警去重、降噪,相同labels的告警的annotations会被覆盖。startsAt与endsAt分别为告警发生时间与结束时间。

复制

[

{

"labels": {

"<labelname>": "<labelvalue>",

...

},

"annotations": {

"<labelname>": "<labelvalue>",

},

"startsAt": "<rfc3339>",

"endsAt": "<rfc3339>",

"generatorURL": "<generator_url>"

},

...

]

Alertmanager为基于标签的告警降噪,需提前规范告警常见标签。

ENV:环境,如:线上环境、测试环境

APP:服务名

SOURCE:告警来源,如:日志告警、JVM告警

NAME:告警名称

LEVEL:告警等级,如:P0告警、P5告警

INSTANCE:告警实例IP

RECEIVER_TYPE:告警接受者类型

RECEIVER:告警接受者,与RECEIVER_TYPE配合使用,如RECEIVER_TYPE=邮件,RECEIVER即为邮箱地址。

Alertmanager标签名的正则规则为​​[a-zA-Z_][a-zA-Z0-9_]*​​,在真正发送通知时,最好将标签名做一次中文映射转换。

我们针对Alertmanager开发了发送告警的SDK,如下所示,发送告警非常简单,SDK默认会为每条告警自动增加服务名、环境、IP、告警等级,并按照接收方拆开为多条告警发送。每一项内容都是标签,其中value较为特殊,放在了annotations内,其他均放在了labels内用于唯一识别一条告警。

AlertManager alertManager = AlertManager.builder()

//告警名称,必传

.name("告警Demo")

//告警标签,拓展信息,非必传

.label("label1", "value1")

.label("label2", "value2")

//告警值,非必传

.value("123")

//指定为企业微信告警,并指定发送人

.wechat("zhangsan", "lisi")

.build();

//同步发送告警

alertManager.send();

//异步发送,默认线程池

alertManager.sendAsync();

//自定义线程池发送

ThreadPoolExecutor executor;

executor.execute(alertManager);

分组机制可以将多条告警信息合并成一个通知。例如,当集群中有数百个正在运行的服务实例,假如此时发生了网络故障,结果就会有数百个告警被发送到Alertmanager。

而作为用户,可能只希望能够在一个通知中就能查看哪些服务实例受到影响。这时可以按照服务所在集群或者告警名称对告警进行分组,将这些告警聚合在一起成为一个通知。

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章