Promethazine(三):Alertmanager配置,并实现飞书告警

2024-03-20 20:04

本文主要是介绍Promethazine(三):Alertmanager配置,并实现飞书告警,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1 Alertmanager实现告警
    • 1.1 告警概述
    • 1.2 Alertmanager说明
      • 1、分组
      • 2、抑制(Inhibition)
      • 3、静默(Silences)
    • 1.3 Alertmanager安装配置
      • 1、安装Alertmanager
        • 配置模板
      • 2、配置快速启动文件
      • 3、进行Prometheus配置
      • 4、配置告警规则
      • 5、验证
    • 1.4 部署 prometheusAlert - 发送飞书告警
      • 1、简单介绍
      • 2、创建飞书机器人
      • 3、安装配置prometheusAlert
      • 4、配置快速启动文件
      • 5、修改alertmanager配置文件
        • 最终确定的配置文件
      • 6、验证
      • 7、修改告警模板
  • 总结

1 Alertmanager实现告警

1.1 告警概述

使用 Prometheus 发出警报分为两部分。Prometheus 服务器的告警规则会将告警发送给Alertmanager。然后,Alertmanager 管理这些警报,包括静音、抑制、聚合和 通过电子邮件、随叫随到的通知系统和聊天平台等方法发送通知。
配置告警和通知的主要步骤如下:

  • 设置和配置 Alertmanager
  • 配置 Prometheus 与 Alertmanager 通信
  • 在 Prometheus 中创建报警规则

1.2 Alertmanager说明

Alertmanager 负责处理客户端应用程序(如 Prometheus 服务器)发送的警报。它负责消除重复、分组,并将它们路由到正确的接收器集成,如电子邮件、PagerDuty 或 OpsGenie。同时,它还负责静默和告警抑制。
以下是一些常见概念:

1、分组

分组将性质相似的警报分类为单个通知。当许多系统同时发生故障,可能同时触发数百到数千个警报时,这在较大的中断期间特别有用。
例如:当网络分区发生时,集群中正在运行数十或数百个服务实例。一半的服务实例不能再访问数据库。Prometheus的警报规则被配置为在每个服务实例无法与数据库通信时发送警报。结果,数百个警报被发送到Alertmanager。
作为用户,人们只想获得一个页面,同时仍然能够准确地看到哪些服务实例受到了影响。因此,我们可以配置Alertmanager,将警报按集群和alertname分组,这样它就会发送一个紧凑的通知。
警报分组、分组通知的定时以及这些通知的接收者由配置文件中的路由树配置。

2、抑制(Inhibition)

告警抑制,当在已经触发某些警告的情况下,压制与其相关的其他特定警告不发送通知
例如:当有一个警告触发,告知整个集群无法访问时,Alertmanager可以被配置为抑制与该集群相关的所有其他警告的通知。这有助于避免因为成百上千个不相关的警告触发而发送通知,从而帮助用户聚焦于实际的问题。
抑制是通过Alertmanager的配置文件来配置的。

3、静默(Silences)

静默是一种简单直接的方式来在特定时间内压制警告。静默的配置基于匹配器,就像路由树一样。传入的警告会检查是否匹配活跃静默中所有的等号或正则表达式匹配器。如果匹配,则不会为该警告发送任何通知。
静默是在Alertmanager的Web界面中进行配置的。

1.3 Alertmanager安装配置

1、安装Alertmanager

tar -zxf alertmanager-0.26.0.linux-amd64.tar.gz
cd alertmanager-0.26.0.linux-amd64/vim alertmanager.yml
### 进行配置文件修改
global:resolve_timeout: 5m #处理超时时间,默认为5分钟smtp_from: 'xxx@qq.com'       # smtp_from:指定通知报警的邮箱smtp_smarthost: 'smtp.qq.com:25'        # smtp_smarthost: 使用email打开服务配置smtp_auth_username: xxx@qq.com'    # smtp_auth_username:邮箱用户名smtp_auth_password: xxxxxxxxxxxxj'    # 此处为邮箱授权码route:group_by: ['alertname', 'item']  # 传入报警分组在一起的标签,如item=测试和alertname=Disk的多个报警将批处理为单个组group_wait: 30s  # 这个参数设置了在发送第一批警报之后,Alertmanager 等待新警报加入现有组的时间。此处 group_wait 被设置为 30 秒。如果在 30 秒内没有新的警报加入组,那么这个组的警报将被发送出去。group_interval: 300s  # 发送组警报的时间间隔repeat_interval: 4h  # 对同一个警报组的重复通知之间的时间间隔 对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝receiver: 'email'   # 发送警报的接收者的名称,以下receivers name的名称# 定义模板
#templates:
#  - '/usr/local/alertmanager/template/*.tmpl'receivers:# 接收邮件的邮箱
- name: 'email'email_configs:- to: 'xxxxxxxx'inhibit_rules: # 抑制规则- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['alertname', 'dev', 'instance', 'prod']
配置模板
mkdir template
cat template/test.tmpl
{{ define "test.html" }}{{ range $i, $alert := .Alerts.Firing }}[报警项名]:{{ index $alert.Labels "alertname" }}[报警主机]:{{ index $alert.Labels "instance" }}[报警阀值]:{{ index $alert.Annotations "value" }}[开始时间]:{{ $alert.StartsAt }}{{ end }}
{{ end }}

2、配置快速启动文件

cd ..
mv alertmanager-0.26.0.linux-amd64 /usr/local/alertmanager
mkdir /usr/local/alertmanager/data#######
cat > /usr/lib/systemd/system/alertmanager.service << EOF[Unit]
Description=alertmanager server daemon
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target[Service]
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml --storage.path=/usr/local/alertmanager/data
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s[Install]
WantedBy=multi-user.targetEOF#######
# 重新加载配置
systemctl daemon-reload
systemctl start alertmanager.service
systemctl status alertmanager.service

可以查看alertmanager信息:http://ip:9093
在这里插入图片描述

3、进行Prometheus配置

mkdir /usr/local/prometheus/rules/vim /usr/local/prometheus/prometheus.yml
#######    
alerting:alertmanagers:- static_configs:- targets:- localhost:9093rule_files:- /usr/local/prometheus/rules/*.rules # 规则配置文件   systemctl restart prometheus.service

4、配置告警规则

告警规则可以参考:https://samber.github.io/awesome-prometheus-alerts/rules,并根据自己的需要进行修改

cat > /usr/local/prometheus/rules/hoststats-alert.rules << EOFgroups:
- name: hostStatsAlertrules:- alert: instanceDownexpr: up == 0for: 5mlabels:severity: nodeannotations:summary: "Instance {{ $labels.instance }} down"description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."- alert: diskFreeexpr: (1-(node_filesystem_free_bytes{fstype=~"ext4|xfs"} / node_filesystem_size_bytes{fstype=~"ext4|xfs"}) ) * 100 > 15for: 5mlabels:severity: pageannotations:summary: "Instance {{ $labels.instance }} down"description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."EOF#### 配置完成后重启服务
systemctl restart prometheus.service

可以在Prometheus提供的页面上查看告警规则:
下面可以查看所有的告警规则:
在这里插入图片描述

下面这个可以看到告警状态:
在这里插入图片描述

一个报警信息在生命周期内有下面3中状态:

  • inactive: 表示当前报警信息既不是firing状态也不是pending状态
  • pending: 表示在设置的阈值时间范围内被激活了
  • firing: 表示超过设置的阈值时间被激活了

5、验证

此时可以查看邮箱中是否有测试邮件
如果没有的话可以在 /var/log/syslog 查看是否有错误日志

1.4 部署 prometheusAlert - 发送飞书告警

1、简单介绍

alertmanager 是告警处理模块,但是告警消息的发送方法并不丰富。如果需要将告警接入飞书,钉钉,微信等,还需要有相应的SDK适配。prometheusAlert就是这样的SDK,可以将告警消息发送到各种终端上。
prometheus Alert 是开源的运维告警中心消息转发系统,支持主流的监控系统 prometheus,日志系统 Graylog 和数据可视化系统 Grafana 发出的预警消息。通知渠道支持钉钉、微信、华为云短信、腾讯云短信、腾讯云电话、阿里云短信、阿里云电话等。
这里主要是配置飞书告警。

2、创建飞书机器人

需要先创建一个群组
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

完成之后会自动生成一个webhook地址,记住这个webhook,就是以后要用的。

3、安装配置prometheusAlert

## 下载软件包wget 
wget -P /usr/local/src https://github.com/feiyu563/PrometheusAlert/releases/download/v4.8.1/linux.zip
unzip linux.zip
mv linux prometheusAlert##### 修改配置文件
cat prometheusAlert/conf/app.conf
######
### 比较重要的有几部分:端口,飞书rul的配置
#---------------------↓全局配置-----------------------
appname = PrometheusAlert
#登录用户名
login_user=prometheusalert
#登录密码
login_password=prometheusalert
#监听地址
httpaddr = "0.0.0.0"
#监听端口
httpport = 8088#---------------------↓webhook-----------------------
#是否开启钉钉告警通道,可同时开始多个通道0为关闭,1为开启
open-dingding=1
#默认钉钉机器人地址
ddurl=https://oapi.dingtalk.com/robot/send?access_token=xxxxx
#是否开启 @所有人(0为关闭,1为开启)
dd_isatall=1#是否开启微信告警通道,可同时开始多个通道0为关闭,1为开启
open-weixin=1
#默认企业微信机器人地址
wxurl=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxx#是否开启飞书告警通道,可同时开始多个通道0为关闭,1为开启
open-feishu=1
#默认飞书机器人地址
fsurl=https://open.feishu.cn/open-apis/bot/v2/hook/acb1fe4b-ce7d-4001-ab56-26551c6fee48

4、配置快速启动文件

mv prometheusAlert/ /usr/local/
chmod 755 /usr/local/prometheusAlert/PrometheusAlert## systemd管理,如果没有prometheus用户,则创建一个cat << EOF > /usr/lib/systemd/system/prometheusalert.service 
[Service]
ExecStart=/usr/local/prometheusAlert/PrometheusAlert
WorkingDirectory=/usr/local/prometheusAlert
Restart=always
[Install]
WantedBy=multi-user.target
[Unit]
Description=Prometheus Alerting Service
After=network.target
EOFsystemctl daemon-reload
systemctl start prometheusalert.service

登录:http://ip:8088
此处的用户名密码是在配置文件中进行配置的,可以自行修改
在这里插入图片描述
在这里插入图片描述

5、修改alertmanager配置文件

###### 在上述的基础上新加配置
route:routes:- receiver: 'web.hook'group_wait: 10sreceivers:
- name: 'web.hook'webhook_configs:- url: 'http://192.168.92.101:8088/prometheusalert?type=fs&tpl=prometheus-fs&fsurl=xxx'  
# url是prometheus-alert提供的固定格式。其中:
# type=fs表示为飞书
# tpl=prometheus-fs 表示是prometheus消息
# fsurl 为飞书机器人的webhook,就是创建飞书机器人拿到的webhook# 配置完成后重启
systemctl restart alertmanager.service
最终确定的配置文件
cat alertmanager.yml
global:resolve_timeout: 5m #处理超时时间,默认为5分钟smtp_from: 'xxxx'smtp_smarthost: 'smtp.qq.com:25'smtp_auth_username: 'xxxx'smtp_auth_password: 'xxxxxxxx'route:group_by: ['alertname', 'item']  # 传入报警分组在一起的标签,如item=测试和alertname=Disk的多个报警将批处理为单个组group_wait: 30s  # 最初即第一次等待多久时间发送一组警报的通知group_interval: 300s  # 在发送新警报前的等待时间repeat_interval: 4h  # 发送重复警报的周期 对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝receiver: 'email'   # 发送警报的接收者的名称,以下receivers name的名称routes:- receiver: 'web.hook'group_wait: 10s# 定义模板
templates:- '/usr/local/alertmanager/template/*.tmpl'receivers:
- name: 'web.hook'webhook_configs:- url: 'http://192.168.92.101:8088/prometheusalert?type=fs&tpl=prometheus-fs&fsurl=xxxxxxxxxxxx- name: 'email'email_configs:- to: 'xxxxx'inhibit_rules: # 抑制规则- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['alertname', 'dev', 'instance', 'prod']

6、验证

在这里插入图片描述

7、修改告警模板

自定义模板可以在这个网址中找:https://github.com/feiyu563/PrometheusAlert/issues/30
在这里插入图片描述

下面是我找到的一个模板

{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}
{{if eq $v.status "resolved"}}
**[Prometheus 恢复通知]({{$v.generatorURL}})**
告警名称:{{$v.labels.alertname}}
告警状态:{{$v.status}}
开始时间:{{TimeFormat $v.startsAt "2006-01-02 15:04:05"}}
结束时间:{{TimeFormat $v.endsAt "2006-01-02 15:04:05"}} 
实例地址:{{$v.labels.instance}}
主机名称:{{$v.labels.hostname}}
**{{$v.annotations.description}}**
{{else}}
**[Prometheus 报警通知]({{$v.generatorURL}})**
告警名称:{{$v.labels.alertname}}
告警状态:{{$v.status}} > {{$v.labels.severity}}
开始时间:{{TimeFormat $v.startsAt "2006-01-02 15:04:05"}}
结束时间:{{TimeFormat $v.endsAt "2006-01-02 15:04:05"}} 
实例地址:{{$v.labels.instance}}
主机名称:{{$v.labels.hostname}}
**{{$v.annotations.description}}**
{{end}}
{{ end }}

总结

  • 以上是邮件和飞书发送告警的配置方法,微信、钉钉等类似。
  • 可以先不配置飞书,先使用邮箱来做测试,等告警的整个流程理解之后再进行飞书等的测试
  • 告警规则可以参考:https://samber.github.io/awesome-prometheus-alerts/rules,并根据自己的需要进行修改
  • 告警信息的模板可以参考:https://github.com/feiyu563/PrometheusAlert/issues/30

这篇关于Promethazine(三):Alertmanager配置,并实现飞书告警的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/830587

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

hadoop开启回收站配置

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。 开启回收站功能参数说明 (1)默认值fs.trash.interval = 0,0表示禁用回收站;其他值表示设置文件的存活时间。 (2)默认值fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval的参数值相等。

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

wolfSSL参数设置或配置项解释

1. wolfCrypt Only 解释:wolfCrypt是一个开源的、轻量级的、可移植的加密库,支持多种加密算法和协议。选择“wolfCrypt Only”意味着系统或应用将仅使用wolfCrypt库进行加密操作,而不依赖其他加密库。 2. DTLS Support 解释:DTLS(Datagram Transport Layer Security)是一种基于UDP的安全协议,提供类似于

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal