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.pswp.cn/news/208625.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208625.shtml
英文地址,請注明出處:http://en.pswp.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 /…