SpringBoot
中的监控可以分为 HTTP
端点和 JMX
两种方式来监控当前应用的运行状况和指标收集
执行器端点允许您监视应用程序并与之交互。SpringBoot
包括许多内置的端点,并允许我们添加自己的端点。可以通过 HTTP
或 JMX
启用或禁用每个端点,并公开(使其可以远程访问)。每个端点都有一个唯一的 id
,访问时可以通过如下地址进行访问:http:ip:port/{id}
(SpringBoot 1.x ),而在 SpringBoot 2.x
版本中,默认新增了一个 /actuator
作为基本路,访问地址则对应为 :http:ip:port/actuator/{id}
。
使用 HTTP
监控非常简单,在 SpringBoot
项目中,引入如下依赖:
org.springframework.boot
spring-boot-starter-actuator
默认就可以通过地址 http:localhost:8080/actuator/health
,访问之后得到如下结果:
SpringBoot
中提供了非常多的默认端点监控,但是出于安全考虑,默认情况下有些端点并不是开启状态,如 shutdown
端点就是默认关闭的。
内置端点
SpringBoot
中默认提供的常用内置端点如下:
| 端点 id | 描述 |
| — | — |
| auditevents | 公开当前应用程序的审计事件信息,需要 AuditEventRepository Bean。 |
| beans | 展示程序中所有的 Bean。 |
| caches | 公开可用的缓存。 |
| conditions | 展示配置类或者自动装配类中的条件,以及它们匹配或者不匹配的原因。 |
| configprops | 显示所有 @ConfigurationProperties 中的配置属性。 |
| env | 显示 ConfigurableEnvironment 中的所有环境。 |
| health | 显示应用程序运行状况信息。 |
| httptrace | 显示 HTTP 跟踪信息(默认情况下统计最近 100 次请求),需要 HttpTraceRepository Bean。 |
| info | 显示任意程序信息。 |
| integrationgraph | 显示 Spring 集成图,需要依赖 spring-integration-core。 |
| loggers | 展示和修改应用中的 loggers 配置。 |
| metrics | 展示当前应用监控指标的度量。 |
| mappings | 展示所有 @RequestMapping 路径。 |
| scheduledtasks | 展示应用中的所有定时任务信息。 |
| sessions | 允许从 Spring 会话支持的会话存储中检索和删除用户会话。需要使用基于 Spring Session web应用程序。 |
| shutdown | 优雅的关闭程序,默认禁止了该端点的访问。 |
虽然说这里的大部分端点都是默认开启的,但是默认暴露(允许对外访问)的只有 health
和 info
端点,所以如果需要允许端点对外暴露,可以通过如下配置(如果想要暴露所有的端点,则可以直接配置 "*"
):
management:
endpoints:
web:
exposure:
include: [health,info,mappings] //或者直接配置 “*”
另外,开启或禁用某一个端点,也可以通过通过如下配置进行动态控制:
management.endpoint..enabled=true
接下来我们挑选几个重点的端点来介绍一下。
health 端点
health
断点默认只是展示当前应用健康信息,但是我们可以通过另一个配置打开详细信息,这样不仅仅会监控当前应用,还会监控与当前应用相关的其他第三方应用,如 Redis
。
management:
endpoint:
health:
show-details: always
这个配置打开之后,我们连接上 Redis
之后再次访问 health
端点,就可以展示 Redis
服务的健康信息了:
loggers 端点
访问 http://localhost:8080/actuator/loggers
可以查看当前应用的日志级别等信息:
这里面本身并不特别,但是有一个功能却非常有用,比如我们生产环境日志级别一般都是 info
,但是现在有一个 bug
通过 info
级别无法排查,那么我们就可以临时修改 log
级别。
比如上图中的 ROOT
节点是 info
级别,那么我们可以通过 postman
等工具来发一个 post
请求修改日志级别。
修改之后就会发现,日志由原来的 info
变成了 debug
:
metrics 端点
metrics
是一个非常重要的监控端点,其监控内容覆盖了 JVM
内存、堆、类加载、处理器和 tomcat
容器等一些重要指标:
可以看到这里面包含了非常多的指标,任意访问一个指标就可以查看对应的指标信息:
自定义监控端点
通过上面的介绍,可以看到 SpringBoot
提供的监控非常强大,但是就算再全面的监控也不可能满足所有人的需求,所以 SpringBoot
也支持自定义监控端点。
自定义监控端点常用注解
自定义一个监控端点主要有如下常用注解:
-
@Endpoint:定义一个监控端点,同时支持
HTTP
和JMX
两种方式。 -
@WebEndpoint:定义一个监控端点,只支持
HTTP
方式。 -
@JmxEndpoint:定义一个监控端点,只支持
JMX
方式。
以上三个注解作用在类上,表示当前类是一个监控端点,另外还有一些注解会用在方法和参数上:
-
@ReadOperation:作用在方法上,可用来返回端点展示的信息(通过
Get
方法请求)。 -
@WriteOperation:作用在方法上,可用来修改端点展示的信息(通过
Post
方法请求)。 -
@DeleteOperation:作用在方法上,可用来删除对应端点信息(通过
Delete
方法请求)。 -
@Selector:作用在参数上,用来定位一个端点的具体指标路由。
来,一起写一个自己的监控端点
- 定义一个类,并使用
@Endpoint
注解标注标识,同时定义几个方法用@ReadOperation
和@WriteOperation
注解来标注:
@Endpoint(id=“myEndpoint”)
@Component
public class MyEndpoint {
private String STATUS = “up”;
private String DETAIL = “一切正常”;
// @ReadOperation
// public String test1(){
// return “wolf”;
// }
// @ReadOperation
// public Map<String,String> test2(){
// Map<String,String> map = new HashMap();
// map.put(“status”,“up”);
// return map;
// }
@ReadOperation
public JSONObject test3(){
JSONObject jsonObject= new JSONObject();
jsonObject.put(“status”,STATUS);
jsonObject.put(“detail”,DETAIL);
return jsonObject;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://i-blog.csdnimg.cn/blog_migrate/98443a3d8da1569893258c7dd3dc98e4.jpeg)
写在最后
为了这次面试,也收集了很多的面试题!
以下是部分面试题截图
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
扫码获取!!(备注Java获取)**
![img](https://i-blog.csdnimg.cn/blog_migrate/98443a3d8da1569893258c7dd3dc98e4.jpeg)
写在最后
为了这次面试,也收集了很多的面试题!
以下是部分面试题截图
[外链图片转存中…(img-88bIIqEG-1712531476125)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!