Prometheus + alermanager + webhook-dingtalk 告警

 添加钉钉机器人

1. 部署 alermanager

1.1 下载软件包

wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz

网址 :Releases · prometheus/alertmanager (github.com)

1.2 解压软件包

mkdir -pv /app/tools/
tar xf alertmanager-0.26.0.linux-amd64.tar.gz  -C /app/tools/

1.3 创建符号链接

cd /app/tools/ && ln -svf alertmanager-0.26.0.linux-amd64 alertmanager

1.4 修改 alermanager 的配置文件

vim alertmanager.ymlglobal:resolve_timeout: 5mroute:group_by: ['alertname']group_wait: 5sgroup_interval: 5srepeat_interval: 2mreceiver: 'web.hook'
receivers:- name: 'web.hook'webhook_configs:# prometheus-webhook-dingtalk的地址#这里只需要修改IP地址及端口号即可#也可以第一次启动webhook-dingtalk的时候胡hi有提示这个地址(需要直接使用webhook命令执行)- url: 'http://localhost:8060/dingtalk/webhook1/send'send_resolved: true
inhibit_rules:- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['alertname', 'dev', 'instance']

1.5 启动alermanager

vim /usr/lib/systemd/system/alertmanager.service[Unit]
Description=The prometheus webhook dingtalk
After=network.target[Service]
WorkingDirectory=/app/tools/alertmanager-0.26.0.linux-amd64/
ExecStart=/app/tools/alertmanager-0.26.0.linux-amd64/alertmanager \
--config.file=/app/tools/alertmanager-0.26.0.linux-amd64/alertmanager.yml [Install]
WantedBy=multi-user.targetsystemctl daemon-reload
systemctl enable --now alertmanager.service

1.6 登录WebUI

http://192.168.99.181:9093/

有页面则部署完成

2. 部署 prometheus-webhook-dingtalk

2.1 下载 prometheus-webhook-dingtalk 软件包

wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.1.0/prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz

2.2 解压软件包

tar xf prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz -C /app/tools

2.3 编写配置文件

cat config.example.yml ## Targets, previously was known as "profiles"
#指定告警模板配置文件
templates:# - /root/prometheus-webhook-dingtalk-2.1.0.linux-amd64/templates/default.tmpl- /app/tools/prometheus-webhook-dingtalk-2.1.0.linux-amd64/templates/test.tmpl
targets:webhook1:#机器人的地址url: https://oapi.dingtalk.com/robot/send?access_token=1859e97456bdcb436f87f8e27147cfe07557901bdc4691c1836e30640f33c60b# secret for signature#机器人的认证标签secret: SEC13a35ec382cbce1b46f4275ce640aedce28610b8026ceecd50ef59eb74002f8dmessage:## 指定了消息的标题,使用模板 `ding.link.title` 来生成。title: '{{ template "ding.link.title" . }}'# 指定了消息的正文内容,使用模板 `ding.link.content` 来生成。text: '{{ template "ding.link.content" . }}'

2.4 编写告警模板

cat templates/test.tmpl {{ define "__subject" }}
[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}]
{{ end }}{{ define "__alert_list" }}{{ range . }}
---{{ if .Labels.owner }}@{{ .Labels.owner }}{{ end }}
---**告警名称**: {{ .Labels.alertname }}**告警主机**: {{ .Labels.instance }} **告警级别**: {{ .Labels.severity }} #description 这里引用的是ruels文件中的字段**告警描述**: {{ index .Annotations "description" }} #时间不要动**告警时间**: {{ dateInZone "2006.01.02 15:04:05" (.StartsAt) "Asia/Shanghai" }}#可填写查看详情的网址**查看详情**: http://192.168.99.181:9093
{{ end }}{{ end }}{{ define "__resolved_list" }}{{ range . }}
---**告警名称**: {{ .Labels.alertname }}**告警主机**: {{ .Labels.instance }}**告警级别**: {{ .Labels.severity }}**告警描述**: {{ index .Annotations "description" }}**告警时间**: {{ dateInZone "2006.01.02 15:04:05" (.StartsAt) "Asia/Shanghai" }}**恢复时间**: {{ dateInZone "2006.01.02 15:04:05" (.EndsAt) "Asia/Shanghai" }}
{{ end }}{{ end }}{{ define "default.title" }}
{{ template "__subject" . }}
{{ end }}{{ define "default.content" }}
{{ if gt (len .Alerts.Firing) 0 }}
**<font color="#FF0000">======侦测到{{ .Alerts.Firing | len  }}个告警======</font>**{{ template "__alert_list" .Alerts.Firing }}
---{{ end }}{{ if gt (len .Alerts.Resolved) 0 }}
**<font color="green">======恢复{{ .Alerts.Resolved | len  }}个故障======</font>**
{{ template "__resolved_list" .Alerts.Resolved }}
{{ end }}
{{ end }}{{ define "ding.link.title" }}{{ template "default.title" . }}{{ end }}
{{ define "ding.link.content" }}{{ template "default.content" . }}{{ end }}
{{ template "default.title" . }}
{{ template "default.content" . }}

2.5 启动webhook-dingtalk

cat /usr/lib/systemd/system/webhook-dingtalk.service[Unit]
Description=The prometheus webhook dingtalk
After=network.target[Service]
WorkingDirectory=/app/tools/prometheus-webhook-dingtalk-2.1.0.linux-amd64/
ExecStart=/app/tools/prometheus-webhook-dingtalk-2.1.0.linux-amd64/prometheus-webhook-dingtalk \
--config.file=config.example.yml \
--web.enable-lifecycle \
--web.enable-ui[Install]
WantedBy=multi-user.targetsystemctl daemon-reload
systemctl enabled --now webhook-dingtalk.service

3. Promtheus

3.1 配置rules规则文件

[root@prometheus-server31 /app/tools/prometheus]# cat rules/test.yaml 
# 相关的规则设置定义在一个group下。在每一个group中我们可以定义多个告警规则(rule)
groups:# 组名,报警规则组名称
- name: 内存告警rules:- alert: 内存使用率超过80%告警# expr:基于PromQL表达式告警触发条件,用于计算是否有时间序列满足该条件。#expr: floor(100 * (1 - (node_memory_MemFree_bytes + node_memory_Cached_bytes + node_memory_Buffers_bytes) / node_memory_MemTotal_bytes)) > 80expr: floor(100 * (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes))) > 80# for:评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警。在等待期间新产生告警的状态为pending。# for语句会使 Prometheus 服务等待指定的时间, 然后执行查询表达式。(for 表示告警持续的时长,若持续时长小于该时间就不发给alertmanager了,大于该时间再发。for的值不要小于prometheus中的scrape_interval,例如scrape_interval为30s,for为15s,如果触发告警规则,则再经过for时长后也一定会告警,这是因为最新的度量指标还没有拉取,在15s时仍会用原来值进行计算。另外,要注意的是只有在第一次触发告警时才会等待(for)时长。)for: 1m# labels:自定义标签,允许用户指定要附加到告警上的一组附加标签。labels:# severity: 指定告警级别,有三种等级,分别为:警告、严重、紧急,严重等级依次递增。severity: '<font color="#0000FF">警告</font>'# annotations: 附加信息,比如用于描述告警详细信息的文字等,annotations的内容在告警产生时会一同作为参数发送到Alertmanager。annotations:servername: "{{ $labels.server_name }}"server_ip: "{{ $labels.server_ip }}"value: "{{ $value }}"description: "**{{ $labels.server_name }}**内存使用率持续1分钟超过**80%**, 请及时处理! 当前值**{{ $value }}%**。"- alert: 内存使用率超过90%告警expr: floor(100 * (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes))) > 90for: 1mlabels:severity: '<font color="#FFA500">严重</font>'annotations:servername: "{{ $labels.server_name }}"server_ip: "{{ $labels.server_ip }}"value: "{{ $value }}"description: "**{{ $labels.server_name }}**内存使用率持续1分钟超过**90%**, 请马上处理! 当前值**{{ $value }}%**。"- name: CPU告警rules:- alert: CPU使用率超过80%告警expr: floor(100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)) > 80for: 1mlabels:severity: '<font color="#0000FF">警告</font>'annotations:servername: "{{ $labels.server_name }}"server_ip: "{{ $labels.server_ip }}"value: "{{ $value }}"description: "**{{ $labels.server_name }}**CPU使用率持续1分钟超过**80%**, 请及时处理! 当前值**{{ $value }}%**。"- alert: CPU使用率超过90%告警expr: floor(100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)) > 90for: 1mlabels:severity: '<font color="#FFA500">严重</font>'annotations:servername: "{{ $labels.server_name }}"server_ip: "{{ $labels.server_ip }}"value: "{{ $value }}"description: "**{{ $labels.server_name }}**CPU使用率持续1分钟超过**90%**, 请马上处理! 当前值**{{ $value }}%**。"- name: 磁盘告警rules:- alert: 磁盘 **/** 目录使用率超过90%告警expr: floor(100 * ((node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_avail_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"})) >90for: 30mlabels:severity: '<font color="#0000FF">警告</font>'annotations:servername: "{{ $labels.server_name }}"server_ip: "{{ $labels.server_ip }}"value: "{{ $value }}"description: "**{{ $labels.server_name }}**磁盘 **/** 目录使用率已经超过阈值**90%**, 请及时处理! 当前值**{{ $value }}%**。"- alert: 磁盘 **/home** 目录使用率超过90%告警expr: floor(100 * ((node_filesystem_size_bytes{mountpoint="/home"} - node_filesystem_avail_bytes{mountpoint="/home"}) / node_filesystem_size_bytes{mountpoint="/home"})) >90for: 30mlabels:severity: '<font color="#0000FF">警告</font>'annotations:servername: "{{ $labels.server_name }}"server_ip: "{{ $labels.server_ip }}"value: "{{ $value }}"description: "**{{ $labels.server_name }}**磁盘 **/home** 目录使用率已经超过阈值**90%**, 请及时处理! 当前值**{{ $value }}%**。"- alert: 磁盘 **/data** 目录使用率超过90%告警expr: floor(100 * ((node_filesystem_size_bytes{mountpoint="/data"} - node_filesystem_avail_bytes{mountpoint="/data"}) / node_filesystem_size_bytes{mountpoint="/data"})) >90for: 30mlabels:severity: '<font color="#0000FF">警告</font>'annotations:servername: "{{ $labels.server_name }}"server_ip: "{{ $labels.server_ip }}"value: "{{ $value }}"description: "**{{ $labels.server_name }}**磁盘 **/data** 目录使用率已经超过阈值**90%**, 请及时处理! 当前值**{{ $value }}%**。"- alert: 磁盘 **/data1** 目录使用率超过90%告警expr: floor(100 * ((node_filesystem_size_bytes{mountpoint="/data1"} - node_filesystem_avail_bytes{mountpoint="/data1"}) / node_filesystem_size_bytes{mountpoint="/data1"})) >90for: 30mlabels:severity: '<font color="#0000FF">警告</font>'annotations:servername: "{{ $labels.server_name }}"server_ip: "{{ $labels.server_ip }}"value: "{{ $value }}"description: "**{{ $labels.server_name }}**磁盘 **/data1** 目录使用率已经超过阈值**90%**, 请及时处理! 当前值**{{ $value }}%**。"- alert: 磁盘 **/postgres** 目录使用率超过90%告警expr: floor(100 * ((node_filesystem_size_bytes{mountpoint="/postgres"} - node_filesystem_avail_bytes{mountpoint="/postgres"}) / node_filesystem_size_bytes{mountpoint="/postgres"})) >90for: 30mlabels:severity: '<font color="#0000FF">警告</font>'annotations:servername: "{{ $labels.server_name }}"server_ip: "{{ $labels.server_ip }}"value: "{{ $value }}"description: "**{{ $labels.server_name }}**磁盘 **/postgres** 目录使用率已经超过阈值**90%**, 请及时处理! 当前值**{{ $value }}%**。"- name: 离线告警rules:- alert: 服务器离线告警expr: up{instance =~ ".*:(9100|9200)"} == 0for: 30slabels:severity: '<font color="#FF0000">紧急</font>'annotations:servername: "{{ $labels.server_name }}"server_ip: "{{ $labels.server_ip }}"value: "{{ $value }}"description: "**{{ $labels.server_name }}**离线了,可能出现宕机情况, 请立即检查处理! "

3.2 配置 prometheus.yml 文件

vim /app/tools/prometheus/prometheus.yml
....
#指定alermanager
alerting:alertmanagers:- static_configs:- targets:- 192.168.99.181:9093
.....
rule_files:#指定 rules 配置文件- "/app/tools/prometheus/rules/test.yaml"
.....

3.3 重启prometheus

systemctl reload prometheus.server

4. 测试

根据自己定义的规则关闭一个监控的节点,查看钉钉是否有收到消息

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

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

相关文章

医日健集团技术力量体现测试的背后

医日健集团覆盖式更新 科技日新月异的时代&#xff0c;医日健集团始终走在行业的前列。近日&#xff0c;医日健集团外勤技术人员全面对市场点位投放的数智药房进行了新系统升级和机器测试&#xff0c;这是医日健对于科技创新的最新尝试。 以客户体验为核心优化新体验 医日健集团…

Js 前置,后置补零的原生方法与补字符串 padStart及padEnd

在工作中&#xff0c;遇到了需要将不满八位的一个字符串进行后补0的操作&#xff0c;所以就在网上学习了关于js原生补充字符串的方法&#xff0c;然后用这篇博客记录下来。 目录 前置补充字符串 String.prototype.padStart() 后置补充字符串String.prototype.padEnd() 前置补…

【超音速 专利 CN117710683A】基于分类模型的轻量级工业图像关键点检测方法

申请号CN202311601629.7公开号&#xff08;公开&#xff09;CN117710683A申请日2023.11.27申请人&#xff08;公开&#xff09;超音速人工智能科技股份有限公司发明人&#xff08;公开&#xff09;张俊峰(总); 杨培文(总); 沈俊羽; 张小村 技术领域 本发明涉及图像关键点检测…

数据库MySQL下载安装

MySQL下载安装地址如下&#xff1a; MySQL :: Download MySQL Community Server 1、下载界面 2、点击下载 3、解压记住目录 4、配置my.ini文件 未完..

Vue.js学习笔记(五)抽奖组件封装——转盘抽奖

基于VUE2转盘组件的开发 文章目录 基于VUE2转盘组件的开发前言一、开发步骤1.组件布局2.布局样式3.数据准备 二、最后效果总结 前言 因为之前的转盘功能是图片做的&#xff0c;每次活动更新都要重做UI和前端&#xff0c;为了解决这一问题进行动态配置转盘组件开发&#xff0c;…

STM32智能仓储管理系统教程

目录 引言环境准备晶智能仓储管理系统基础代码实现&#xff1a;实现智能仓储管理系统 4.1 数据采集模块 4.2 数据处理与决策模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;仓储管理与优化问题解决方案与优化收尾与总结 1. 引言 智能仓储管理系统…

7 月12日学习打卡--栈和队列的相互转换

hello大家好呀&#xff0c;本博客目的在于记录暑假学习打卡&#xff0c;后续会整理成一个专栏&#xff0c;主要打算在暑假学习完数据结构&#xff0c;因此会发一些相关的数据结构实现的博客和一些刷的题&#xff0c;个人学习使用&#xff0c;也希望大家多多支持&#xff0c;有不…

什么是STM32?嵌入式和STM32简单介绍

1、嵌入式和STM32 1.1.什么是嵌入式 除了桌面PC之外&#xff0c;所有的控制类设备都是嵌入式 嵌入式系统的定义&#xff1a;“用于控制、监视或者辅助操作机器和设备的装置”。 嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板&#xff0c;是一种专用的计算机系统。…

初阶数据结构速成

本篇文章算是对初阶数据结构的总结&#xff0c;内容较多&#xff0c;请耐心观看 基础概念部分 顺序表 线性表&#xff08; linear list &#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中⼴泛使 ⽤的数据结构&#xff0c;常⻅的线性表&#xff1a;…

机器学习——关于极大似然估计法的一些个人思考(通俗易懂极简版)

最近在回顾机器学习的一些相关理论知识&#xff0c;回顾到极大似然法时&#xff0c;对于极大似然法中的一些公式有些迷糊了&#xff0c;所以本文主要想记录并分享一下个人关于极大似然估计法的一些思考&#xff0c;如果有误&#xff0c;请见谅&#xff0c;欢迎一起前来探讨。当…

单元测试实施最佳方案(背景、实施、覆盖率统计)

1. 什么是单元测试&#xff1f; 对于很多开发人员来说&#xff0c;单元测试一定不陌生 单元测试是白盒测试的一种形式&#xff0c;它的目标是测试软件的最小单元——函数、方法或类。单元测试的主要目的是验证代码的正确性&#xff0c;以确保每个单元按照预期执行。单元测试通…

合肥高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

合肥高校大学智能制造实验室近日迎来了一项重要时刻&#xff0c;数字孪生可视化系统平台建设项目顺利通过了验收。这一项目的成功实施&#xff0c;不仅标志着合肥高校在智能制造领域取得新的突破&#xff0c;为我国智能制造技术的发展注入新活力。 合肥高校智能制造实验室作为…

T972 切换至pdm 声音输入的方法

1.在hardware/amlogic/audio/audio_hal/audio_hw.c下&#xff0c;直接切换 在 static unsigned int select_port_by_device(struct aml_audio_device *adev) 中先强制切换为pdm 2.在device mk 配置文件中 #add fof fix the mic bug by jason 20230621 PRODUCT_PROPERTY_OVE…

MySQL 数据库基础概念

一、什么是数据库&#xff1f; 数据库&#xff08;Database&#xff09;是按照数据结构来组织、存储和管理数据的仓库。 每个数据库都有一个或多个不同的 API 用于创建&#xff0c;访问&#xff0c;管理&#xff0c;搜索和复制所保存的数据。 我们也可以将数据存储在文件中&…

MSPM0G3507(三十六)——超声波PID控制小车固定距离

效果图&#xff1a; 波形图软件是VOFA&#xff0c;B站有教程 &#xff0c;虽然有缺点但是非常简单。 视频效果&#xff1a; PID控制距离 之前发过只有超声波测距的代码&#xff0c;MSPM0G3507&#xff08;三十二&#xff09;——超声波模块移植代码-CSDN博客 SYSCFG配置&#…

用友NC Cloud blobRefClassSearch FastJson反序列化RCE漏洞复现

0x01 产品简介 用友 NC Cloud 是一种商业级的企业资源规划云平台,为企业提供全面的管理解决方案,包括财务管理、采购管理、销售管理、人力资源管理等功能,实现企业的数字化转型和业务流程优化。 0x02 漏洞概述 用友 NC Cloud blobRefClassSearch 接口处存在FastJson反序列…

开源PHP论坛HadSky本地部署与配置公网地址实现远程访问

文章目录 前言1. 网站搭建1.1 网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3 Cpolar稳定隧道&#xff08;本地设置&#xff09;2.4 公网访问测试 总结 前言 今天和大家分享…

idea启动ssm项目详细教程

前言 今天碰到一个ssm的上古项目&#xff0c;项目没有使用内置的tomcat作为服务器容器&#xff0c;这个时候就需要自己单独设置tomcat容器。这让我想起了我刚入行时被外置tomcat配置支配的恐惧。现在我打算记录一下配置的过程&#xff0c;希望对后面的小伙伴有所帮助吧。 要求…

SpringBoot3.3.0升级方案

本文介绍了由SpringBoot2升级到SpringBoot3.3.0升级方案&#xff0c;新版本的升级可以解决旧版本存在的部分漏洞问题。 一、jdk17下载安装 1、下载 官网下载地址 Java Archive Downloads - Java SE 17 Jdk17下载后&#xff0c;可不设置系统变量java_home&#xff0c;仅在id…

开发技术-Java BigDecimal 精度丢失问题

文章目录 1. 背景2. 方法3. 总结 1. 背景 昨天和小伙伴排查一个问题时&#xff0c;发现一个 BigDecimal 精度丢失的问题&#xff0c;即 double a 1.1;BigDecimal ba new BigDecimal(a).subtract(new BigDecimal(0.1));System.out.println(ba);输出&#xff1a; 1.000000000…