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实战 —— 开发微信小程序的调试技巧

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

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

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

git操作:使用vscode集成

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

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;生物 > 动物 > 哺乳动物 > 灵长型动物 > 人类 > 黄种人 从哲学…

通过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 /…

数据可视化软件的兴起:背后的驱动力

在当今信息时代&#xff0c;数据变得比以往任何时候都更为重要。数据可视化软件的广泛应用成为了一种趋势。那么&#xff0c;为什么越来越多的人选择使用数据可视化软件呢&#xff1f;今天我就以自己的工作经验为基础&#xff0c;进行简单的分析。 数据可视化软件能将枯燥的数…

react-lazyload 的介绍、安装、使用。

目录 基本介绍 安装 使用 基本使用 详细属性 基本介绍 react-lazyload 是一个 React 组件&#xff0c;用于延迟加载&#xff08;懒加载&#xff09;页面上的图片或其他资源。懒加载是一种优化手段&#xff0c;它允许页面在初次加载时只加载可视区域内的内容&#xff0c;…

vue3移动端脚手架(纯净,集成丰富)

概述 一个纯净的移动端框架 &#xff0c;用到了 Vue3 vuex Vite3 Vant3 sass eslint stylelint htmlhint husky commitlint axios axios-adapter VConsole 自定义全局 loading &#xff0c;自定义函数式 dialog &#xff08;api模仿微信小程序&#xff09;&#x…

增强现实中的真实人/机/环与虚拟人/机/环

在增强现实中&#xff0c;真实人与虚拟人、真实机器与虚拟机器、真实环境与虚拟环境之间有着密切的关系。增强现实技术通过将真实与虚拟相结合&#xff0c;打破了传统的现实世界与虚拟世界的界限&#xff0c;创造出了一种新的体验方式。真实人、真实机器和真实环境与其对应的虚…

linux进入emergency mode

问题描述 linux系统进入emergency mode模式 解决方法 查看问题原因 journalctl -xb -p3 使用fsck 不一定是sda2&#xff0c;也可能是其他&#xff0c;我的是/dev/sda6&#xff0c;然后接受所有的option&#xff0c;完毕后重启电脑 fsck /dev/sda2接受所有的选项&#xff…

Python与ArcGIS系列(十六)重复节点检测

目录 0 简述1 实例需求2 arcpy开发脚本0 简述 在处理gis线图层和面图层数据时,有时候会遇到这种情况:数据存在重复节点或伪重复节点(两个节点距离极小),往往我们需要对这种数据进行检测标注或进行修改。本篇将介绍如何利用arcpy及arcgis的工具箱实现这个功能。 1 实例需求…

【UE 材质】任务目标点效果

效果 步骤 1. 新建一个工程&#xff0c;创建一个Basic关卡 2. 新建一个材质&#xff0c;这里命名为“M_GoalPoint” 打开“M_GoalPoint”&#xff0c;设置混合模式为“半透明”&#xff0c;勾选“双面” 在材质图表中添加如下节点 此时预览效果如下 继续添加如下节点 此时效果…

无人机巡检中台揭秘,无人机管控平台助力巡查无人机巡检方案落地

随着无人机智能巡检的飞速发展&#xff0c;巡查无人机应用场景也日益多元&#xff0c;无人机巡检方案被频繁落地到工业生产及巡检巡逻业务中。而无人机管控平台应运而生&#xff0c;成为推动无人机智能巡检的关键工具。那我们一起来看一下无人机管控平台的作用&#xff1a; 一、…

微信小程序引入Vant Weapp修改样式不起作用,使用外部样式类进行覆盖

一、引入Vant Weapp后样式问题 在项目中使用第三方组件修改css样式时,总是出现各种各样问题,修改的css样式不起作用,没有效果,效果不符合预期等。 栗子(引入一个搜索框组件)实现效果: 左侧有一个搜索文字背景为蓝色,接着跟一个搜索框 wxml <view class"container&q…