SpringBoot Actuator和Spring boot Admin工具

2024-03-29 23:44

本文主要是介绍SpringBoot Actuator和Spring boot Admin工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、Spring Boot Actuator

1、简介

2、访问方式

3、端点

4、SpringBoot项目引入actuator

端点

①health

②beans

③configprops

④env

⑤loggers

⑥heapdump

⑦threaddump

⑧metrics

⑨scheduledtasks

⑩mappings

⑪shutdown

定制端点

一、定制health端点

二、自定义info端点

三、自定义metrics端点

四、自定义Endpoint

二、Spring Boot Admin

1、简介

2、搭建SpringBootAdmin

①、搭建服务端

②、搭建客户端

③、安全防护

④、邮件通知


一、Spring Boot Actuator

1、简介

官方介绍,为生产环境准备的特性。可以用来监控和管理发布到生产环境下的应用。比如,应用的健康状态、日志信息、内存占用、线程信息、Bean加载信息等等。

官网地址:

Spring Boot Actuator: Production-ready Featuresicon-default.png?t=N7T8https://docs.spring.io/spring-boot/docs/2.5.6/reference/html/actuator.html

2、访问方式

  • http
  • JMX

3、端点

端点就是SpringBoot Actuator对外暴露的一系列接口,actuator服务端可以通过这些接口获得对应的信息,比如日志、内存、线程等等。

Spring Boot Actuator: Production-ready Featuresicon-default.png?t=N7T8https://docs.spring.io/spring-boot/docs/2.5.6/reference/html/actuator.html#actuator.endpoints端点有actuator提供的原生的,也可以用户自定义端点。

原生端点是在应用程序里提供众多 Web 接口,通过它们了解应用程序运行时的内部状况。原生端点可以分成三类:

  • 应用配置类:可以查看应用在运行期的静态信息:例如自动配置信息、加载的 springbean 信息、yml 文件配置信息、环境信息、请求映射信息;
  • 度量指标类:主要是运行期的动态信息,例如堆栈、请求连、一些健康指标、metrics 信息等;
  • 操作控制类:主要是指 shutdown,用户可以发送一个请求将应用的监控功能关闭。

原生自带的端点有以下这些:也可以参考官网说明,只不过官网是英文。

每一个端点是可以设置启动或禁用的,Spring Boot 2.x版本默认是只启用了health 和 info两个端点,其他默认是关闭的。

4、SpringBoot项目引入actuator

创建SpringBoot项目,引入actuator依赖

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

启动SpringBoot项目,访问 localhost:8080/actuator ,只要项目引入actuator依赖,就可以访问默认的health和info端点。

如果想开启所有的端点,将配置为 '*' 即可。如果配置多个用 , 分割

management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env,beans

端点

①health

health端点是显示服务或应用健康状态的接口,默认只显示状态,不显示详情,health有三种状态配置never、when-authorized、always,默认是never。

官网描述:Spring Boot Actuator: Production-ready Features

可以配置成always,则会显示状态详情,配置属性是management.endpoint.health.show-details,效
果如下:status是总的状态,其中有一个子节点的状态变为down的话,总的status也会变为down。

②beans

beans端点是注册进容器中的对象实例

③configprops

配置属性的信息

④env

配置的环境相关的变量属性

⑤loggers

各个包下的类对应的日志级别及其对应的信息展示。级别是可调的。调日志级别需要发送post请求,网页是无法发送的。

如果要远程查看日志信息,则需要将日志存储在文件中。配置属性logging.file.name,配置完以后会多一个端点 /logfile,存储日志信息。

⑥heapdump

容器运行时的jvm信息,比如堆栈占用信息等等,可以结合jdk自带的java VisualVM来分析。

⑦threaddump

线程的一些信息

⑧metrics

各个指标、http请求数,jdbc连接数,gc次数,cpu使用情况等等。

⑨scheduledtasks

任务调度

⑩mappings

映射信息

shutdown

优雅关闭

优雅关闭就是如果在关闭容器的时候,还有请求任务未处理完成,则等待这些任务处理完成并返回以后才会关闭容器。

容器需要先配置优雅关闭开启,server.shutdown = graceful

容器支持优雅关闭以后,就可以发送post请求到shutdown端点来优雅关闭容器。

定制端点

一、定制health端点

@Component
public class CustomHealthIndicator extends AbstractHealthIndicator {@Overrideprotected void doHealthCheck(Health.Builder builder) throws Exception {boolean res = check();if (res) {builder.up();} else {builder.down();}}private boolean check() {return true;}
}

实现抽象类,其中的doHealthCheck是检查端点是否健康的方法,在这里可以实现自定义。

访问 localhost:8080/actuator/health 效果如下:

二、自定义info端点

默认的info端点没有任何信息。

方式一:通过yml配置文件的方式实现

info:app-name: testversion: 3.0.0mavenversion: @project.artifactId@   # @@可以获取pom配置文件的属性值

效果:localhost:8080/actuator/info

方式二:编写代码的方式实现

@Component
public class CustomInfo implements InfoContributor {@Overridepublic void contribute(Info.Builder builder) {builder.withDetail("k1", "v1").withDetail("hello", "world").withDetails(Collections.singletonMap("kkk", "vvv"));}
}

效果:

配置文件和编写代码的方式可以同时使用,最终会汇集所有的信息。

三、自定义metrics端点

默认的metrics端点提供了jvm、数据库连接信息、cpu、进程相关的一些信息。

counter

计数器,一个简单的Meter,可以用来记录请求次数、支付订单次数等增长类的统计。

//定制metrics counter指标
Metrics.counter("count","tags").increment();

查看metrics端点,发现自定义的counter指标也出现了。

访问接口counter会增加,实现计数器的效果。

查看指标的具体数据,在http://localhost:8080/actuator/metrics/ 后面跟上对应的指标即可。

Timer

定时器指标,用来记录一些代码执行的时间计算。

Guage

一般用来记录有浮动值的数据,例如积压的消息,任务,集合、数组等等。

Summary

可以记录命中率的一些doble值。

四、自定义Endpoint

官网描述戳这里:Spring Boot Actuator: Production-ready Features

@Component
@Endpoint(id = "wjPoint")
public class CustomPoint {Map<String,Object> map = new HashMap();{Map<String,String> m1 = new HashMap<>();m1.put("k1","v1");m1.put("k2","v2");Map<String,String> m2 = new HashMap<>();m2.put("k3","v3");m2.put("k4","v4");map.put("m1",m1);map.put("m2",m2);}@ReadOperationpublic Map getOperation(){return map;}
}

二、Spring Boot Admin

1、简介

基于SpringBoot Actuator的可视化的监控平台,是一个vue程序。

官方地址:

GitHub - codecentric/spring-boot-admin: Admin UI for administration of spring boot applicationsAdmin UI for administration of spring boot applications - codecentric/spring-boot-adminicon-default.png?t=N7T8https://github.com/codecentric/spring-boot-admin文档说明地址:

Spring Boot Admin Reference Guideicon-default.png?t=N7T8https://docs.spring-boot-admin.com/2.5.1/#getting-started

2、搭建SpringBootAdmin

SpringBootAdmin分为服务端和客户端

服务端:即SpringBootAdmin这个监控平台

客户端:即被监控平台监控的后台应用或者容器服务

①、搭建服务端

第一步:创建SpringBoot服务作为admin服务端,服务端需要引入依赖(用到的SpringBoot的版本是2.5.6)

<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId><version>2.5.1</version>
</dependency>

第二步:启动类加注解@EnableAdminServer

第三步,直接启动

浏览器可以访问,但是目前只有服务端,没有客户端的效果。

②、搭建客户端

第一步:创建SpringBoot应用程序作为客户端,引入依赖

<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId><version>2.5.1</version>
</dependency>

第二步:yml中配置服务端的地址和要暴露的端点

spring.boot.admin.client.url=http://localhost:8080  
management.endpoints.web.exposure.include=*  

第三步:启动客户端

这时候服务端的监控页面就会出现一个刚刚启动的客户端实例,绿色就是正常的,如果显示红色或者灰色就需要查看客户端服务的健康状态了。

所有暴露的端点中的信息都可以在监控平台页面上面查看。

③、安全防护

SpringBootAdmin结合SpringSecurity做了登录的用户身份的校验,在进入监控页面之前需要先登录的功能。

Spring Boot Admin Reference Guideicon-default.png?t=N7T8https://docs.spring-boot-admin.com/2.5.1/#_securing_spring_boot_admin_server第一步:在服务端引入依赖

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

第二步:配置SecureConfig配置类

官方有详细的说明,不懂Spring Security问题不大。

@Configuration(proxyBeanMethods = false)
public class SecuritySecureConfig extends WebSecurityConfigurerAdapter {private final AdminServerProperties adminServer;private final SecurityProperties security;public SecuritySecureConfig(AdminServerProperties adminServer, SecurityProperties security) {this.adminServer = adminServer;this.security = security;}@Overrideprotected void configure(HttpSecurity http) throws Exception {SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();successHandler.setTargetUrlParameter("redirectTo");successHandler.setDefaultTargetUrl(this.adminServer.path("/"));http.authorizeRequests((authorizeRequests) -> authorizeRequests.antMatchers(this.adminServer.path("/assets/**")).permitAll() .antMatchers(this.adminServer.path("/actuator/info")).permitAll().antMatchers(this.adminServer.path("/actuator/health")).permitAll().antMatchers(this.adminServer.path("/login")).permitAll().anyRequest().authenticated() ).formLogin((formLogin) -> formLogin.loginPage(this.adminServer.path("/login")).successHandler(successHandler).and() ).logout((logout) -> logout.logoutUrl(this.adminServer.path("/logout"))).httpBasic(Customizer.withDefaults()) .csrf((csrf) -> csrf.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) .ignoringRequestMatchers(new AntPathRequestMatcher(this.adminServer.path("/instances"),HttpMethod.POST.toString()), new AntPathRequestMatcher(this.adminServer.path("/instances/*"),HttpMethod.DELETE.toString()), new AntPathRequestMatcher(this.adminServer.path("/actuator/**")) )).rememberMe((rememberMe) -> rememberMe.key(UUID.randomUUID().toString()).tokenValiditySeconds(1209600));}// Required to provide UserDetailsService for "remember functionality"@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().withUser(security.getUser().getName()).password("{noop}" + security.getUser().getPassword()).roles("USER");}}

第三步:服务端的yml配置文件配置admin登录页面的用户名和密码

spring.security.user.name=123456
spring.security.user.password=123456

第四步:注册到服务端的客户端配置文件也需要配置登录的用户名和密码,格式如下

spring.boot.admin.client:username: 123456password: 123456

这样就算是实现了安全防护。

当然,SpringBoot除了可以注册单个客户端,也可以注册注册中心的客户端,就可以监控整个注册中心中的应用和服务。

④、邮件通知

SpringBootAdmin支持客户端服务发生异常时的通知,包括邮箱通知,钉钉或者其他的方式,具体参考官网:

Spring Boot Admin Reference Guideicon-default.png?t=N7T8https://docs.spring-boot-admin.com/2.5.1/#_notifications第一步:引入依赖(服务端)

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

第二步:配置邮箱信息,发件人和收件人

#发件人用qq邮箱服务,发件人的用户名和密码,密码是授权码
spring.mail.host=smtp.qq.com
spring.mail.username=123456789@qq.com
spring.mail.password=1234567889#收件人,多个人用,分割
spring.boot.admin.notify.mail.from=123456789@qq.com
spring.boot.admin.notify.mail.to=123456789@qq.com

上面的邮箱使用实际的邮箱,邮箱密码其实是qq邮箱是授权码

授权获取方式在qq邮箱后台设置里面获取:

根据指引获取授权码即可。

当服务挂了(或者重启)以后,就会有邮件发送出来

练习源码已上传:https://download.csdn.net/download/ywanju/89053368icon-default.png?t=N7T8https://download.csdn.net/download/ywanju/89053368

这篇关于SpringBoot Actuator和Spring boot Admin工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只