prometheus + alterManager + 飞书通知,实现服务宕机监控告警;实测可用

news/2024/3/29 20:43:34/文章来源:https://blog.csdn.net/qq_43332570/article/details/129199368

架构设计图

在这里插入图片描述
最终效果图

在这里插入图片描述
在这里插入图片描述

项目准备

xml依赖

        <!-- 监控相关 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId><scope>runtime</scope></dependency>

yml配置

management:endpoints:web:exposure:# 暴露相关项目信息# include: "*"  # 暴露全部端点include: "prometheus" # 只暴露/actuator/prometheusendpoint:prometheus:enabled: truehealth:show-details: alwaysmetrics:export:prometheus:enabled: true

附:springBoot相关endpoint参数

HTTP方法路径描述默认是否启用
GET/health返回聚合的应用健康状态,可能的话,还会包含外部依赖应用的健康状态
GET/heapdump下载堆dump文件
GET/info返回有关开发人员定义的关于该应用的信息
GET/loggers生成应用中源码的包列表,其中会包含配置的以及生效的日志级别
GET/metrics返回所有jvm指标分类的列表
GET/auditevents生成所有已经触发的审计的报告
GET/beans描述Spring应用程序上下文中的所有bean
GET/conditions生成自动配置条件通过或者失败的报告,会指导应用上下文中bean的创建
GET/configprops描述所有配置属性以及当前值
GET, POST, DELETE/env生成Spring应用可用的所有属性源及其属性的报告
GET/env/{toMatch}描述某个环境属性的值
GET/httptrace生成最近100个请求的跟踪结果
GET, POST/loggers/{name}返回指定logger配置的和生效的日志级别,生效的日志级别可以使用POST请求修改
GET/mappings生成所有HTTP映射及其对应处理器方法的报告
GET/metrics/{name}返回给定指标的多纬度值集
GET/scheduledtasks列出所有的调度任务
GET/threaddump返回所有应用线程的报告

其他

    /*** 为普罗米修斯添加应用名称 tag,在界面上好区分** @param applicationName   应用名称* @return org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer*/@Beanpublic MeterRegistryCustomizer<MeterRegistry> meterRegistryCustomizer(@Value("${spring.application.name}") String applicationName) {return (registry -> registry.config().commonTags("application", applicationName));}

验证

验证项目是否准备完毕,项目启动后,访问:http://ip:port/actuator/prometheus

在这里插入图片描述

docker安装组件

飞书配置

获取飞书token

  1. 创建一个飞书群聊,在 设置 中选择群机器人 --> 选择 添加机器人。

在这里插入图片描述

  1. 选择自定义机器人

在这里插入图片描述

  1. 选择添加后,url后面就是 飞书的oken,在prometheus的配置中需要用到。
  2. 在安全设置中勾选 自定义关键词,在发送的消息中存在 配置的关键词才能够正常发送。

在这里插入图片描述

安装发送消息到群的组件

我这里是在 docker hub 上找的一个发送飞书消息的镜像,里面跑的是一个 SpringBoot 项目,如果有找到更好的,可以进行更换。

docker run -d --name prom-alert-feishu -p 9094:8080 javafamily/prometheus-webhook-feishu:2.3.2-SNAPSHOT

prometheus安装

创建目录: /xxx/xxx/prometheus/并进入,创建prometheus.yml配置文件,内容如下:

global:scrape_interval:     30s # 全局抓取数据时间,默认 60s,可在job中覆盖evaluation_interval: 30s # 全局告警计算周期,默认 60s,可在job中覆盖# alert Manager配置
alerting:alertmanagers:- static_configs:- targets:- 192.168.1.222:9093# rule规则配置
rule_files:- 'rules/*.yml'# 监控job配置
scrape_configs:# prometheus自带默认 job,不可删除- job_name: 'prometheus'metrics_path: '/metrics'static_configs:- targets: ['192.168.1.222:9090'] # 抓取数据url,确保在容器中能够访问到,使用docker启动不能写localhost# 服务实例 job,可配置多个- job_name: 'springboot_wcong_test'scrape_interval: 15s # 每间隔15s向指定url进行抓取数据,覆盖global中的配置metrics_path: '/actuator/prometheus' # 应用程序暴露的端点static_configs:- targets: ['192.168.1.222:9010'] labels:serviceId: 'springboot_wcong_test_one'serviceName: '测试boot应用1'feishuToken: 'xxxx'- job_name: 'springboot_wcong_test_two'scrape_interval: 15smetrics_path: '/actuator/prometheus'static_configs:- targets: ['192.168.1.222:9020']labels:serviceId: 'springboot_wcong_test_two'serviceName: '测试boot应用2'feishuToken: 'xxxx'

/xxx/xxx/prometheus/,创建 rules文件夹,进入 rules 文件夹,创建dufault_rule.yml文件,内容如下:


# 每个group可以定义多个告警规则(rule)
groups:# 组名, 报警规则组名称,可配置多个
- name: 实例存活报警namerules:- alert: 实例存活报警alert# PromQL表达式,相关参数可在prometheus界面中查看expr: up == 0# 报警持续时长 达到 这个时间,才会触发报警, for >= prometheus中的scrape_interval值(每次抓取数据的时间,防止最新的数据还没抓取)for: 30s# 自定义标签,允许用户指定要附加到告警上的一组附加标签。labels:# 指定告警级别。:warning,critical,emergency,严重等级依次递增。severity: emergency# 定义消息 内容 和 格式,相关参数根据具体的 webhook 而定。annotations:# 推送feishu机器人token,不同的组,可推送到不同群token: "{{ $labels.feishuToken }}"title: "服务宕机报警"serviceName: "{{ $labels.serviceName }}"instance: "{{ $labels.instance }}"# 按钮标题btn: "点击查看详情 :玫瑰:"# 点击按钮跳转的链接link: 'http://192.168.1.222:9090/targets'template: '服务 **${serviceName}**(${instance}) 断联, 请及时处理!'description: '服务宕机'

/xxx/xxx/prometheus/目录,创建docker容器文件:docker-compose.yml,内容如下:


# 启动命令:docker-compose up -dversion: '3.7'
services:prometheus:image: prom/prometheus:latestcontainer_name: prometheus# 重启策略,失败后重启一次restart: on-failure:1ports:- "9090:9090"volumes:# 配置文件,挂载到本机目录- /xxx/xxx/prometheus/:/etc/prometheus/# 限制最大使用内存deploy:resources:limits:memory: 512M

进入docker-compose.yml所在目录,启动:docker-compose up -d(-d 后台启动)

验证

访问地址:ip:9090

在这里插入图片描述

AlterManager安装

创建目录: /xxx/xxx/alertManager/并进入,创建altermanager.yml配置文件,内容如下:

# 相关路由规则
route:group_by: [...] # 分组, ... 表示不分组group_wait: 60s # 同一组 告警 需要等待多少s才能发出group_interval: 5m # 同一组的多批次告警间隔多少秒后,才能发出repeat_interval: 1h  # 重复告警要等待多久后才能再次发出去,目的是为了避免重复的消息发送多次receiver: 'web.hook' # receiver名称,对应 receivers.name# 配置报警方式
receivers:- name: 'web.hook'webhook_configs:# 通知url- url: 'http://192.168.1.222:9094/alert/card'# 抑制规则,减少垃圾告警的产生,比如主机挂了,主机上的服务,数据库,中间件等一系列告警 相对来说没有意义,可以通过抑制项这个功能,让Prometheus只发出主机挂了的告警。
# 暂时不用
# inhibit_rules:
#   - source_match:
#       # 匹配的严重级别,向上兼容,warning,critical,emergency,严重等级依次递增。
#       severity: 'critical'
#     target_match:
#       severity: 'warning'
#     equal: ['alertname', 'dev', 'instance'] # 确保这个配置下的标签内容相同才会抑制,也就是说警报中必须有这三个标签值才会被抑制。

进入目录:/xxx/xxx/alterManager/并进入,创建docker容器文件:docker-compose.yml,内容如下:


# 启动命令:docker-compose up -dversion: '3.7'
services:prometheus:image: prom/alertmanager:latestcontainer_name: alertmanager# 重启策略,失败重启一次restart: on-failure:1ports:- "9093:9093"volumes:- /xxx/xxx/alertManager/:/etc/alertmanager/# 限制最大使用内存deploy:resources:limits:memory: 256M

进入docker-compose.yml所在目录,启动:docker-compose up -d(-d 后台启动)

grafana安装

创建目录:/xxx/xxx/grafana/并进入,创建docker容器文件:docker-compose.yml,内容如下:

# 启动命令:docker-compose up -d
version: '3.7'
services:prometheus:image: grafana/grafana:latestcontainer_name: grafana# 重启策略,失败重启一次restart: on-failure:1ports:- "3000:3000"# 不需要挂载容器卷,grafana只是一个数据展示平台# volumes:# - /xxx/xxx/grafana/:/etc/grafana/# 限制最大使用内存deploy:resources:limits:memory: 256M

进入当前目录,启动:docker-compose up -d(-d 后台启动)

验证

访问地址:ip:3030,默认账号密码都为admin

Grafana相关配置

jvm监控

  1. 配置数据源,点击Add data source,选择 prometheus。

在这里插入图片描述

  1. 配置名称url

在这里插入图片描述

  1. 点击:Save & test,添加数据源

在这里插入图片描述

  1. 导入官方提供的图像可视化插件,jvm的编号为:4701,加载后进行导入;其他仪表盘:https://grafana.com/grafana/dashboards/

在这里插入图片描述

  1. 选择刚才添加的数据源

在这里插入图片描述

  1. 一个仪表盘可以展示 多个jvm应用的信息,可以根据 应用名称标签名进行筛选,可以选择 查看的信息时间段刷新频率

在这里插入图片描述

  1. 后续查看

在这里插入图片描述

用户权限控制

用户-角色-组织

编辑界面

  • 数据源、图表按组织隔离。
  • 可以根据组织配置免密登录。

在这里插入图片描述

用户角色修改角色
在这里插入图片描述

每个图表的控制

  • 控制某个图表为只读,防止误操作。
  • 还可以根据角色区分操作权限。
  • 保存后,刷新页面才会生效。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

消息队列--Kafka

Kafka简介集群部署配置Kafka测试Kafka1.Kafka简介 数据缓冲队列。同时提高了可扩展性。具有峰值处理能力&#xff0c;使用消息队列能够使关键组件顶住突发的访问压力&#xff0c;而不会因为突发的超负荷的请求而完全崩溃。 Kafka是一个分布式、支持分区的&#xff08;partition…

JAVA 8 新特性 Lamdba表达式

Java8 新特性&#xff1a; 1、Lamdba表达式 2、函数式接口 3、方法引用和构造引用 4、Stream API 5、接口中的默认方法和静态方法 6、新时间日期API 7、Optional 8、其他特性 Java8 优势&#xff1a;速度快、代码更少&#xff08;增加了新的语法 Lambda 表达式&#xff09;、强…

Android 架构 MVC MVP MVVM,这一波你应该了然于心

MVC&#xff0c;MVP和MVVM是软件比较常用的三种软件架构&#xff0c;这三种架构的目的都是分离&#xff0c;避免将过多的逻辑全部堆积在一个类中。在Android中&#xff0c;Activity中既有UI的相关处理逻辑&#xff0c;又有数据获取逻辑&#xff0c;从而导致Activity逻辑复杂不单…

Wireshark抓包

Wireshark 1 抓包时间显示格式 2 界面显示列设置 3 protocol协议解析 4 过滤器 tcp.port&#xff1a;TCP端口tcp.dstport&#xff1a;TCP目的端口tcp.srcport&#xff1a;TCP源端口udp.port&#xff1a;UDP端口udp.dstport&#xff1a;UDP目的端口udp.srcport&#xff1a;UDP…

月薪过3W的软件测试工程师,都是怎么做到的?

对任何职业而言&#xff0c;薪资始终都会是众多追求的重要部分。前几年的软件测试行业还是一个风口&#xff0c;随着不断地转行人员以及毕业的大学生疯狂地涌入软件测试行业&#xff0c;目前软件测试行业“缺口”已经基本饱和。当然&#xff0c;我说的是最基础的功能测试的岗位…

良许也成为砖家啦~

大家好&#xff0c;我是良许。 没错&#xff0c;良许成为砖家啦&#xff0c;绝不是口嗨&#xff0c;有图有真相&#xff01; 有人会说&#xff0c;咦&#xff0c;这明明是严宇啊&#xff0c;跟你良许有啥关系&#xff1f; 额。。老读者应该知道良许的来历—— 鄙人真名严宇&a…

Python-datetime、time包常用功能汇总

目录基础知识时间格式有哪些&#xff1f;Python中的时间格式化时间戳datetimedatedatetimetimedeltatime常用获取今天凌晨字符串&#xff1f;将一个时间格式的字符串转为时间戳将一个时间戳转为指定格式的字符串全部代码参考基础知识 时间格式有哪些&#xff1f; 「格林威治标…

最新OpenMVG编译安装与逐命令运行增量式和全局式SfM教程

openmvg是一个轻便的可以逐步运行的SfM开源库&#xff0c;它同时实现了增量式和全局式两种算法。 说明文档地址&#xff1a;https://openmvg.readthedocs.io/en/latest/ github主页地址&#xff1a;https://github.com/openMVG/openMVG 1 编译安装 openmvg的安装比较简单&…

Windows 11 22H2 中文版、英文版 (x64、ARM64) 下载 (updated Feb 2023)

Windows 11, version 22H2&#xff0c;2023 年 2 月 更新 请访问原文链接&#xff1a;https://sysin.org/blog/windows-11/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;www.sysin.org 全新推出 Windows 11 全新 Windows 体验&#x…

论坛项目小程序和h5登录

项目中安装uview出现npm安装uview 直接报错&#xff1a;创建一个package.json配置文件在进行安装。cmd到项目。初始化一个package.json文件&#xff08;vue项目的配置文件&#xff09; npm init --yes 安装uview项目点击关注进入管页面&#xff0c;需要验证用户是否登录查用户是…

Linux学习(8)Linux文件与目录管理

以下内容转载自鸟哥的Linux私房菜 绝对路径与相对路径 绝对路径&#xff1a;路径的写法『一定由根目录 / 写起』&#xff0c;例如&#xff1a; /usr/share/doc 这个目录。相对路径&#xff1a;路径的写法『不是由 / 写起』&#xff0c;例如由 /usr/share/doc 要到 /usr/share…

Java实现在线沟通功能

文章目录1、介绍 和 特点2、整合SpringBoot2.1、导入依赖2.2、websocket 配置类2.3、消息处理类2.4、启动服务2.5、前端代码&#xff1a;张三2.6、前端代码&#xff1a;李四3、效果4、小结1、介绍 和 特点 t-io是基于JVM的网络编程框架&#xff0c;和netty属同类&#xff0c;所…

【LeetCode】剑指 Offer 14- I. 剪绳子 p96 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/jian-sheng-zi-lcof/ 1. 题目介绍&#xff08;14- I. 剪绳子&#xff09; 给你一根长度为 n 的绳子&#xff0c;请把绳子剪成整数长度的 m 段&#xff08;m、n都是整数&#xff0c;n>1并且m>1&#xff09;&#xff0c…

计算机网络你都懂了吗

文章目录一、计算机网络的定义简单定义通用定义二、计算机网络通信过程三、什么是网络协议&#xff08;Protocol&#xff09;四、网络协议组成及功能一、计算机网络的定义 简单定义 计算机网络是一些相互连接的、自治的计算机系统的集合。 通用定义 将处于不同位置并具有独…

MySQL简介、M有SQL的存储引擎、表、字段和数据

Java知识点总结&#xff1a;想看的可以从这里进入 目录2、MySQL特性介绍2.1、MySQL简介2.2、存储引擎2.3、表、字段、数据2、MySQL特性介绍 2.1、MySQL简介 MySQL 是一个关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;于2009年被 Oracle 公司收购。它是一种关…

Hive---排序

Hive语法之排序 文章目录Hive语法之排序全局排序&#xff08;Order By&#xff09;升序降序按照别名排序多个列排序每个 Reduce 内部排序&#xff08;Sort By&#xff09;设置 reduce 个数查看设置 reduce 个数分区排序&#xff08;Distribute By&#xff09;设置 reduce 个数簇…

仅花半年时间,他从外包月薪5K到阿里月薪15K,究竟经历了什么?

背景介绍&#xff1a;“渣渣”二本&#xff0c;95年Java程序员**外包类型&#xff1a;**传统外包公司**内容简介&#xff1a;**朋友从一个传统公司是如何修仙到阿里巴巴&#xff1f;分享一些他的真实经历&#xff0c;希望对你有帮助。**学习路线&#xff1a;**基础&#xff08;…

为什么HR眼中,Python是真正的简历加分项?

教育部在发布的关于《2023届高校毕业生预计1158万 校园招聘月启动》文中明确指出&#xff1a;“2023届高校毕业生预计1158万&#xff0c;同比增加82万人”。除开考研、考公的少数同学&#xff0c;几百万大军拼命往大企业投简历&#xff0c;求职竞争十分激烈。 来源&#xff1a…

优化长尾关键词有什么好处?在线长尾关键词挖掘

​想知道为什么要使用长尾关键词&#xff1f; 好吧&#xff0c;它们可以帮助你轻松找到合适的受众。 ​ 1.获得更高的转化率 长尾关键词对于搜索特定信息更有用。使用长尾关键词时通常会获得更高的转化率&#xff0c;因为内容与受众的需求更相关。 举个例子&#xff1a;你正…

数影周报:动视暴雪疑似数据泄露,数据出境安全评估申报最新进展

本周看点&#xff1a;动视暴雪疑似员工敏感信息及游戏数据泄露&#xff1b;谷歌云计算部门&#xff1a;两名员工合用一个工位&#xff1b;数据出境安全评估申报最新进展&#xff1b;TikTok Shop东南亚商城在泰国和菲律宾公布&#xff1b;智己汽车获九大金融机构50亿元贷款签约.…