Prometheus 告警

github alertmanager 文档
Prometheus Alerting rules
Prometheus alerting configuration

前几篇文章讲了Prometheus的监控,这一篇文章,讲通过监控指标触发告警

常用的告警方式有发邮件、调用指定接口(webhook) 等。本文讲解webhook方式,完成这个示例需要准备4个组件:prometheus、node_exporter、alertmanagers、接受webhook调用的web服务

1

首先准备一个rule_file,机器的近1分钟负载超过0.8,就触发告警。如下:
my_rules.yml:

groups: # 一组告警规则
- name: cpu_gt30 # 这个组的名称
  rules:  # 下面可以写多条规则
  - alert: cpu_usage_high  # 告警名称
    expr: node_load1 > 0.8  # PromQL 表达式(计算规则)
    for: 1m # 持续超标1分钟才触发
    labels:
      severity: warning # 告警级别,可选字段为warning、critical和emergency
    annotations: # 告警的描述信息
      summary: "{{$labels.instance}}: 节点CPU使用率过高"
      description: "{{$labels.instance}}: CPU使用率超过 80% (当前: {{ $value }}"

上面配置中expr和for是比较重要的。prometheus每隔一段时间就会计算一下expr是否满足触发条件。
如果expr计算结果不满足,这条告警就是inactive状态:

如果计算结果满足这条规则就变成了pending状态:

如果连续1分钟(for配置的值)expr都满足,就会触发告警,变成firing状态

2

修改alertmanager配置文件:
alertmanager.yml

route:
  group_by: ['alertname']  # 根据alertname标签进行分组,具有相同标签的告警将被视为一组,聚合成一条发送。alertname标签 对应rule文件里的 alert: cpu_usage_high
  group_wait: 30s # 告警分组的时间窗口,如果第一个告警触发后,30秒内又触发了具有相同alertname的告警,它们将被合并为一个告警组
  group_interval: 5m # 告警组的刷新间隔。每5分钟,Alertmanager 会重新评估告警组,并将新的告警添加到现有的组中
  repeat_interval: 1h # 告警的重复间隔。如果一个告警已经被发送,那么在告警状态没有变化的情况下,它会每隔1小时再次发送
  receiver: 'web.hook'
receivers:
  - name: 'web.hook'
    webhook_configs:
      - url: 'http://192.168.254.1:5000/alert'

启动alertmanager ./alertmanager --config.file=./alertmanager.yml

3

修改prometheus配置文件为如下内容
prometheus.yml:

global:
  ... # 省略一些与本节内容无关的配置
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          - 192.168.243.99:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  - "/my_rules.yml"

使用上述配置文件启动prometheus

4

起一个web服务,接受webhook调用:

from fastapi import FastAPI, Request
import uvicorn

app = FastAPI(debug=False)

@app.post("/alert")
async def print_args(request: Request):
    body = await request.json()
    print(body)

    return {}

if __name__ == '__main__':
    uvicorn.run(app, host="0.0.0.0", port=5000)

运行python脚本使CPU飙高:

import math
import time

def cpu_intensive_task():
    while True:
        for i in range(1000000):
            math.sqrt(i)

try:
    cpu_intensive_task()
except KeyboardInterrupt:
    print("exited")

然后静待告警触发,你会看到上面3个告警状态的变化,web服务收到的请求参数为:

{'receiver': 'web.hook',
     'status': 'firing',
     'alerts': [{'status': 'firing',
                 'labels': {'alertname': 'cpu_usage_high',
                            'instance': '192.168.243.99:9100',
                            'job': 'node_exporter',
                            'severity': 'warning'},
                 'annotations': {
                     'description': '192.168.243.99:9100: CPU使用率超过 80% (当前: 0.97',
                     'summary': '192.168.243.99:9100: 节点CPU使用率过高'},
                 'startsAt': '2024-10-22T14:02:11.03Z',
                 'endsAt': '0001-01-01T00:00:00Z',
                 'generatorURL': 'http://f2f05a8126f0:9090/graph?g0.expr=node_load1+%3E+0.8&g0.tab=1',
                 'fingerprint': 'd3155240a05e4626'}],
     'groupLabels': {'alertname': 'cpu_usage_high'},
     'commonLabels': {'alertname': 'cpu_usage_high',
                      'instance': '192.168.243.99:9100',
                      'job': 'node_exporter',
                      'severity': 'warning'},
     'commonAnnotations': {'description': '192.168.243.99:9100: CPU使用率超过 80% (当前: 0.97',
                           'summary': '192.168.243.99:9100: 节点CPU使用率过高'},
     'externalURL': 'http://master:9093',
     'version': '4',
     'groupKey': '{}:{alertname="cpu_usage_high"}',
     'truncatedAlerts': 0}

等待告警解除后,又会收到一个 告警已解决的通知

{'receiver': 'web.hook', 'status': 'resolved', ...} # 其余部分更上面差不多,就不粘贴出来了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ARL 灯塔 | ARL 灯塔 — 字典替换

关注这个工具的其它相关内容:自动化信息收集工具 —— ARL 灯塔使用手册 - CSDN 博客 0x01:ARL 字典替换 —— 理论篇 ARL(Asset Reconnaissance Lighthouse)在进行目标域名探测时,依赖的是其内置的默认字典集。然而在…

从零开始:Python与Jupyter Notebook中的数据可视化之旅

目录 **理解数据与数据可视化的基本流程****了解Python与其他可视化工具****掌握Anaconda、Jupyter Notebook的常用操作方法****原理** 环境配置1. **安装Anaconda软件,创建实验环境**2. **安装Jupyter Notebook**3. **创建第一个Jupyter Notebook文本**&#xff08…

nnUnet 大模型学习笔记(续):训练网络(3d_fullres)以及数据集标签的处理

目录 1. 数据集处理 1.1 实现脚本 1.2 json文件 2. 设置读取路径 2.1 设置路径 2.2 数据集转换 2.3 数据集预处理 2.4 训练(3d_fullres) 3. 训练结果展示 关于nnUnet 数据集的处理和环境搭建,参考上文:第四章:nnUnet大模…

94、Python之异常:自定义异常以满足业务个性化需求

引言 前面介绍了Python中内置的异常类的继承体系,通常来说,这些异常类已经能够满足各种异常的场景需要。但是,有时还是需要自定义异常,来满足一些个性化的需求,以及更加可控、精细化的异常管理。 本文就来介绍一下如…

使用InternVL、LMDeploy和GTE搭建多模态RAG系统

如何将视觉大模型(VLM)与 多模态RAG 结合起来,创建服装搜索和搭配推荐!本文展示了InternVL模型在分析服装图像和提取颜色、款式和类型等关键特征方面的强大功能。 InternVL2是国内首个在MMMU(多学科问答)上突破60的模型&#xff0…

MT-Pref数据集:包含18种语言的18k实例,涵盖多个领域。实验表明它能有效提升Tower模型在WMT23和FLORES基准测试中的翻译质量。

2024-10-10,由电信研究所、里斯本大学等联合创建MT-Pref数据集,它包含18种语言方向的18k实例,覆盖了2022年后的多个领域文本。通过在WMT23和FLORES基准测试上的实验,我们展示了使用MT-Pref数据集对Tower模型进行对齐可以显著提高翻…

【云从】十、常见安全问题与云计算的计费模式

文章目录 1、常见安全问题1.1 DDoS攻击1.2 病毒攻击1.3 木马攻击1.4 代码自身漏洞 2、安全体系3、云计算的计费模式4、常见云产品的计费方案5、云产品计费案例 1、常见安全问题 1.1 DDoS攻击 通过分布在各地的大量终端,同时向目标发送恶意报包,以占满目…

【C++贪心】1536. 排布二进制网格的最少交换次数|1880

本文涉及知识点 C贪心 决策包容性 LeetCode1536. 排布二进制网格的最少交换次数 给你一个 n x n 的二进制网格 grid,每一次操作中,你可以选择网格的 相邻两行 进行交换。 一个符合要求的网格需要满足主对角线以上的格子全部都是 0 。 请你返回使网格满…

精通CSS布局:探索经典的网页布局样式和技术

一、经典两列布局样式 1.概念 许多网站有一些特点,如页面顶部放置一个大的导航或广告条,右侧是链接或图片,左侧放置主要内容,页面底部放置版权信息等。 一般情况下,页面布局的两列都有固定宽度,而且从内容…

7.hyperf安装【Docker】

- 前言:为了与容器中的mysql通信,先运行mysql,再使用 --link关联 一、 拉取 php版本为8.2的版本 8.3的版本,启动框架时,报错。 docker pull hyperf/hyperf:8.2-alpine-vedge-swoole-slim二、 运行hyperf环境容器 --l…

分布式理论基础

文章目录 1、理论基础2、CAP定理1_一致性2_可用性3_分区容错性4_总结 3、BASE理论1_Basically Available(基本可用)2_Soft State(软状态)3_Eventually Consistent(最终一致性)4_总结 1、理论基础 在计算机…

解决k8s集群中安装ks3.4.1开启日志失败问题

问题 安装kubesphere v3.4.1时,开启了日志功能,部署时有三个pod报错了 Failed to pull image “busybox:latest”: rpc error: code Unknown desc failed to pull and unpack image “docker.io/library/busybox:latest”: failed to copy: httpRead…

Java项目-基于springboot框架的学习选课系统项目实战(附源码+文档)

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…

【Petri网导论学习笔记】Petri网导论入门学习(八) —— 1.6 系统的Petri网模型

导航 1.6 系统的Petri网模型例 1.6 化学反应例 1.7 进程的通信协议例 1.8 P/V操作例 1.9 临界段互斥问题例 1.10 生产者/消费者问题例 1.11 哲学家就餐问题 1.6 系统的Petri网模型 理论的目的在于应用,接下来是一些关于用Petri网标识离散事件系统的例子 这里就直接…

C++ 游戏开发:从基础到进阶

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

【鸡翅Club】项目启动

一、项目背景 这是一个 C端的社区项目,有博客、交流,面试学习,练题等模块。 项目的背景主要是我们想要通过面试题的分类,难度,打标,来评估员工的技术能力。同时在我们公司招聘季的时候,极大的…

平衡相图在矿物加工中的广泛应用,含材料设计、性能预测等

平衡相图是描述在特定温度和压力下,不同相(如固体、液体、气体等)之间平衡关系的图表。在矿物加工领域,通过分析相图可以详细了解不同成分的矿物在特定温度和压力条件下的相变行为,从而设计出更高效的提取和分离方法&a…

EasyExcel自定义下拉注解的三种实现方式

文章目录 一、简介二、关键组件1、ExcelSelected注解2、ExcelDynamicSelect接口(仅用于方式二)3、ExcelSelectedResolve类4、SelectedSheetWriteHandler类 三、实际应用总结 一、简介 在使用EasyExcel设置下拉数据时,每次都要创建一个SheetWr…

文件误删并清空回收站:全面解析与高效恢复策略

一、文件误删并清空回收站的遭遇 在日常使用电脑或移动设备的过程中,我们难免会遇到一些令人懊恼的数据丢失问题,其中文件误删并清空回收站便是最为常见的一种。当你不小心删除了某个重要文件,并且随后又毫不留情地清空了回收站,…

flutter camera 插件相机不占满屏幕的问题

当 CameraPreview 超出屏幕范围时,可以通过以下几种方法来处理超出部分被裁剪的问题: 使用 FittedBox:FittedBox 可以自动调整子组件的大小和比例,使其适应父容器。使用 BoxFit 属性:在 FittedBox 中使用不同的 BoxFi…