Prometheus实现系统监控报警邮件

Prometheus实现系统监控报警邮件

简介

Prometheus将数据采集和报警分成了两个模块。报警规则配置在Prometheus Servers上,
然后发送报警信息到AlertManger,然后我们的AlertManager就来管理这些报警信息,聚合报警信息过后通过email、PagerDuty、HipChat、Slack 等方式发送消息提示。本文演示通过email发送告警信息。
中文技术文档:https://www.prometheus.wang/alert/install-alert-manager.html
在Prometheus中一条告警规则主要由告警名称和告警规则两部分组成:
告警名称:用户为告警规则命名
告警规则:告警规则由PromQL进行定义,其实际意义是当表达式(PromQL)查询结果持续多长时间(During)后出发告警
Prometheus服务器根据报警规则将警报发送给Alertmanager,然后Alertmanager将静默(silencing)、抑制(inhibition)、分组聚合(aggregation)等消息通过Email、钉钉等发送通知。

报警流程

Prometheus配置监控规则
监控对象触发阈值
阈值超出持续时间
推送告警到Alertmanager
Alertmanager处理告警信息
1)分组(group):类似告警合并为一个通知。
2)静默(silences):不通知,系统升级时使用。
3)抑制(inhibition): 只通知一次,相同内容不再通知。
Alertmanager发送通知到媒体,邮箱,钉钉,企业微信等接收到通知

Alertmanager特性

分组聚合:分组将同一类型的报警归类单个报警通知 。适用于当系统宕机导致大量报警被同时触发,此时分组机制可将这些被触发的告警合并为一个告警通知,避- 免一次性发送大量告警通知。

静默:提供了一个简单的机制可以快速根据标签对告警进行静默处理。特定时间不会发送告警通知。

抑制:指当警报发出后,停止重复发送由此警报引发其他错误的警报的机制。如网络不可达,导致其他服务连接相关警报。

安装Alertmanager

下载二进制文件

wget https://github.com/prometheus/alertmanager/releases/download/v0.24.0/alertmanager-0.24.0.linux-amd64.tar.gz
tar zxvf alertmanager-0.24.0.linux-amd64.tar.gz
mv alertmanager-0.24.0.linux-amd64 /usr/local/alertmanager

创建alertermanager服务

vim /etc/systemd/system/alertmanager.service
[Unit]
Description=alertmanager
Documentation=https://prometheus.io/
After=network.target

[Service]
User=root
Type=simple
#不能有单引号和双引号
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml --storage.path=/usr/local/alertmanager/data --web.listen-address=:19093 --cluster.listen-address=0.0.0.0:19094 --web.external-url=http://192.168.1.108:19093
Restart=on-failure

[Install]
WantedBy=multi-user.target

启动服务:

systemctl daemon-reload
systemctl start  alertmanager
systemctl enable alertmanager
systemctl status alertmanager

访问 192.168.1.108:19093 为alertmanager管理页面:
端口号为你再alertmanager,service中配置的端口
在这里插入图片描述

Alertmanager配置

配置文件详解,以邮箱告警为例:

vim /usr/local/alertmanager/alertmanager.yml
#邮件发送者
global:
  resolve_timeout: 30s
  smtp_smarthost: 'smtp.qq.com:465' 
  smtp_from: '809xxx59@qq.com' 
  smtp_auth_username: '80xxx4859@qq.com' 
  smtp_auth_password: 'xxxxxxxxvpobcee' # QQ邮箱授权码,需要在设置,开启SMTP服务,然后复制授权码到这里
  smtp_hello: '@qq.com'
  smtp_require_tls: false

templates:
  - '/usr/local/alertmanager/tmpl/email.tmpl'  #增加templates配置 不填写,有默认模板
route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 5m
  receiver: 'email'
  routes:
  - receiver: dingtalk-webhook
    group_wait: 10s
  - receiver: email
    group_wait: 10s
receivers:
  - name: 'email'
    email_configs:
      - to: '*****@163.com'
      	html: '{{ template "email.html" . }}' # 发送邮件的内容(调用模板文件中的) 如果使用默认模板,这个“html”可以不添加
        send_resolved: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']
项目Value
global全局设置,这里为邮件发送者的配置
smtp邮箱smtp设置
group_by通过alertname的值对告警进行分类
group_wait第一次产生告警,等待10s,组内有告警就一起发送,内有其他告警就单独发出
group_interval第二次发生告警,先等待2分钟,2分钟后还没有回复就进入repeat_interval
repeat_interval再最终发送消息前再等待5分钟,5分钟后还没有回复就发送第二次告警
receiver接受者,再receivers中选择一个
receivers定义接受者们,可定义多个
name接受者名字,将被receiver选择
email_configs邮箱接受者设置
html发送邮件的内容(调用模板文件中的)
send_resolved是否发送告警解决的通知
inhibit_rules抑制设置,即哪些告警发通知,哪些不发
source_match源匹配的告警将被通知
severity严重程度为critical ,重要的告警将被通知
target_match目标匹配的告警不被通知
severity严重程度为warming,警告的告警将被通知
equal匹配哪些对象的告警

编辑报警模块,可用默认模板:

vim /usr/local/alertmanager/tmpl/email.tmpl
{{ define "email.html" }}
{{- if gt (len .Alerts.Firing) 0 -}}{{ range .Alerts }}
<h2>@告警通知</h2>
告警程序: prometheus_alert <br>
告警级别: {{ .Labels.severity }}<br>
告警类型: {{ .Labels.alertname }} <br>
故障主机: {{ .Labels.instance }} <br>
告警主题: {{ .Annotations.summary }} <br>
告警详情: {{ .Annotations.description }} <br>
触发时间: {{ .StartsAt.Local.Format "2006-01-02 15:04:05" }} <br>
{{ end }}{{ end -}}

Prometheus规则

新建规则文件,配置分组信息,告警阈值和时间,告警标签和注释等。
指标表达式采用PromQL语句,多数指标单位为bytes字节,需要转换成KMG,例如2M=210241024。
Prometheus规则文件,对于邮箱,钉钉或企业微信,该文件通用:

vim /home/prometheus/prometheus/rule/tcp_time_wait.yml
groups:
- name: 主机Tcp TimeWait数量过多告警
  rules:
  - alert: 主机Tcp TimeWait数量过多告警
    expr: node_sockstat_TCP_tw >= 100	 # 大于100 做测试用,正常是5000
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "Tcp TimeWait数量大于100, 实例: {{ $labels.instance }},当前值:{{ $value }}%"

检验prometheus报警规则文件,显示SUCCESS:

/home/prometheus/prometheus/promtool check rules rule/tcp_time_wait.yml
Checking rule/qtalk_auth.yml
  SUCCESS: 1 rules found

Prometheus配置
配置Prometheus文件,alertmanagers服务器的IP和端口,prometheus服务器规则文件的路径:

vim /home/Prometheus/prometheus/prometheus.yml
# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets: ["192.168.1.108:19093"]
           #- alertmanager:["192.168.1.108:19093"]

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

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090"]

  - job_name: 'process'
    static_configs:
      - targets: ['192.168.1.108:9256']

重启Prometheus服务:

systemctl restart prometheus.service
邮箱告警
查看Prometheus

Prometheus首页,Alerts选项,可以查看告警信息:

报警状态分3种:

inactive:没有异常。
pending:已触发阈值,但未满足告警持续时间(即 rule 中的 for 字段)。
firing:已触发阈值且满足条件并发送至 alertmanager。
pending状态,阈值触发了,但再观察30m秒(for: 30s)。

在这里插入图片描述
firing状态,30秒过后还超出阈值,则发送至alertmanager。
查看Alertmanager
只有在Prometheus中Firing的警告才会传到Alertmanager,进入首页查看。

查看邮箱

在这里插入图片描述

至此,一个简单的基于Prometheus的系统监控及报警通知的服务都搭建完成,利用这样一套监控通知体系,可以让系统运维人员早早的知道系统健康度,保证系统高可用。

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

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

相关文章

Java并发编程之顺序一致性

如果程序是正确同步的&#xff0c;程序的执行将具有顺序一致性&#xff08;Sequentially Consistent&#xff09;——即程序的执行结果与该程序在顺序一致性内存模型中的执行结果相同。 同步&#xff0c;即排队。 同一时刻&#xff0c;只能有一个线程和内存交互&#xff01;&a…

21.Netty源码之编码器

highlight: arduino-light Netty如何实现自定义通信协议 在学习完如何设计协议之后&#xff0c;我们又该如何在 Netty 中实现自定义的通信协议呢&#xff1f;其实 Netty 作为一个非常优秀的网络通信框架&#xff0c;已经为我们提供了非常丰富的编解码抽象基类&#xff0c;帮助我…

【Mybatis】XML映射文件

目录 11.3XML映射文件 1.select 2.insert、update、delete 3.Sql 4.parameters(参数) 5.resultMap 6.resultMap 使用示例 (1)在先前创建的数据库stu中创建表student 2&#xff0c;并插入若干条数据&#xff0c;代码如下&#xff1a; (2)创建工程mybatis_ResultMap_demo。 (…

【Lua学习笔记】Lua进阶——垃圾回收

按照唐老师的课程本来要讲自带库的&#xff0c;但是想想这东西能看文档&#xff0c;ctrl左键还能看注解&#xff0c;并且最重要的许多自带库的方法基本大部分语言都有&#xff0c;其实看看就能懂了。所以还是重点讲讲垃圾回收 文章目录 GC辅助垃圾回收collectgarbage增量模式分…

【雕爷学编程】MicroPython动手做(32)——物联网之MQTT

MQTT &#xff08;Message Queuing Telemetry Transport&#xff09;消息队列遥测传输协议&#xff0c;是一种基于发布/订阅&#xff08;publish/subscribe&#xff09;模式的"轻量级"通讯协议&#xff0c;该协议构建于TCP/IP协议上&#xff0c;由IBM在1999年发布。M…

2023 电赛 E 题 激光笔识别有误--使用K210/Openmv/树莓派/Jetson nano实现激光笔在黑色区域的目标检测

1. 引言 1.1 激光笔在黑色区域目标检测的背景介绍 在许多应用领域&#xff0c;如机器人导航、智能家居和自动驾驶等&#xff0c;目标检测技术的需求日益增加。本博客将聚焦于使用K210芯片实现激光笔在黑色区域的目标检测。 激光笔在黑色区域目标检测是一个有趣且具有挑战性的…

cpolar内网穿透外网远程访问本地网站

cpolar内网穿透外网远程访问本地网站 文章目录 cpolar内网穿透外网远程访问本地网站 在现代人的生活中&#xff0c;电脑是离不开的重要设备&#xff0c;大家看到用到的各种物品都离不开电脑的支持。尽管移动电子设备发展十分迅速&#xff0c;由于其自身存在的短板&#xff0c;使…

css, resize 拖拉宽度

效果如下&#xff1a; 可直接复制预览查看属性值: 关键样式属性&#xff1a; resize: horizontal; overflow-x: auto; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content…

Qt应用开发(基础篇)——数值微调输入框QAbstractSpinBox、QSpinBox、QDoubleSpinBox

目录 一、前言 二、QAbstractSpinBox类 1、accelerated 2、acceptableInput 3、alignment 4、buttonSymbols 5、correctionMode 6、frame 7、keyboardTracking 8、readOnly 9、showGroupSeparator 10、specialValueText 11、text 12、wrapping 13、信号 二、Q…

pytorch实战-图像分类(一)(数据预处理)

目录 1.导入各种库 2.数据预处理 2.1数据读取 2.2图像增强 3.构建数据网络 3.1网络构建 3.2读取标签对应的名字 4.展示数据 4.1数据转换 4.2画图 5.模型训练 1.导入各种库 上代码&#xff1a; import os import matplotlib.pyplot as plt %matplotlib inline import nu…

一台电脑给另外一台电脑共享网络

这里写自定义目录标题 有网的电脑上操作一根网线连接两台电脑没网的电脑上 有网的电脑上操作 右键->属性->共享 如同选择以太网&#xff0c;勾选。确认。 一根网线连接两台电脑 没网的电脑上 没网的电脑为mips&麒麟V10 新增个网络配置ww&#xff0c;设置如下。 …

2.05 购物车后台刷新并显示

一.用户登录添加商品使用cookie存入购物车&#xff0c;并把购物车商品传入到后台 步骤1&#xff1a;创建购物车BO对象 public class ShopcartBO {private String itemId;private String itemImgUrl;private String itemName;private String specId;private String specName;p…

7.物联网操作系统互斥信号量

1.使用互斥信号量解决信号量导致的优先级反转&#xff0c; 2.使用递归互斥信号量解决互斥信号量导致的死锁。 3.高优先级主函数中多次使用同一信号量的使用&#xff0c;使用递归互斥信号量&#xff0c;但要注意每个信号量的使用要对应一个释放 优先级翻转问题 优先级翻转功能需…

牛客网Verilog刷题——VL48

牛客网Verilog刷题——VL48 题目答案 题目 在data_en为高期间&#xff0c;data_in将保持不变&#xff0c;data_en为高至少保持3个B时钟周期。表明&#xff0c;当data_en为高时&#xff0c;可将数据进行同步。本题中data_in端数据变化频率很低&#xff0c;相邻两个数据间的变化&…

【计算机视觉|人脸建模】SOFA:基于风格、由单一示例的2D关键点驱动的3D面部动画

本系列博文为深度学习/计算机视觉论文笔记&#xff0c;转载请注明出处 标题&#xff1a;SOFA: Style-based One-shot 3D Facial Animation Driven by 2D landmarks 链接&#xff1a;SOFA: Style-based One-shot 3D Facial Animation Driven by 2D landmarks | Proceedings of …

磁盘均衡器:HDFS Disk Balancer

HDFS Disk Balancer 背景产生的问题以及解决方法 hdfs disk balancer简介HDFS Disk Balancer功能数据传播报告 HDFS Disk Balancer开启相关命令 背景 相比较于个人PC&#xff0c;服务器一般可以通过挂载多块磁盘来扩大单机的存储能力在Hadoop HDFS中&#xff0c;DataNode负责最…

【数据结构与算法】线索化二叉树

线索化二叉树 n 个节点的二叉链表中含有 n 1 【公式 2n - (n - 1) n 1】个空指针域。利用二叉链表中的空指针域&#xff0c;存放指向该节点在某种遍历次序下的前驱和后继节点的指针&#xff08;这种附加的指针称为“线索”&#xff09;。这种加上了线索的二叉链表称为线索链…

网站是如何进行访问的?在浏览器地址栏输入网址并回车的一瞬间到页面能够展示回来,经历了什么?

这个问题是检验web和计网学习程度的经典问题。 网站访问流程&#xff1a; 1.域名->ip地址 1) 在输入完一个域名之后&#xff0c;首先是检查浏览器自身的DNS缓存是否有相应IP地址映射&#xff0c;如果没有对应的解析记录&#xff0c;浏览器会查找本机的hosts配置文件&…

【Spring Boot】Thymeleaf模板引擎 — Thymeleaf表达式

Thymeleaf表达式 本节介绍Thymeleaf的各种表达式&#xff0c;通过一些简单的例子来演示Thymeleaf的表达式及用法。 1.变量表达式 变量表达式即获取后台变量的表达式。使用${}获取变量的值&#xff0c;例如&#xff1a; <p th:text"${name}">hello</p>…

leetcode 763. 划分字母区间

2023.8.3 本题的关键是要确保同一字母需要在同一片段中&#xff0c;而这就需要关注到每个字母最后一次出现的位置。 思路&#xff1a;用一个哈希表保存每个字母&#xff08;26个&#xff09;最后一次出现的位置。然后从头遍历&#xff0c;不断更新最右边界&#xff0c;直到当前…