转载自:https://www.qikqiak.com/post/alertmanager-when-alert/

在使用 Prometheus 进行监控的时候,通过 AlertManager 来进行告警,但是有很多人对报警的相关配置比较迷糊,不太清楚具体什么时候会进行告警。下面我们来简单介绍下 AlertManager 中的几个容易混淆的参数。

首先在 Prometheus 中有两个全局的参数 scrape_interval 和 evaluation_interval 。其中 scrape_interval 参数表示的是 Prometheus 从各种 metrics 接口抓取指标数据的时间间隔,evaluation_interval 参数表示的是 Prometheus 对报警规则进行评估计算的时间间隔。

当一条告警规则评估后,它的状态可能是 inactive、pending 或者 firing 中的一种。评估之后,状态将被发送到关联的 AlertManager 以进行潜在地开始或者停止告警通知的发送。

然后就是 AlertManager 中配置的 group_by 参数起作用的地方了,为了避免连续发送类似的告警通知,可以将相关告警分到同一组中进行告警。分组机制可以将详细的告警信息合并成一个通知,在某些情况下,比如由于系统宕机导致大量的告警被同时触发,在这种情况下分组机制可以将这些被触发的告警合并为一个告警通知,避免一次性接受大量的告警通知:

group_by: ['alertname', 'job']

当一个新的报警分组被创建后,需要等待至少 group_wait 时间来初始化告警。

这样实际上就缓冲了从 Prometheus 发送到 AlertManager 的告警,将告警按相同的标签分组,而不必全都发送:

group_by: ['alertname', 'job']
group_wait: 45s # 通常设置成0s ~ 几分钟

但是这可能也导致了接收到的告警通知的等待时间更长了。另外一个问题是下次对告警规则进行评估的时候,我们将再次收到相同的分组告警通知,这个时候我们可以使用 group_interval 参数来进行配置,当上一个告警通知发送到一个 group 后,我们在等待 group_interval 时长后,然后再将触发的告警以及已解决的告警发送给 receiver:

group_by: ['instance', 'job']
group_wait: 45s
group_interval: 10m # 通常设置成5分钟以上

除此之外还有一个 repeat_interval 参数,该参数主要是用于配置告警信息已经发送成功后,再次被触发发送的时间间隔,一般不同类型的告警业务改参数配置不太一样,对于比较重要紧急的可以将改参数设置稍微小点,对于不太紧急的可以设置稍微大点。 上面这些都是在 Prometheus 或者 AlertManager 中配置的一些全局的参数,对于具体的告警规则还有时间可以配置,如下所示的告警规则:

groups:
- name: test-node-mem
rules:
- alert: NodeMemoryUsage
expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) / node_memory_MemTotal_bytes * 100 > 90
for: 1m
labels:
team: node
annotations:
summary: "{{$labels.instance}}: High Memory usage detected"
description: "{{$labels.instance}}: Memory usage is above 90% (current value is: {{ $value }}"

上面我们定义了一个名为 test-node-mem 的报警规则分组,一条报警规则主要由以下几部分组成:

  • alert:告警规则的名称
  • expr:是用于进行报警规则 PromQL 查询语句
  • for:评估等待时间(Pending Duration),用于表示只有当触发条件持续一段时间后才发送告警,在等待期间新产生的告警状态为pending
  • labels:自定义标签,允许用户指定额外的标签列表,把它们附加在告警上
  • annotations:指定了另一组标签,它们不被当做告警实例的身份标识,它们经常用于存储一些额外的信息,用于报警信息的展示之类的

其中的 for 字段同样会影响到我们的告警到达时间,该参数用于表示只有当触发条件持续一段时间后才发送告警,在等待期间新产生的告警状态为pending,这个参数主要用于降噪,很多类似响应时间这样的指标都是有抖动的,通过指定 Pending Duration,我们可以过滤掉这些瞬时抖动,可以让我们能够把注意力放在真正有持续影响的问题上。

所以有的情况下计算我们的监控图表上面已经有部分指标达到了告警的阈值了,但是并不一定会触发告警规则,比如我们上面的规则中,设置的是1分钟的 Pending Duration,对于下图这种情况就不会触发告警,因为持续时间太短,没有达到一分钟:

如果告警规则超过阈值的持续时间超过了 Pending Duration 那么就会触发告警了,告警产生后,还要经过 Alertmanager 的分组、抑制处理、静默处理、去重处理和降噪处理最后再发送给接收者。所以从一条告警规则被评估到触发告警再到发送给接收方,中间会有一系列的各种因素进行干预,所以有时候在监控图表上看到已经达到了阈值而最终没有收到监控报警也就不足为奇了。

AlertManager 何时报警的更多相关文章

  1. Prometheus + AlertManager 邮件报警

    安装 wget https://github.com/prometheus/alertmanager/releases/download/v0.13.0/alertmanager-0.13.0.lin ...

  2. linux(centos8):prometheus使用alertmanager发送报警邮件(prometheus 2.18.1/alertmanager 0.20.0)

    一,alertmanager的用途 1,Alertmanager的作用: Alertmanager是一个独立的报警模块, 它接收Prometheus等客户端发来的警报,并通过分组.删除重复等处理, 通 ...

  3. prometheus监控预警之AlertManager邮箱报警

    Alertmanager 主要用于接收 Prometheus 发送的告警信息,它支持丰富的告警通知渠道,例如邮件.微信.钉钉.Slack 等常用沟通工具,而且很容易做到告警信息进行去重,降噪,分组等, ...

  4. Alertmanager 安装(k8s报警)

    一.下载Alertmanager https://prometheus.io/download/ wget https://github.com/prometheus/alertmanager/rel ...

  5. prometheus(4)之alertmanager报警插件

    报警处理流程如下: 1. Prometheus Server监控目标主机上暴露的http接口(这里假设接口A),通过Promethes配置的'scrape_interval'定义的时间间隔,定期采集目 ...

  6. 【集群监控】Docker上部署Prometheus+Alertmanager+Grafana实现集群监控

    Docker部署 下载 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.re ...

  7. prometheus学习系列十: Prometheus AlertManager配置文件说明

    alertmanager配置文件说明 alertmanager是通过命令行标记和配置文件配置的,命令行标记配置不可变的系统参数,配置文件定义抑制规则.通知路由和通知接收器.可以通过官方提供的routi ...

  8. MongoDB监控及报警

    转载请注明出处:https://www.cnblogs.com/shining5/p/11142357.html MongoDB监控及报警 Prometheus是由SoundCloud开发的开源监控报 ...

  9. Prometheus 监控报警系统 AlertManager 之邮件告警

    转载自:https://cloud.tencent.com/developer/article/1486483 文章目录1.Prometheus & AlertManager 介绍2.环境.软 ...

随机推荐

  1. osx系统使用技巧集锦

    6.禁用dashboard defaults write com.apple.dashboard mcx-disabled -boolean YES && killall Dock 5 ...

  2. Java多线程交替打印

    1. synchronized实现双线程交替打印 class Print implements Runnable{ static int i=0; static final int n=100; @O ...

  3. 新建 Microsoft Office Word 文档 来源:牛客网

    题目 链接:https://ac.nowcoder.com/acm/contest/28886/1015 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其 ...

  4. 基于infiniband(IB)网的MVAPICH2安装

    一.下载安装包 下载链接:http://mvapich.cse.ohio-state.edu/downloads/  二.解压编译安装 mkdir /home/xujb/mvapich2 tar -x ...

  5. C# 给Word每一页设置不同文字水印

    Word中设置水印时,可预设的文字或自定义文字设置为水印效果,但通常添加水印效果时,会对所有页面都设置成统一效果,如果需要对每一页或者某个页面设置不同的水印效果,则可以参考本文中的方法.下面,将以C# ...

  6. 【web自动化测试】playwright安装失败怎么办

    在安装中,如果没有输入 playwright install, 则不会安装浏览器,运行 playwright codegen 时会报浏览器找不到的错误: "chromium" br ...

  7. [51nod 1822]序列求和

    \(k\leq 200000\) 考虑转化成枚举 \(k\) 的形式 我们错位相减! \[A_k=\sum_{i=1}^N i^K\times R^i \\ RA_k=\sum_{i=2}^{N+1} ...

  8. 用JavaScript写随机出一个颜色

    function changeColor(){ var r = parseInt(Math.random()*255) var g = parseInt(Math.random()*255) var ...

  9. ABP 6.0.0-rc.1的新特性

      2022-07-26官方发布ABP 6.0.0-rc.1版本,本文挑选了几个新特性进行了介绍,主要包括LeptonX Lite默认主题.OpenIddict模块,以及如何将Identity Ser ...

  10. Apache DolphinScheduler之最美好的遇见

    关于 Apache DolphinScheduler社区 Apache DolphinScheduler(incubator) 于17年在易观数科立项,19年3月开源, 19 年8月进入Apache ...