promethesu告警规则配置,alertmanager通过webhook通知

文章目录

  • 前言
  • 一、promethesu告警
  • 二、告警配置
    • 编写rule文件
    • prometheus配置
    • prometheus产生告警
  • 三、告警通知
    • prometheus 配置 alertmanager
    • alertmanager 配置 webhook通知
    • 编写接口接收 webhook
  • 总结


前言

如果没有学习过prometheus的基础和监控的同学,可以先过一遍这篇文章
https://blog.csdn.net/weixin_42132143/article/details/134772543?spm=1001.2014.3001.5501


一、promethesu告警

Prometheus 收集和存储监控数据,然后根据自定义的告警规则进行数据分析,从而触发报警。配置告警规则通常包括以下几个步骤:

  1. 定义告警规则:告警规则是在 Prometheus 的配置文件中定义的,通常位于 prometheus.yml 文件中的 rules 部分。你需要创建一个告警规则文件(例如 alert.rules.yml),在这个文件中定义你的告警逻辑。

  2. 配置告警规则文件:在 prometheus.yml 中指定告警规则文件的位置,例如:

    rule_files:- "alert.rules.yml"
    
  3. 编写告警规则:在告警规则文件中编写具体的规则。每条规则包括以下几个部分:

  • alert: 告警名称。

  • expr: 告警表达式,当表达式的结果为 true 时触发告警。

  • for: 等待一段时间后才触发告警,用于防止短暂的数据波动导致的误报。

  • labels: 附加到告警上的标签,可以用来分类告警。

  • annotations: 告警的详细说明,如描述、摘要等。

    例如:

    groups:
    - name: examplerules:- alert: HighRequestLatencyexpr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5for: 10mlabels:severity: pageannotations:summary: High request latency
  1. 配置报警通知:Prometheus 本身只是产生告警不直接发送告警,是通过 Alertmanager 来管理告警通知。你需要配置 Alertmanager 的配置文件 alertmanager.yml 来定义通知的接收者和方式,如webhook、邮件、Slack、PagerDuty 等。

二、告警配置

编写rule文件

我们自定义一个告警规则,这里针对 node_exporter 的内存使用率,超过80%触发告警:

新建一个 rule 文件,

vi /etc/prometheus/rules/node_rule.yml
groups:
- name: noderules:- alert: MemoryCriticalexpr: 100 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 > 90for: 5mlabels:severity: warningobject: "{{ $labels.instance }}"content: 内存使用率高于90%job: "{{ $labels.job }}"annotations:summary: "Low memory available (instance {{ $labels.instance }})"description: "Memory usage rate above 90% for more than 5 minute"

如果是想新增一些自定义的标签,可以放在 groups.rules.labels 下面,上面的 object、content、job 就是我新增的自定义标签

prometheus配置

修改 prometheus 的配置文件

rule_files:- "/etc/prometheus/rules/node_rule.yml"

重启 prometheus 服务,使之生效

prometheus产生告警

已经配置好告警规则了,这时候我们给安装 node_exporter 的被监控节点加压,使之内存使用率高于 80%

然后 prometheus 就会产生告警信息,可以在 prometheus 的页面看到产生的告警信息

http://localhost:9090/alerts

这个页面会看到诸如此类的告警规则,变成红色就是产生了告警

在这里插入图片描述

三、告警通知

prometheus 配置 alertmanager

prometheus 已经产生了告警了,我们需要将告警信息推送给 alertmanager

这里就不放 alertmanager 的安装教程了

修改 prometheus 的配置文件,配置上 alertmanager

alerting:alertmanagers:- static_configs:- targets:- 192.168.231.56:9093

重启 prometheus

这时候你就可以在 alertmanager 页面看到接收到的告警信息

prometheus 每次都会把当前所有已经产生的告警信息推送过去 alertmanager

在这里插入图片描述

alertmanager 配置 webhook通知

这时候只是 alertmanager 接收到了告警信息,而 alertmanager 它本身就是一个用于配置告警通知的工具

我们这里使用 webhook 的方式来通知

修改 alertmanager 的配置文件

global:resolve_timeout: 5mroute:group_by: ['alertname', 'content', 'object']group_wait: 10sgroup_interval: 10srepeat_interval: 24hreceiver: 'web.hook'
receivers:
- name: 'web.hook'webhook_configs:- url: 'http://172.16.205.66:8122/notify/alert/send'

说明:

  1. 上面的配置中 group by 指定了多个字段,作用是根据这几个字段来区分同一条告警,防止重复告警。上面也说了 prometheus 每次都会把当前所有已经产生的告警信息推送过去 alertmanager,如果 group by 不做区分,或者只用了默认的 alertname 一个字段,很有可能会导致在多个告警触发的场景下,导致之前已经告警过的信息再次告警通知。
  2. 上面的配置中的 receiver 指定是 web.hook 方式推送,然后在 receivers 配置其地址。webhook方式其实说白了,他就是 由 alertmanager 往这个指定的地址,发送一个 POST 方式的 HTTP 请求而已,所以我们的接收端只需要编写一个普通的 web 项目,里面有一个 POST 接口,接口的地址对应上就可以了。

编写接口接收 webhook

直接新建一个空白的 springboot 项目,加上一个接口,接收来自 alertmanager 的推送,然后根据自己的业务处理就行了,下面放一点核心的代码:

@PostMapping("/send")
public R send(HttpServletRequest httpServletRequest) throws IOException {CachedBodyHttpServletRequest request = new CachedBodyHttpServletRequest(httpServletRequest);// alertmanager的webhook通知会有短时间内的超时重传,这里用异步alertNotifyService.notify(request);return R.success();
}
public class CachedBodyHttpServletRequest extends HttpServletRequestWrapper {private final String cachedBody;public CachedBodyHttpServletRequest(HttpServletRequest request) throws IOException {super(request);StringBuilder body = new StringBuilder();try (BufferedReader bufferedReader = request.getReader()) {char[] charBuffer = new char[128];int bytesRead = -1;while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {body.append(charBuffer, 0, bytesRead);}}this.cachedBody = body.toString();}@Overridepublic BufferedReader getReader() throws IOException {return new BufferedReader(new StringReader(this.cachedBody));}
}
@Async
public void notify(HttpServletRequest request) {// 解析prometheus请求参数AlertManagerBean msg = getRequestReaderMsg(request);System.out.println(msg);if(msg == null)return;// 通知发送逻辑}private AlertManagerBean getRequestReaderMsg(HttpServletRequest request){AlertManagerBean alertManagerBean = null;try (BufferedReader reader = request.getReader()) {// 获取JSON请求参数String jsonBody = reader.lines().reduce("", (accumulator, actual) -> accumulator + actual);// log.info(jsonBody);alertManagerBean = JSONUtil.toBean(jsonBody, AlertManagerBean.class);} catch (Exception e) {e.printStackTrace();log.warn("解析prometheus请求参数失败");}return alertManagerBean;
}
@Data
public class AlertManagerBean {private String status;private List<AlertManagerAlert> alerts;}
@Data
public class AlertManagerAlert {private String status;private AlertManagerLabel labels;private AlertManagerAnnotation annotations;}
@Data
public class AlertManagerLabel {private String alertname;private String instance;private String device;private String mountpoint;private String fstype;private String level;private String job;private String content;private String object;}
@Data
public class AlertManagerAnnotation {private String summary;private String description;}

总结

欢迎指出我的错误!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/208625.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

融合科技,升级医疗体验——医院陪诊服务的技术创新

随着科技的迅猛发展&#xff0c;医疗服务领域也在积极借助技术手段提升患者体验。本文将探讨如何利用先进的技术代码&#xff0c;将医院陪诊服务推向新的高度。 1. 医疗预约系统的实现 # 通过Python代码实现医疗预约系统 class MedicalAppointment:def __init__(self, patie…

【Python】Numpy库近50个常用函数详解和示例,可作为工具手册使用

本文以yolo系列代码为基础&#xff0c;在其中查找用到的numpy函数&#xff0c;包含近50个函数&#xff0c;本文花费多天&#xff0c;三万多字&#xff0c;通过丰富的函数原理和示例对这些函数进行详解。以帮助大家理解和使用。 目录 np.array()运行示例 np.asarray()函数解析运…

unity 2d 入门 飞翔小鸟 场景延续(八)

1、新建c#脚本如下 代码&#xff0c;在前方生成生成自身图片并3s后销毁自身&#xff0c;在碰撞物体后小鸟死亡后不删除自身 using System.Collections; using System.Collections.Generic; using UnityEngine;public class CopyScene : MonoBehaviour { //要复制的对象public…

Amazon CodeWhisperer 提供新的人工智能驱动型代码修复、IaC 支持以及与 Visual Studio 的集成...

Amazon CodeWhisperer 的人工智能&#xff08;AI&#xff09;驱动型代码修复和基础设施即代码&#xff08;IaC&#xff09;支持已正式推出。Amazon CodeWhisperer 是一款用于 IDE 和命令行的人工智能驱动型生产力工具&#xff0c;现已在 Visual Studio 中推出&#xff0c;提供预…

uniapp封装websocket文件(app、h5兼容)

适合场景&#xff1a;只需要发送一次数据&#xff0c;服务器可以实时返回数据进行渲染。 socket文件 let isSocketClose false; // 是否关闭socket let reconnectCount 5; // 重连次数 // let heartbeatInterval ""; // 心跳定时器 let socketTask null; // web…

uniapp实战 —— 开发微信小程序的调试技巧

手机真机调试微信小程序 开发版和体验版的小程序&#xff0c;域名没有备案时想调试接口访问效果&#xff0c;可以按下述方式操作&#xff1a; 在手机上点右上方三个点&#xff0c;点击“开发调试”&#xff0c;开启调试模式&#xff0c;即可真机访问接口&#xff08;跳过域名校…

《C++新经典设计模式》之第21章 解释器模式

《C新经典设计模式》之第21章 解释器模式 解释器模式.cpp 解释器模式.cpp #include <iostream> #include <map> #include <stack> #include <vector> #include <cstring> #include <memory> #include <set> #include <sstream&g…

【Vue3从入门到项目实现】RuoYi-Vue3若依框架前端学习——动态路由与菜单栏

菜单栏 若依框架的侧边栏组件通常由菜单项和子菜单组成。 登录后&#xff0c;会获取用户拥有的路由菜单 {"msg": "操作成功","code": 200,"data": [{"name": "System","path": "/system",…

第一百九十六回 通过蓝牙发送数据的细节

文章目录 1. 概念介绍2. 实现方法3. 代码与效果3.1 示例代码3.2 运行效果4. 经验总结我们在上一章回中介绍了"分享三个使用TextField的细节"沉浸式状态样相关的内容,本章回中将介绍SliverList组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 通过蓝牙设备…

[原创]C++98升级到C++20的复习旅途-个人感觉std::string_literals这个东西实现的不太人性化.

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、D…

git操作:使用vscode集成

git操作方式 其实git操作一般有三种方式 分别是终端命令行,开发工具集成,专业的git可视化工具 我前面几章说的都是git的命令行操作,今天这篇文章主要是针对开发工具vscode集成git操作进行演示 说明一下,这里之所以选择vscode,是因为本人用的就是vscode,每个开发工具基本都有…

最新PyTorch机器学习与深度学习实践技术应用

近年来&#xff0c;随着AlphaGo、无人驾驶汽车、医学影像智慧辅助诊疗、ImageNet竞赛等热点事件的发生&#xff0c;人工智能迎来了新一轮的发展浪潮。尤其是深度学习技术&#xff0c;在许多行业都取得了颠覆性的成果。另外&#xff0c;近年来&#xff0c;Pytorch深度学习框架受…

mysql怎么优化查询?

从多个维度优化&#xff0c;这里的优化维度有四个&#xff1a;硬件配置、参数配置、表结构设计和SQL语句及索引。 其中 SQL 语句相关的优化手段是最为重要的。 一、硬件配置 硬件方面的优化可以有 对磁盘进行扩容、将机械硬盘换为SSD&#xff0c;或是把CPU的核数往上提升一些…

IDEA中,Archetype的作用

在IntelliJ IDEA中&#xff0c;Archetype&#xff08;原型&#xff09;是一种用于创建项目的模板&#xff0c;它定义了项目的基本结构和初始文件。Archetype允许您通过预先构建好的项目框架来快速创建项目&#xff0c;从而节省了手动创建项目所需的时间和精力。 使用Archetype…

spark链接hive时踩的坑

使用spark操作hive&#xff0c;使用metastore连接hive&#xff0c;获取hive的数据库时&#xff0c;当我们在spark中创建数据库的时候&#xff0c;创建成功。 同时hive中也可以看到这个数据库&#xff0c;建表插入数据也没有问题&#xff0c;但是当我们去查询数据库中的数据时&a…

IDEA 出现问题:Idea-操作多次commit,如何合并为一个并push解决方案

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星评选TOP 10&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作…

Python---继承

1、什么是继承 我们接下来来聊聊Python代码中的“继承”&#xff1a;类是用来描述现实世界中同一组事务的共有特性的抽象模型&#xff0c;但是类也有上下级和范围之分&#xff0c;比如&#xff1a;生物 > 动物 > 哺乳动物 > 灵长型动物 > 人类 > 黄种人 从哲学…

prometheus服务发现之consul

文章目录 前言一、Consul 在这里的作用二、原理三、实现过程安装 consul节点信息&#xff08;exporter&#xff09;注册进去consul节点信息&#xff08;exporter&#xff09;从consul解除注册&#xff1a;prometheus配置consul地址 总结 前言 我们平时使用 prometheus 收集监控…

接口的性能优化(从前端、后端、数据库三个角度分析)

接口的性能优化&#xff08;前端、后端、数据库&#xff09; 主要通过三方面进行优化 前端后端数据库 前端优化 接口拆分 不要搞一个大而全的接口&#xff0c;要区分核心与非核心的接口&#xff0c;不然核心接口就会被非核心接口拖累 或者一个接口中大部分返回都很快&…

通过rc.local开机自启执行nohup命令运行Flask,nohup.out中没有Flask请求响应日志

需求 通过修改/etc/rc.d/rc.local&#xff0c;实现开机自启Flask服务&#xff0c;CentOS 7.9。rc.local参考链接1&#xff0c;参考链接2。 问题 在/etc/rc.d/rc.local中添加 /home/python/face_jiance/kaijiziqi.sh 在/home/python/face_jiance/kaijiziqi.sh中写 nohup /…