SpringBoot3 整合Prometheus + Grafana

通过Prometheus + Grafana对线上应用进行观测、监控、预警…

  • 健康状况【组件状态、存活状态】Health
  • 运行指标【cpu、内存、垃圾回收、吞吐量、响应成功率…】Metrics

1. SpringBoot Actuator

1. 基本使用

1. 场景引入

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2. 暴露指标

management:
  endpoints:
    enabled-by-default: true #暴露所有端点信息
    web:
      exposure:
        include: '*'  #以web方式暴露

3. 访问数据

  • 访问 http://localhost:8080/actuator;展示出所有可以用的监控端点
  • http://localhost:8080/actuator/beans
  • http://localhost:8080/actuator/configprops
  • http://localhost:8080/actuator/metrics
  • http://localhost:8080/actuator/metrics/jvm.gc.pause
  • http://localhost:8080/actuator/endpointName/detailPath

2. Endpoint

1. 常用端点

ID描述
auditevents暴露当前应用程序的审核事件信息。需要一个AuditEventRepository组件
beans显示应用程序中所有Spring Bean的完整列表
caches暴露可用的缓存
conditions显示自动配置的所有条件信息,包括匹配或不匹配的原因
configprops显示所有@ConfigurationProperties
env暴露Spring的属性ConfigurableEnvironment
flyway显示已应用的所有Flyway数据库迁移。需要一个或多个Flyway组件。
health显示应用程序运行状况信息
httptrace显示HTTP跟踪信息(默认情况下,最近100个HTTP请求-响应)。需要一个HttpTraceRepository组件
info显示应用程序信息
integrationgraph显示Spring integrationgraph 。需要依赖spring-integration-core
loggers显示和修改应用程序中日志的配置
liquibase显示已应用的所有Liquibase数据库迁移。需要一个或多个Liquibase组件
metrics显示当前应用程序的“指标”信息
mappings显示所有@RequestMapping路径列表
scheduledtasks显示应用程序中的计划任务
sessions允许从Spring Session支持的会话存储中检索和删除用户会话。需要使用Spring Session的基于Servlet的Web应用程序
shutdown使应用程序正常关闭。默认禁用
startup显示由ApplicationStartup收集的启动步骤数据。需要使用SpringApplication进行配置BufferingApplicationStartup
threaddump执行线程转储
heapdump返回hprof堆转储文件
jolokia通过HTTP暴露JMX bean(需要引入Jolokia,不适用于WebFlux)。需要引入依赖jolokia-core
logfile返回日志文件的内容(如果已设置logging.file.namelogging.file.path属性)。支持使用HTTP Range标头来检索部分日志文件的内容
prometheus以Prometheus服务器可以抓取的格式公开指标。需要依赖micrometer-registry-prometheus

2. 定制端点

  • 健康监控:返回存活、死亡
  • 指标监控:次数、率
1. HealthEndpoint
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;

@Component
public class MyHealthIndicator implements HealthIndicator {

    @Override
    public Health health() {
        int errorCode = check(); // perform some specific health check
        if (errorCode != 0) {
            return Health.down().withDetail("Error Code", errorCode).build();
        }
        return Health.up().build();
    }

}

构建Health
Health build = Health.down()
                .withDetail("msg", "error service")
                .withDetail("code", "500")
                .withException(new RuntimeException())
                .build();
management:
    health:
      enabled: true
      show-details: always #总是显示详细信息。可显示每个模块的状态信息
@Component
public class MyComHealthIndicator extends AbstractHealthIndicator {

    /**
     * 真实的检查方法
     * @param builder
     * @throws Exception
     */
    @Override
    protected void doHealthCheck(Health.Builder builder) throws Exception {
        //mongodb。  获取连接进行测试
        Map<String,Object> map = new HashMap<>();
        // 检查完成
        if(1 == 2){
//            builder.up(); //健康
            builder.status(Status.UP);
            map.put("count",1);
            map.put("ms",100);
        }else {
//            builder.down();
            builder.status(Status.OUT_OF_SERVICE);
            map.put("err","连接超时");
            map.put("ms",3000);
        }


        builder.withDetail("code",100)
                .withDetails(map);

    }
}
2. MetricsEndpoint
class MyService{
    Counter counter;
    //默认一个构造时,参数会从ioc中拿
    public MyService(MeterRegistry meterRegistry){
         counter = meterRegistry.counter("myservice.method.running.counter");
    }

    public void hello() {
        counter.increment();
    }
}

2. 监控落地

基于 Prometheus + Grafana

1. 安装 Prometheus + Grafana

安装 Prometheus + Grafana

2. 导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
    <version>1.10.6</version>
</dependency>
management:
  endpoints:
    web:
      exposure: #暴露所有监控的端点
        include: '*'

访问: http://localhost:8001/actuator/prometheus 验证,返回 prometheus 格式的所有指标

在这里插入图片描述

部署Java应用到服务器

确保可以访问到部署好的服务,http://192.168.254.129:8080/actuator/prometheus

在这里插入图片描述

http://192.168.254.129:8080/actuator

在这里插入图片描述

3. 配置 Prometheus 拉取数据

## 修改 prometheus.yml 配置文件
scrape_configs:
  - job_name: 'spring-boot-actuator-exporter'
    metrics_path: '/actuator/prometheus' #指定抓取的路径
    static_configs:
      - targets: ['192.168.254.129:8080']
        labels:
          nodename: 'app-demo'

配置完记得重启容器

在这里插入图片描述

4. 配置 Grafana 监控面板

  • 添加数据源(Prometheus)

在这里插入图片描述

  • 添加面板。可去 grafana dashboard 市场找一个自己喜欢的面板,也可以自己开发面板
    • 市场直接搜索springboot,注意看面板支持的数据源,复制面板ID

在这里插入图片描述

填入面板id,选择刚刚创建好的数据源

在这里插入图片描述

5. 效果

等待应用运行一会后,就会显示出对应的监控数据

在这里插入图片描述

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

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

相关文章

【LeetCode】剑指 Offer Ⅱ 第2章:数组(8道题) -- Java Version

题库链接&#xff1a;https://leetcode.cn/problem-list/e8X3pBZi/ 题目解决方案剑指 Offer II 006. 排序数组中两个数字之和双指针&#xff08;异向&#xff09; ⭐剑指 Offer II 007. 数组中和为 0 的三个数排序 双指针&#xff08;异向&#xff09; ⭐剑指 Offer II 008. 和…

常见历史漏洞之Thinkphp

常见历史漏洞之Thinkphp 一、介绍二、Thinkphp历史漏洞三、Thinkphp特征发现四、批量漏洞检测五、漏洞总结六、5.0.23版本案例演示 一、介绍 Thinkphp是一种开源框架。是一个由国人开发的支持windows/Unix/Linux等服务器环境的轻量级PHP开发框架。很多cms就是基于thinkphp二次开…

java程序打包成exe在无java环境执行

最近写了个小工具&#xff0c;但是java写的&#xff0c;给朋友用的时候不能直接用&#xff0c;因此学习了一下java打包成exe。 众所周知&#xff0c;java需要jvm环境&#xff0c;所以打包的时候需要把稍微轻一点的jre打包进去。接下来是详细步骤。 java程序打包成jar 这个在…

vue2-vue实例挂载的过程

1、思考 new Vue()这个过程中究竟做了什么&#xff1f;过程中是如何完成数据的绑定&#xff0c;又是如何将数据渲染到视图的等等。 2、分析 首先找到vue的构造函数。 源码位置&#xff1a;/src/core/instance/index.js options是用户传递过来的配置项&#xff0c;如data、meth…

项目实战 — 消息队列(4){消息持久化}

目录 一、消息存储格式设计 &#x1f345; 1、queue_data.txt&#xff1a;保存消息的内容 &#x1f345; 2、queue_stat.txt&#xff1a;保存消息的统计信息 二、消息序列化 三、自定义异常类 四、创建MessageFileManger类 &#x1f345; 1、约定消息文件所在的目录和文件名…

高级web前端开发工程师岗位的具体内容概述(合集)

高级web前端开发工程师岗位的具体内容概述1 职责&#xff1a; 1、负责前端页面开发和维护&#xff0c;并根据需求优化产品性能、用户体验、交互效果及各种主流浏览器以及各类型移动客户端的兼容适配工作; 2、配合产品经理和UI设计师&#xff0c;通过各种前端技术手段&#xf…

Liunx环境下git的详细使用(gitee版)

Liunx环境下git的详细使用&#xff08;gitee版&#xff09; 1.git是什么2.git操作2.1在gitee创建一个仓库2.2.gitignore2.3.git 3.git三板斧3.1add3.2 commit3.3push 4.git其他命令4.1查看当前仓库状态4.2查看提交日志4.3修改git里面文件名称4.4删除文件4.5修改远端仓库内容 1.…

Git报错合集

本文记录了笔者在使用 github 过程中遇到的问题&#xff0c;仅供个人使用。 目录 Could not resolve hostlocal changes to the following files would be overwritten by mergeTLS connection was non-properly terminatedUpdates were rejected because the remote contains …

校园跑腿小程序运营攻略

作为一名校园跑腿小程序的运营者&#xff0c;你可能会面临诸如用户获取、平台推广、服务质量保证等挑战。在本篇推文中&#xff0c;我将为你提供一些关键的运营策略&#xff0c;帮助你成功运营校园跑腿小程序。 1. 用户获取和留存 用户是校园跑腿小程序成功的关键。以下是一些…

CADintosh X for mac CAD绘图软件2D CAD 程序 兼容 M1

CADintosh X for Mac是一个功能强大的2D CAD绘图程序&#xff0c;专为Mac用户设计。它由Lemke Software开发&#xff0c;提供了一套丰富的工具和功能&#xff0c;使用户能够轻松创建高质量的技术图纸&#xff0c;平面图和设计。 CADintosh X for Mac具有直观的用户界面&#x…

DataGrip 配置 HiveServer2 远程连接访问

文章目录 集群配置 HiveServer2 服务DataGrip 配置 HiveServer2 访问 Hive 集群配置 HiveServer2 服务 1.在 Hive 的配置文件 hive-site.xml 中添加如下参数&#xff1a; <!-- 指定 HiveServer2 运行端口&#xff0c;默认为&#xff1a;10000 --><property><na…

Lua 数据类型 —— boolean

一、boolean 定义 lua 中只有 false 和 nil 表示假&#xff0c;其他都是表示真。 数字 0 和空字符串也表示真。 二、逻辑运算&#xff1a;and、or、not and&#xff1a;如果第一个操作数为 “false” &#xff0c; 则返回第一个操作数 or&#xff1a;如果第一个操作数不为…

【C++】继承的概念和简单介绍、基类和派生类对象复制转换、继承中的作用域、派生类的默认成员函数

文章目录 继承1.继承的概念和简单介绍1.1继承的概念1.2继承的定义 2.基类和派生类对象复制转换3.继承中的作用域4.派生类的默认成员函数5.继承与友元6.继承与静态成员 继承 1.继承的概念和简单介绍 1.1继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最…

【Linux系统编程】冯诺依曼体系结构

目录 前言 什么是冯诺依曼体系结构&#xff1f; 冯诺依曼体系结构如何进行数据处理的&#xff1f; 存储器在冯诺依曼体系中有什么作用&#xff1f; 冯诺依曼体系结构为什么要这样设计&#xff1f; 冯诺依曼结构总结 前言 相信对于冯诺依曼这个人的名字大家一定不会感到陌…

CentOS8启动过程与服务单元控制systemctl

一、启动过程 CentOS8采用了systemd&#xff0c;启动过程被大大缩短了。具体启动过程如下&#xff1a; 1、开机自检。 2、从硬盘的MBR中读取引导程序GRUB。 3、引导程序更加配置文件显示引导菜单。 4、如果选择进入Linux系统&#xff0c;此时引导程序就会加载Linux内核文件…

​TikTok正在监管机构谈判,以获得印尼支付牌照

8月4日&#xff0c;据路透社报道&#xff0c;两位消息人士透露&#xff0c;TikTok正在与印尼监管机构进行初步谈判&#xff0c;以求获得印尼央行颁发的PJP支付牌照。若获得该项资质&#xff0c;TikTok将能够更好的在本地开展电商等各项业务。 TikTok发言人于8月4日证实了这一消…

Redis压缩列表

区分一下 3.2之前 Redis中的List有两种编码格式 一个是LINKEDLIST 一个是ZIPLIST 这个ZIPLIST就是压缩列表 3.2之后来了一个QUICKLIST QUICKLIST是ZIPLIST和LINKEDLIST的结合体 也就是说Redis中没有ZIPLIST和LINKEDLIST了 然后在Redis5.0引入了LISTPACK用来替换QUiCKLIST中的…

【《深入浅出计算机网络》学习笔记】第1章 概述

内容来自b站湖科大教书匠《深入浅出计算机网络》视频和《深入浅出计算机网络》书籍 目录 1.1 信息时代的计算机网络 1.1.1 计算机网络的各类应用 1.1.2 计算机网络带来的负面问题 1.2 因特网概述 1.2.1 网络、互联网与因特网的区别与关系 1.2.1.1 网络 1.2.1.2 互联网 …

Redis学习笔记Day01-Redis入门

声明&#xff1a;本博客部分内容是从终极SpringBoot讲义摘抄的&#xff0c;文字是OCR识别出来的&#xff0c;有可能存在识别错误的可能&#xff0c;如有错误&#xff0c;请大胆指正&#xff0c;我马上修改&#xff01; 目录 1.连接命令2.key相关命令3.String命令4.List命令5.S…