【云原生】Prometheus 自定义告警规则

news2024/9/29 8:56:22

文章目录

    • 一、概述
    • 二、告警实现流程
    • 三、告警规则
      • 1)告警规则配置
      • 1)监控服务器是否在线
      • 3)告警数据的状态
    • 四、实战操作
      • 1)下载 node_exporter
      • 2)启动 node_exporter
      • 3)配置Prometheus加载node_exporter
      • 4)告警规则配置
      • 5)模拟告警
      • 6)配置告警通道

一、概述

通过创建Prometheus监控告警规则,您可以制定针对特定Prometheus实例的告警规则。当告警规则设置的条件满足后,系统会产生对应的告警事件。如果想要收到通知,需要进一步配置对应的通知策略以生成告警并且以短信、邮件、电话、钉群机器人、企业微信机器人或者Webhook等方式发送通知。

从Prometheus server端接收到alerts后,会基于PromQL的告警规则 分析数据,如果满足PromQL定义的规则,则会产生一条告警,并发送告警信息到Alertmanager,Alertmanager则是根据配置处理告警信息并发送。所以Prometheus的告警配置依赖于PromQLAlertManager,关于这两个介绍可以参考我以下文章:

  • 【云原生】Prometheus AlertManager讲解与实战操作
  • 【云原生】Prometheus PromQL讲解与实战操作
  • 【云原生】Prometheus Pushgetway讲解与实战操作
  • 官方文档:https://prometheus.io/docs/alerting/latest/overview/

在这里插入图片描述

二、告警实现流程

在这里插入图片描述
设置警报和通知的主要步骤是:

  1. 在Prometheus中配置告警规则。
  2. 配置Prometheus 与 AlertManager 关联。
  3. 配置 AlertManager 告警通道。

三、告警规则

官方文档:https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/

1)告警规则配置

在Prometheus 配置(prometheus.yml)中添加报警规则配置,配置文件中 rule_files 就是用来指定报警规则文件的,如下配置即指定存放报警规则的目录为/etc/prometheus,规则文件为rules.yml:

rule_files:
- /etc/prometheus/rules.yml

设置报警规则:

警报规则允许基于 Prometheus 表达式语言的表达式来定义报警报条件的,并在触发警报时发送通知给外部的接收者(Alertmanager),一条警报规则主要由以下几部分组成:

  • alert——告警规则的名称。
  • expr——是用于进行报警规则 PromQL 查询语句。
  • for——评估告警的等待时间(Pending Duration)。
  • labels——自定义标签,允许用户指定额外的标签列表,把它们附加在告警上。
  • annotations——用于存储一些额外的信息,用于报警信息的展示之类的。

rules.yml示例如下:

groups:
- name: example
  rules:
  - alert: high_memory
    # 当内存占有率超过10%,持续1min,则触发告警
    expr: 100 - ((node_memory_MemAvailable_bytes{instance="192.168.182.110:9100",job="node_exporter"} * 100) / node_memory_MemTotal_bytes{instance="192.168.182.110:9100",job="node_exporter"}) > 90
    for: 1m
    labels:
      severity: page
    annotations:
      summary: spike memeory 

1)监控服务器是否在线

对于被Prometheus监控的服务器,我们都有一个up指标,可以知道该服务是否在线。

up == 0  #服务下线了。
up == 1 #服务在线。

【示例】

groups:
- name: Test-Group-001 # 组的名字,在这个文件中必须要唯一
  rules:
  - alert: InstanceDown # 告警的名字,在组中需要唯一
    expr: up == 0 # 表达式, 执行结果为true: 表示需要告警
    for: 1m # 超过多少时间才认为需要告警(即up==0需要持续的时间)
    labels:
      severity: warning # 定义标签
    annotations:
      summary: "服务 {{ $labels.instance }} 下线了"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."

注意:

  • for 指定达到告警阈值之后,一致要持续多长时间,才发送告警数据。
  • labels 中可以指定自定义的标签,如果定义的标签已经存在,则会被覆盖。可以使用模板。
  • annotations 中的数据,可以使用模板,$labels表示告警数据的标签{{$value}}表示时间序列的值

3)告警数据的状态

  • Inactive——表示没有达到告警的阈值,即expr表达式不成立。
  • Pending——表示达到了告警的阈值,即expr表达式成立了,但是未满足告警的持续时间,即for的值。
  • Firing——已经达到阈值,且满足了告警的持续时间。

【温馨提示】经测试发现,如果同一个告警数据达到了Firing,那么不会再次产生一个告警数据,除非该告警解决了。

四、实战操作

在这里插入图片描述

1)下载 node_exporter

node-exporter用于采集node的运行指标,包括node的cpu、load、filesystem、meminfo、network等基础监控指标,类似于zabbix监控系统的的zabbix-agent。

下载地址:https://github.com/prometheus/node_exporter/releases/

wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz
tar -xzf node_exporter-1.5.0.linux-amd64.tar.gz

2)启动 node_exporter

ln -s /opt/prometheus/exporter/node_exporter/node_exporter-1.5.0.linux-amd64/node_exporter  /usr/local/bin/node_exporter
# 指定端口启动,默认端口:9100
node_exporter --web.listen-address=":9100"

配置node_exporter.service启动

# 默认端口9100
cat >/usr/lib/systemd/system/node_exporter.service<<EOF
[Unit]
Description=node_exporter
After=network.target
 #可以创建相应的用户和组 启动
#User=prometheus
#Group=prometheus

[Service]
ExecStart=/opt/prometheus/exporter/node_exporter/node_exporter-1.5.0.linux-amd64/node_exporter --web.listen-address=:9100
[Install]
WantedBy=multi-user.target
EOF

启动服务

systemctl daemon-reload
systemctl start node_exporter
systemctl status node_exporter
systemctl enable node_exporter

在这里插入图片描述
检查

curl http://localhost:9100/metrics

在这里插入图片描述

3)配置Prometheus加载node_exporter

添加或修改配置 prometheus.yml
在这里插入图片描述

重启加载配置

systemctl restart prometheus
# 1、 kill方式
#kill -HUP pid
# 2、curl方式(推荐)
#curl -X POST http://IP/-/reload
# 【注意】需要在启动的命令行增加参数: --web.enable-lifecycle
curl -X POST http://192.168.182.110:9090/-/reload
# 3、重启(不推荐,重启会导致所有的连接短暂性中断)
systemctl restart prometheus

检查
web:http://ip:9090/targets
在这里插入图片描述

4)告警规则配置

在Prometheus配置文件rometheus.yml 中配置如下:
在这里插入图片描述
/etc/prometheus/rule.yml配置如下:

groups:
- name: Test-Group-001 # 组的名字,在这个文件中必须要唯一
  rules:
  - alert: InstanceDown # 告警的名字,在组中需要唯一
    expr: up == 0 # 表达式, 执行结果为true: 表示需要告警
    for: 1m # 超过多少时间才认为需要告警(即up==0需要持续的时间)
    labels:
      severity: warning # 定义标签
    annotations:
      summary: "服务 {{ $labels.instance }} 下线了"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."

重新加载

curl -X POST http://localhost:9090/-/reload

在web上就可以看到一个告警规则。
在这里插入图片描述

5)模拟告警

手动关机

sudo shutdown -h now

过了一段时间告警状态就变成Pending
在这里插入图片描述
再过一段时间告警就变成了Firing
在这里插入图片描述

6)配置告警通道

这里以有邮件告警为示例,其它的也差不多。修改配置之前最好先备份一下之前的配置

cp alertmanager.yml alertmanager.bak

【1】配置 alertmanager.yml

global:
  resolve_timeout: 5m
  ## 这里为qq邮箱 SMTP 服务地址,官方地址为 smtp.qq.com 端口为 465 或 587,同时要设置开启 POP3/SMTP 服务。
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_from: 'xxxxxxxx@qq.com'
  smtp_auth_username: 'xxxxxxxx@qq.com'
  #授权码,不是密码,在 QQ 邮箱服务端设置开启 POP3/SMTP 服务时会提示
  smtp_auth_password: 'xxxxxxxx'
  smtp_require_tls: false

#1、模板
templates:
  - '/opt/prometheus/alertmanager/alertmanager-0.24.0.linux-amd64/templates/email.tmpl'

#2、路由
route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  #邮箱
  receiver: 'email'

receivers:
- name: 'email'
  email_configs:
  ## 接收警报的email(这里是引用模板文件中定义的变量)
  - to: '{{ template "email.to"}}'
    ## 发送邮件的内容(调用模板文件中的)
    html: '{{ template "email.to.html" .}}'
    send_resolved: true

# 抑制器配置
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    #确保这个配置下的标签内容相同才会抑制,也就是说警报中必须有这三个标签值才会被抑制。
    equal: ['alertname', 'dev', 'instance']

【2】模板 alert.tmpl

模板文件配置了email.fromemail.toemail.to.html 三种模板变量,可以在 alertmanager.yml 文件中直接配置引用。这里 email.to.html 就是要发送的邮件内容,支持 Html 和 Text 格式,这里为了显示好看,采用 Html 格式简单显示信息。下边 {{ range .Alerts }} 是个循环语法,用于循环获取匹配的 Alerts 的信息。

{{ define "email.from" }}xxxxxxxx@qq.com{{ end }}
{{ define "email.to" }}xxxxxxxx@163.com{{ end }}
{{ define "email.to.html" }}
{{ range .Alerts }}
=========start==========<br>
告警程序: prometheus_alert <br>
告警级别: {{ .Labels.severity }}<br>
告警类型: {{ .Labels.alertname }} <br>
故障主机: {{ .Labels.instance }} <br>
告警主题: {{ .Annotations.summary }} <br>
告警详情: {{ .Annotations.description }} <br>
触发时间: {{ .StartsAt.Format "2019-08-04 16:58:15" }} <br>
=========end==========<br>
{{ end }}
{{ end }}

【温馨提示】这里记得换成自己的邮箱地址!!!

重启alertmanager

systemctl restart alertmanager

在web上就可以看到对应的告警信息了。
在这里插入图片描述
接下来就静待告警了。
在这里插入图片描述
一整套流程到这里就全部跑通了,告警规则、告警指标、告警通道根据自己的场景来定,有疑问的欢迎给我留言,后续会持续更新【云原生+大数据】的文章,请耐心等待~
在这里插入图片描述

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

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

相关文章

这样也可以让图像正向扩散

🍿*★,*:.☆欢迎您/$:*.★* 🍿 怎样的扩散取决于b是不是随机噪声 是随机噪声 则是扩散模型 如stable diffision 如果是非噪声则是方向模型 方向模型是指 在已知几个连续的输入 后可以通过模型的辅助预测扩散的方向 而 stable diffision 是通过预测反扩散方向 本质就…

VS2017中OpenCV编程插件Image Watch安装和使用介绍

安装 下载适合vs2017最新版本的Image Watch(ImageWatch.vsix)&#xff0c;下载地址 安装ImageWatch&#xff0c;双击ImageWatch.vsix进行安装即可&#xff1b; 使用 打开一个OpenCV工程&#xff0c;在Debug下设置断点&#xff0c;通过view -> other windows -> Image W…

基于51单片机宠物自动投料喂食器控制系统仿真设计( proteus仿真+程序+讲解视频)

基于51单片机宠物自动投料喂食器控制系统仿真设计( proteus仿真程序讲解视频&#xff09; 仿真图proteus 7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0029 视频讲解 基于51单片机的宠物自动投料喂食器控制系统proteu…

数据结构—最小生成树

目录 一、生成树 二、最小生成树&#xff08;代价最小树&#xff09; 三、求最小生成树 1、Prim算法&#xff08;普里姆&#xff09; 2.Kruskal 算法&#xff08;克鲁斯卡尔&#xff09; 3.Prim算法和Kruskal算法对比 一、生成树 连通图的生成树是包含图中全部顶点的一个…

[附源码]Nodejs计算机毕业设计基于框架的秧苗以及农产品交易网站Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

算法分析专业工具——大O记法

本文内容借鉴一本我非常喜欢的书——《数据结构与算法图解》。学习之余&#xff0c;我决定把这本书精彩的部分摘录出来与大家分享。 写在前面 从之前的章节中我们了解到&#xff0c;影响算法性能的主要因素是其所需的步数。 然而&#xff0c;我们不能简单地把一个算法记为“…

Postman下载,安装,汉化,注册及登录教程

目录 一、Postman简介 二、Postman的注册 1、首先下载Postman&#xff0c;进入官网&#xff1a;Download Postman | Get Started for Free 2、安装Postman 3、下载汉化包 4、找到所下载的app.zip文件&#xff0c;将文件进行解压&#xff0c;放置到此路径下 Postman\app9…

代码随想录Day52|300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组

文章目录300.最长递增子序列674.最长连续递增序列718.最长重复子数组300.最长递增子序列 文章讲解&#xff1a;代码随想录 (programmercarl.com) 题目链接&#xff1a;300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 给你一个整数数组 nums…

Eclipse常用开发配置

Eclipse常用开发配置1. 编码配置1.1 输出中文乱码问题1.2 Java文件中文乱码2. 切换JDK、修改JRE3. 错误&#xff1a;找不到或无法加载主类4. 修改字体大小4.1 修改编辑窗口字体大小4.2 修改编译器字体大小5. 新建Java项目6. 导入项目6.1 导入git6.2 导入已有Java项目7. 运行中文…

.net core AutoMapper的简单使用。

AutoMapper主要处理对象与对象之间的映射&#xff0c;减少程序员自己编写代码的工作量&#xff0c;提高开发效率。 应用场景&#xff1a; 假如你想对原始数据&#xff0c;进行部分字段展示&#xff0c;那么你需要创建一个对应的DTO类&#xff0c;进行手动映射&#xff0c;这样…

在电网上使用的储能系统模拟(simulink)

目录 1 概述 2 配电系统 3 动态负载模型 4 光伏电场和TMY3数据 5 储能系统 (ESS) 6 案例 7 仿真结果 8 Simulink&Matlab代码实现 1 概述 (1)目标展示了SimPowerSystems在不到一分钟的模拟时间内&#xff0c;以相量模式模拟电路和控制系统的能力。 (2)说明与能量存储…

对话顶立欧雅纳特丨传统制造企业的“人货场”重构该从何入手?

链条长、客单价高、标准化程度低、交付周期长......作为传统制造行业中颇具代表性的领域&#xff0c;家居建材一直被视为“距离互联网最远”行业之一&#xff0c;平均仅有10%的数字化率&#xff0c;行业整体的数字化转型相对滞后。随着外部环境的变动与行业生态的发展&#xff…

RK3588平台开发系列讲解(AUDIO篇)Android音频调试--tiny-alsa 工具

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、工具介绍二、工具的使用2.1 tinyplay2.1 tinycap2.3 tinymix2.4 tinypcminfo沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍Android下audio调试工具tiny-alsa的使用方法。 一、工具介绍 RK平台…

FFT学习笔记(快速傅里叶变换)

用途 快速傅里叶变换&#xff08;Fast Fourier Transformation&#xff0c;简称FFT&#xff09; 一般用来加速多项式乘法。求两个nnn次多项式相乘&#xff0c;朴素算法需要O(n2)O(n^2)O(n2)&#xff0c;但FFT只需要O(nlog⁡n)O(n\log n)O(nlogn)就能解决。 多项式 系数表示法…

基于java的扫雷游戏的设计-计算机毕业设计

项目介绍 扫雷游戏的基本功能&#xff1a;点击鼠标左键于未知区域,如果未知区域有雷,游戏停止,显示所有的地雷。如果没雷,则显示周围雷数,如果周围没雷,则再查看周围八个区域是否有雷直到有雷为止并显示,玩家需要尽快找出雷区中的所有不是地雷的方块&#xff0c;而不许踩到地雷…

jsp+ssh+mysql实现的Java web学生考勤管理系统源码附带视频指导运行教程

今天给大家演示的是一款由jspsshmysql实现的Java web学生考勤管理系统&#xff0c;其中struts版本是struts2。本系统实现了管理员、学生、教师三个角色的功能&#xff0c;其中管理员可以管理基本信息&#xff0c;如班级信息、课程信息、用户信息、课程表等。教师可以管理自己班…

mongodb实现请求日志存储

引言 最近学习了mongodb&#xff0c;想实际应用到项目中&#xff0c;就先简单实现了一个存储请求日志的功能&#xff1b; 为什么使用mongodb存储日志&#xff0c;主要是因为日志数据量大、低价值、写入频繁&#xff0c;并且对事务要求不高&#xff0c;使用传统的关系型数据库…

Java强软弱虚引用和ThreadLocal工作原理(二)

1. 前言 读本篇文章之前&#xff0c;请移步到上一篇文章Java强软弱虚引用和ThreadLocal工作原理&#xff08;一&#xff09;_broadview_java的博客-CSDN博客 我们继续来讲一下java的强软弱引用在Android开发中的使用&#xff0c;并深入理解一下ThreadLocal的原理 2. 强软弱引…

Pro3:js实现放大镜效果

在我们平时见到很多购物网站都会有放大镜效果的出现&#xff0c;当我们将鼠标放在一个商品图片的上面&#xff0c;就会在旁边出现对应的放大效果。 实现步骤 实现原理是非常简单的&#xff0c;实际上是两张图片&#xff0c;一张原图和一张更大尺寸的图片。一开始通过css样式…

MessageFormat的具体使用(格式化消息)

文章目录1. 前言2. 先说结论3. 在结论上补充其他更加特殊情况1. 数字类型可以使用#字符来确认精度2. 数组类型转化需要注意3. 输出特殊字符4. 如何判断一个String是否有替换位4. 粗略原理1. 前言 在工作中发现接口的返回报文&#xff0c;大部分公司通常都会封装一层&#xff0c…