Prometheus 部署告警对接 QQ 邮箱

116 篇文章 17 订阅
94 篇文章 9 订阅
本文详细介绍了Prometheus监控系统中的告警功能,包括告警规则、Alertmanager的静默、抑制和分组机制。在实际操作中,通过配置Alertmanager对接邮箱,演示了从定义告警规则到启动Prometheus和Alertmanager的完整流程,以及如何通过模拟故障测试告警系统的有效性。
摘要由CSDN通过智能技术生成


引言

  • Prometheus 对指标的收集、存储同告警能力分属于 Prometheus ServerAlertManager(通用组件) 两个独立的组件,前者仅负责基于 “告警规则” 生成告警通知,具体的告警操作则由后者完成。

  • Alertmanager 负责处理由客户端发来的告警通知客户端通常是 Prometheus server,但它也支持接收来自其它工具的告警。

  • Alertmanager 对告警通知进行分组、去重后,根据路由规则将其路由到不同的 receiver,如 Email、短信或 PagerDuty 等。

  • 目前 Alertmanager 还不支持钉钉,那用户完全可以通过 Webhook 与钉钉机器人进行集成,从而通过钉钉接收告警信息。

  • 同时 AltManager 还提供了 静默告警抑制机制 来对告警通知行为进行优化。

PS:webhook 是一个 APR 概念,webhook 是一种 web 回调或者 http 的 push APT。Webhook 作为一个轻量的事件处理应用。

一、定义

1. 告警功能概述

  • prometheus 对指标的收集、存储与告警能力分属于 Prometheus server 和 alertmanager 两个独立的组件,pro-server 只负责通过 “告警规则” 生成告警通知,具体告警操作是由 alertmmanager 完成。

  • 告警规则是由 PromQL 编写的布尔值表达式使用 >< = 与一个常用量值,比如 80% 进行比较,其返回值为 true 或 false。

  • prometheus-server 对抓取到的指标序列与告警规则中做为比较的 Prometheus 匹配,则会把此样本值抓取过来作比较,若返回值为 true 则认为指标异常,不能满足 false,则为正常值以上表达式为告警规则表达式。
    比如:筛选一个指标数据 cpu 使用率 <0% 系统异常

2. 通知告警信息

  一旦条件表达式为 true 就会触发通知信息,送给 altermanager,由 alter 借助特定服务的 API 或者访问入口,将此信息发出去,一般称为告警媒介,也可以借助邮件进行告警(SMTP)。

3. Prometheus 监控系统的告警逻辑

  • route:告警路由,分组、分类分发告警消息给不同渠道。

  • prometheus 通过 alter-rule 规则,生成告警通知给 altermanager,altermanager 会生成本地的告警路由表(第一路由默认称为根路由,所有的告警信息都需要一个根路由,没有一个匹配项,则需要设置一个默认路由)为实现将特定的信息发送给特定的用户。

例如:
按消息级别来看: 严重、中等、普通级别、红色报警、蓝色报警,应用发送方
按分组: 业务运维、系统运维、基础设施运维、k8s 运维

3.1 告警功能

除了基本的告警通知能力外,Altermanager 还支持对告警进行去重、分组、抑制。

3.2 静默、抑制、分组等功能

分组(Grouping):将相似告警合并为单个告警通知的机制,在系统因大面积故障而触发告警潮时,分组机制能避免用户被大量的告警噪声淹没,进而导致关键信息的隐没。
抑制(Inhibition):系统中某个组件或服务故障而触发告警通知后,那些依赖于该组件或服务的其它组件或服务可能也会因此而触发告警,抑制便是避免类似的级联告警的一种特性,从而让用户能将精力集中于真正的故障所在。
静默(silent):是指在一个特定的时间窗口内,即便接收到告警通知,Alertmanager 也不会真正向用户发送告警信息的行为;通常,在系统例行维护期间,需要激活告警系统的静默特性。
路由(route):用于配置 Alertmanager 如何处理传入的特定类型的告警通知,其基本逻辑是根据路由匹配规则的匹配结果来确定处理当前告警通知的路径和行为。

二、部署告警对接邮箱

192.168.10.20
在 prometheus-server 端定义告警规则,指定 alertmanager 的位置,将告警信息发送给 alert 处理

1. 下载安装包

wget http://101.34.22.188/prometheus/alertmanager-0.21.0.linux-amd64.tar.gz
tar zxvf alertmanager-0.21.0.linux-amd64.tar.gz -C /usr/local/
ln -s /usr/local/alertmanager-0.21.0.linux-amd64/ /usr/local/alertmanager
  • 配置文件解析
cat /usr/local/alertmanager/alertmanager.yml
global:													#全局参数
  resolve_timeout: 5m
  
route:													#路由信息
  group_by: ['alertname']								#分组
  group_wait: 30s		 								#分组缓冲/等待时间
  group_interval: 5m	 								#重新分组时间
  repeat_interval: 1h	 								#重新告警间隔
  receiver: 'web.hook'	 								#接收方/媒介
receivers:
- name: 'web.hook'
  webhook_configs:
  - url: 'http://127.0.0.1:5001/'						#标注5001端口
inhibit_rules:											#抑制规则的策略
  - source_match:										#匹配项
      severity: 'critical'								#严重的级别
    target_match:
      severity: 'warning'								#target匹配warning级别
    equal: ['alertname', 'dev', 'instance']				#符合alertname、dev、instance

2. 修改配置文件

cd /usr/local/alertmanager
cp alertmanager.yml alertmanager.yml.bak
--------------------------------------
vim alertmanager.yml

global:
  resolve_timeout: 5m   
  smtp_from: 1520509800@qq.com
  smtp_auth_username: 1520509800@qq.com
  smtp_auth_password: xjoxalmmtxtbhgja
  smtp_require_tls: false
  smtp_smarthost: 'smtp.qq.com:465'

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'email-test'
receivers:
- name: 'email-test'
  email_configs:
  - to: 1520509800@qq.com
    send_resolved: true

3. 配置绑定的邮箱

略(自行百度)

4. 启动 alertmanager

cd /usr/local/alertmanager/
nohup ./alertmanager & 
  • 配置文件
#需要注意prometheus的位置
cd /usr/local/prometheus-2.27.1.linux-amd64/
mkdir alert-config
cd alert-config/
mkdir alert_rules targets
cd alert_rules/

---------------------------------------------------------------------

vim instance_down.yaml 							#邮件会接收到的信息

groups:
- name: AllInstances
  rules:
  - alert: InstanceDown							
    #Condition for alerting
    expr: up == 0								
    for: 1m
    #Annotation - additional informational labels to store more information
    annotations:
      title: 'Instance down'
      description: 'Instance has been down for more than 1 minute.'
    #Labels - additional labels to be attached to the alert
    labels:
      severity: 'critical'						

cd ..
cd targets/
vim alertmanagers.yaml

- targets:
  - 192.168.10.20:9093
  labels:
    app: alertmanager
----------------------------------------------------------------------------------------------
vim nodes-linux.yaml

- targets:
  - 192.168.10.30:9100
  - 192.168.10.40:9100
  - 192.168.10.50:9100
  labels:
    app: node-exporter
    job: node
--------------------------------------------------------------------------------------------
vim prometheus-servers.yaml 

- targets:
  - 192.168.10.20:9090
  labels:
    app: prometheus
    job: prometheus
-----------------------------------------------------------
[root@prometheus /usr/local/prometheus-2.27.1.linux-amd64/alert-config]#tree
.
├── alert_rules
│   └── instance_down.yaml
└── targets
    ├── alertmanagers.yaml
    ├── nodes-linux.yaml
    └── prometheus-servers.yaml
  • prometheus 启动文件
[root@prometheus /usr/local/prometheus-2.27.1.linux-amd64]#cp prometheus.yml prometheus.yml.bak

###注意各个配置文件路径,可用绝对路径
[root@prometheus /usr/local/prometheus-2.27.1.linux-amd64]#vim prometheus.yml 

# my global config
# Author: MageEdu <mage@magedu.com>
# Repo: http://gitlab.magedu.com/MageEdu/prometheus-configs/
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:
  - file_sd_configs:
    - files:
      - "/usr/local/prometheus-2.27.1.linux-amd64/alert-config/targets/alertmanagers*.yaml"

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  - "rules/*.yaml"
  - "/usr/local/prometheus-2.27.1.linux-amd64/alert-config/alert_rules/*.yaml"

# 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'.
    file_sd_configs:
    - files:
      - /usr/local/prometheus-2.27.1.linux-amd64/alert-config/targets/prometheus-*.yaml
      refresh_interval: 2m

  # All nodes
  - job_name: 'nodes'
    file_sd_configs:
    - files:
      - /usr/local/prometheus-2.27.1.linux-amd64/alert-config/targets/nodes-*.yaml
      refresh_interval: 2m

  - job_name: 'alertmanagers'
    file_sd_configs:
    - files:
      - /usr/local/prometheus-2.27.1.linux-amd64/alert-config/targets/alertmanagers*.yaml
      refresh_interval: 2m

5. 启动 prometheus

指定修改的配置文件启动

cd /usr/local/prometheus-2.27.1.linux-amd64/
nohup ./prometheus --config.file=./prometheus.yml &

6. 模拟故障

  • 停止一台 node_exporter,等一会看看有没有报警邮件

  • 查看 prometheus-ui

在这里插入图片描述

  • 查看QQ邮箱

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值