AlertManager实现webhook告警(使用Postman测试)

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
简介: 🍅程序员小王的博客:程序员小王的博客🍅 欢迎点赞 👍 收藏 ⭐留言 📝🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕🍅java自学的学习路线:java自学的学习路线🍋相关学习资料及其参考文章:prometheus手册,邮件和微信告警,Alertmanager篇🍊 可以去个人博客网站查看本博客排版更清晰:AlertManager————————————————版权声明:本文为CSDN博主「程序员小王java」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn


目录

一、前言

二、AlertManager简介

1、AlertManager工作机制

2、AlertManager的三个概念

三、安装AlertManager

1、下载AlertManager

2、安装AlertManager

3、启动Alertmanager

4、查看Alertmanager运行状态

四、AlertManager的参数

五、Webhook配置

1、初始配置详情:Webhook

六、使用postman和Shell测试

1、使用Shell发送测试

2、通过postman测试

七、最后的话

一、前言

公司想开发一个统一告警平台,需要AlertManager实现告警分析部分,然后就开始了我的AlertManager学习之路了🤣!


然后AlterManager是Prometheus(普罗米修斯)的一部分,在 Prometheus 中告警分为两部分:

  • Prometheus 服务根据所设置的告警规则将告警信息发送给 Alertmanager。
  • Alertmanager 对收到的告警信息进行处理,包括去重,降噪,分组,策略路由告警通知。

二、AlertManager简介

Alertmanager 主要用于接收 Prometheus 发送的告警信息,它支持丰富的告警通知渠道,而且很容易做到告警信息进行去重,降噪,分组等,是一款前卫的告警通知系统。但是我们公司内部不使用Prometheus,只使用AlertManager.

1、AlertManager工作机制



Prometheus会根据配置的参数周期性的对警报规则进行计算, 如果满足警报条件,生产一条警报信息,将其推送到 Alertmanager 组件,Alertmanager 收到警报信息之后,会对警告信息进行处理,进行 分组 Group 并将它们通过定义好的路由 Routing 规则转到 正确的接收器 receiver, 比如 Email Slack 钉钉、企业微信 Robot(webhook) 企业微信 等,最终异常事件 Warning、Error通知给定义好的接收人,其中如钉钉是基于第三方通知来实现的,对于通知人定义是在钉钉的第三方组件中配置。


prometheus触发一条告警的过程:


prometheus—>触发阈值—>超出持续时间—>alertmanager—>分组|抑制|静默—>媒体类型—>邮件|钉钉|微信等。



2、AlertManager的三个概念

(1)分组


Grouping 是 Alertmanager 把同类型的警报进行分组,合并多条警报到一个通知中。在生产环境中,特别是云环境下的业务之间密集耦合时,若出现多台 Instance 故障,可能会导致成千上百条警报触发。在这种情况下使用分组机制, 可以把这些被触发的警报合并为一个警报进行通知,从而避免瞬间突发性的接受大量警报通知,使得管理员无法对问题进行快速定位。


举例:


就是一个集群部署中,有一半的服务实例不再可以访问数据库,Prometheus中的警报规则配置为在每个服务实例无法与数据库通信时为其发送警报。结果,数百个警报被发送到Alertmanager。作为运维组或者相关业务组的开发人员,可能更关心的是在一个通知中就可以快速查看到哪些服务实例被本次故障影响了。为此,我们对服务所在集群或者服务警报名称的维度进行分组配置,把警报汇总成一条通知时,就不会受到警报信息的频繁发送影响了。


(2)抑制


Inhibition指当警报发出后,停止重复发送由此警报引发其他错误的警报的机制。


举例:


当警报被触发,通知整个集群不可达,可以配置Alertmanager忽略由该警报触发而产生的所有其他警报,这可以防止通知数百或数千与此问题不相关的其他警报。抑制机制可以通过Alertmanager的配置文件来配置。


(3)静默


Silences 提供了一个简单的机制,根据标签快速对警报进行静默处理;对传进来的警报进行匹配检查,如果接受到警报符合静默的配置,Alertmanager 则不会发送警报通知。


注意:以上除了分组、抑制是在 Alertmanager 配置文件中配置,静默是需要在 WEB UI 界面中设置临时屏蔽指定的警报通知。


三、安装AlertManager

1、下载AlertManager




github地址:GitHub - prometheus/alertmanager: Prometheus Alertmanager


  • 安装wget用来在github下载安装包
[root@localhost soft]# yum -y install wget


在linux下载,我选择的是 v0.21.0这个版本(命令中的 \代表换行,因为命令太长可以使用 \换行)

[root@localhost soft]# wget https://github.com   \
                       /prometheus/alertmanager/releases/download/  \
                       v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz   \


下载途中报错,请重新下载即可


2、安装AlertManager

  • 直接解压
[root@localhost soft]# tar xvf alertmanager-0.21.0.linux-amd64.tar.gz


  • 移动到/usr/apps下面
mv /usr/soft/alertmanager-0.21.0.linux-amd64 /usr/apps/alertmanager


AlertManager的目录结构

├── alertmanager
├── alertmanager.yml
├──  amtool  
├── LICENSE
├── NOTICE


  • 查看版本信息
[root@localhost alertmanager]# /usr/apps/alertmanager/alertmanager --version


3、启动Alertmanager

[root@localhost alertmanager]# ./alertmanager --config.file=alertmanager.yml


4、查看Alertmanager运行状态



四、AlertManager的参数

image.png

五、Webhook配置

[root@localhost alertmanager]# vim alertmanager.yml


1、初始配置详情:Webhook

  ## 1.Alertmanager 配置文件
   global:
     resolve_timeout: 5m
  ## 2.route:路由分组
   route:
   #(1)用于分组聚合,对告警通知按标签(label)进行分组,将具有相同标签或相同告警名称(alertname)的告警通知聚合在一个组,然后作为一个通知发送。
   #   如果想完全禁用聚合,可以设置为group_by: [...]
     group_by: ['alertname']  #报警分组
    #(2)当一个新的告警组被创建时,需要等待'10s'后才发送初始通知。
    #    这样可以确保在发送等待前能聚合更多具有相同标签的告警,最后合并为一个通知发送。
     group_wait: 10s 
    #(3)当第一次告警通知发出后,在新的评估周期(interval:间隔)内又收到了该分组最新的告警
    #    则需等待'10s'时间后,开始发送为该组触发的新告警,可以简单理解为,group就相当于一个通道(channel)。
     group_interval: 10s
    #(4)告警通知成功发送后,若问题一直未恢复,需再次重复发送的间隔。
     repeat_interval: 1h
    #(5)配置告警消息接收者,与下面配置的对应。例如常用的 email、wechat、slack、webhook 等消息通知方式。
    #   Webhook:比如你的好友发了一条朋友圈,后端将这条消息推送给所有其他好友的客户端,就是 Webhook 的典型场景。    
     receiver: 'web.hook'
    #(6)这里还可以加入子路由
      -routes:  
       receiver: 'wechat'
       match:  # 通过标签去匹配这次告警是否符合这个路由节点;也可以使用  match_re 进行正则匹配
       severity: Disaster  # 标签severity为Disaster时满足条件,使用wechat警报
 ##3.配置报警信息接收者信息。
  receivers:
  #(1)警报接收者名称
  - name: 'web.hook'
    webhook_configs:
  # (2)webhook的路径
    - url: 'http://127.0.0.1:5001/'
  # (3)抑制规则配置,当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的警报(目标)。
  inhibit_rules:
    - source_match:
        severity: 'critical'
      target_match:
        severity: 'warning'
      equal: ['alertname', 'dev', 'instance']


(1)Route用来设置报警的分发策略。


Prometheus的告警先是到达alertmanager的根路由(route),alertmanager的根路由不能包含任何匹配项,因为根路由是所有告警的入口点。


(2)receiver:接收器


     用来处理那些没有匹配到任何子路由的告警(如果没有配置子路由,则全部由根路由发送告警),即缺省接收器。告警进入到根route后开始遍历子route节点,如果匹配到,则将告警发送到该子route定义的receiver中,然后就停止匹配了。因为在route中continue默认为false,如果continue为true,则告警会继续进行后续子route匹配。如果当前告警仍匹配不到任何的子route,则该告警将从其上一级(匹配)route或者根route发出(按最后匹配到的规则发出邮件)。


看你的告警路由树,Routing tree editor | Prometheus


将alertmanager.yml配置文件复制到对话框,然后点击"Draw Routing Tree"



(3)无注释版本,可直接使用

   global:
     resolve_timeout: 5m
   route:
     group_by: ['alertname']
     group_wait: 10s
     group_interval: 10s
     repeat_interval: 1h
     receiver: 'web.hook'
  receivers:
  - name: 'web.hook'
    webhook_configs:
    - url: 'http://127.0.0.1:5001/'
  inhibit_rules:
    - source_match:
        severity: 'critical'
      target_match:
        severity: 'warning'
      equal: ['alertname', 'dev', 'instance']


六、使用postman和Shell测试

1、使用Shell发送测试

Alertmanager 提供告警接口,允许我们以 HTTP 协议进行调用,来要求其发送告警信息。在 Shell 中,调用 Alertmanager 服务来发送通知的方法


这个方法是alertmanager的测试方法,大家可以参考官网:alertmanager/send_alerts.sh at main · prometheus/alertmanager · GitHub


(1)新建Shell 脚本

#!/usr/bin/env bash
alerts_message='[
  {
    "labels": {
       "alertname": "磁盘已满",
       "dev": "sda1",
       "instance": "实例1",
       "msgtype": "testing"
     },
     "annotations": {
        "info": "程序员小王提示您:这个磁盘sda1已经满了,快处理!",
        "summary": "请检查实例示例1"
      }
  },
  {
    "labels": {
       "alertname": "磁盘已满",
       "dev": "sda2",
       "instance": "实例1",
       "msgtype": "testing"
     },
     "annotations": {
        "info": "程序员小王提示您:这个磁盘sda2已经满了,快处理!",
        "summary": "请检查实例示例1",
        "runbook": "以下链接http://test-url应该是可点击的"
      }
  }
]'



(2)发送测试

  • 通过http进行测试
[root@localhost ~]# curl -XPOST -d"$alerts_message" http://127.0.0.1:9093/api/v1/alerts

测试结果



2、通过postman测试

postman的使用攻略,可以参考我原来发的博客:[postman接口测试工具的使用攻略]


我们将使用PostMan模拟Prometheus向AlertManager发送告警,然后用我们自已写的程序接收AlertManager发出来的通知。


本文中,我们的测试主要来验证AlertManager中Group的机制,以及的三个配置参数的效果:group_wait、group_interval、repeat_interval。


(1)测试选择post,然后输入http://ip/api/v2/alerts


测试:http://192.168.5.128:9093/api/v2/alerts



(2)选择json格式



json

[
  {
    "labels": {
       "alertname": "系统连续崩溃,已经出现雪崩状况!",
       "dev": "sda1",
       "instance": "实例1",
       "msgtype": "testing"
     },
     "annotations": {
        "info": "程序员小王提示您:这个系统雪崩了,快处理!",
        "summary": "请检查实例示例1"
      }
  },
  {
    "labels": {
       "alertname": "管理系统损坏",
       "dev": "sda2",
       "instance": "实例1",
       "msgtype": "testing"
     },
     "annotations": {
        "info": "程序员小王提示您:电子商务管理系统中订单,仓库模块已经雪崩,快处理!",
        "summary": "请检查实例示例1",
        "runbook": "以下链接http://192.168.5.128:9093/api/v2/alerts应该是可点击的"
      }
  }
]


(3)测试成功


返回1代表成功



查看页面



七、最后的话

AlertManager实现webhook告警(使用Postman测试),主要讲述了原始的配置及测试,但是在公司使用主要还是

🥕AlertManager实现邮件告警相关配置

🪀AlertManager实现微信告警相关配置

🔴后续如果有时间会出一篇:AlertManager实现钉钉告警


写这篇博客码字不易,因为alertmanager目前在网上资料较少,这这篇博客花了一天的时间,如果您感觉这篇文章对您有帮助,需要你帮我点个一键三连💞,也算是对我小小的鼓励!❤️


pdf版本或者.md版本文件下载地址:https://download.csdn.net/download/weixin_44385486/85005835


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
相关文章
|
4天前
|
JavaScript 前端开发 测试技术
Postman 如何进行性能测试?
Postman 如何进行性能测试?
13 1
|
1月前
|
JavaScript 前端开发 API
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
40 0
|
4月前
|
存储
Postman 接口测试配置 Pre-request Script
Postman 接口测试配置 Pre-request Script
212 5
Postman 接口测试配置 Pre-request Script
|
3月前
|
测试技术 API
软件测试:Postman 工具的使用。开发及测试均需要掌握的测试工具
这篇文章详细介绍了Postman工具的各个模块功能,包括创建请求、集合、环境、自动化测试等,并解释了如何使用Postman进行GET、POST、PUT和DELETE等常见HTTP请求的测试。
|
3月前
|
XML Web App开发 数据挖掘
Postman接口测试工具全解析:功能、脚本编写及优缺点探讨
文章详细分析了Postman接口测试工具的功能、脚本编写、使用场景以及优缺点,强调了其在接口自动化测试中的强大能力,同时指出了其在性能分析方面的不足,并建议根据项目需求和个人偏好选择合适的接口测试工具。
114 1
|
3月前
|
Web App开发 JSON 测试技术
精通Postman接口测试:关联技术与自动化实践指南
这篇文章详细介绍了如何使用Postman进行接口测试,包括关联技术、自动化实践,以及如何通过环境变量和全局变量解决接口之间的关联性问题。
103 0
精通Postman接口测试:关联技术与自动化实践指南
|
4月前
|
XML JSON 测试技术
Postman接口测试工具详解
📚 Postman全攻略:API测试神器!📚 发送HTTP请求,管理集合,写测试脚本,集成CI/CD。从安装配置到环境变量、断言、数据驱动测试,一步步教你如何高效测试RESTful API。实战案例包含GET、POST、PUT、DELETE请求。用Newman在命令行跑集合,自动化测试不发愁!👉 [洛秋小站](https://www.luoqiu.site/) 学更多!🚀
87 1
|
4月前
|
JSON 前端开发 测试技术
Postman 接口测试工具详解
在执行这些测试案例时,请确保遵循实际的API规范,并根据API的特定要求调整步骤和参数。
142 0
|
4月前
|
JSON 测试技术 数据格式
postman接口测试工具详解
postman接口测试工具详解
|
4月前
|
JSON 数据格式
postman 实用教程(含带 token 访问需登录权限的接口、测试文件上传接口、测试文件下载接口)
postman 实用教程(含带 token 访问需登录权限的接口、测试文件上传接口、测试文件下载接口)
625 0