Alertmanager 源码阅读分析篇(1)告警流程剖析

是这样的,其实本来是没想看这个 Alertmanager 源码的,但是目前 Alertmanager 的使用需求不满足当前的使用场景,我们需要为 Alertmanager 加入 消息队列的支持,因此需要对 Alertmanager 的消息发送提供支持也因此需要看看Alertmanager 源码。

首先我们先看 官方的 架构图 进行分析:

Alertmanager

ALertmanager 官方的 架构 其实 是 特别的 清楚。大致的流程如下:

  1. Prometheus 通过 接口 API (api/v1/alerts) 的形式触发告警,同时 我们可以根据 接口 API 设置当前告警的 沉默时间。
  2. 当接受到 API 的告警信息后,会有 Alertmanager 内置的 Provider 组件 来进行 存储,这个存储在源码中是 基于 内存的。
  3. Alert Provider 讲告警消息。提交给 Dispatcher , 看名字我们就很清楚的知道这是一个 批次 处理的组件。我们在 配置 Alertmanager 的时候,会配置group_wait , group_interval 就是在这里生效的。可以看到的是 在图中的 Group 有一个时钟在等待,这里将一个Group 的时间周期内的告警消息进行聚合操作,聚合之后开始到Notification Pipeline
  4. ``Notification Pipeline` 是通知触发的处理生产线。这里讲进行告警消息的发送。
  5. 每个组内的消息经过 GossipSettle 的处理后会首先判断是否需要进行Inhibitor , 再判断是否需要进行Silence 操作,最后开始根据 路由做告警消息的发送。
  6. 发送完成之后,会通知到 Notify Provider , 告知告警消息已经发送了,状态修改,打印成功日志。

以上就是 Alertmanager 的告警的内部的流程。现在我们需要根据这个 流程 一步一步的 往下走。去看这个内部到底都干了啥。