• springboot监控---Spring Boot Actuator


    目录

    引包

    端点

    health端点

    loggers端点

    info端点

    beans端点

    heapdump 端点

    threaddump 端点

    shutdown 端点

    metrics 端点

    自定义监控端点


    分享一下springboot监控,Spring Boot Actuator 的相关使用及知识点

    最近楼主正在为程序写监控,考虑了一下Spring Boot Actuator,但是还是放弃了,决定自己实现监控,更加贴合公司业务,但,还是用了一下研究了一下springboot的这个监控,分享给各位开发者

    当然,本人也是用的不多,只是用了大概,所以可能不会很全面,请各位见谅

    让我们开始

    引包

    首先,想要使用,必须先引包

    1. <dependency>
    2. <groupId>org.springframework.bootgroupId>
    3. <artifactId>spring-boot-starter-actuatorartifactId>
    4. dependency>

    端点

    Spring Boot Actuator 提供了所谓的端点来给外部访问和交互,主要分为三大类

    • 应用配置类:获取应用程序中加载的应用配置、环境变量、自动化配置报告等与springboot应用相关的配置类信息
    • 指标类:获取应用程序运行中用于监控的指标信息,比如内存信息、线程池信息、http请求统计等等
    • 控制类:提供了本应用的关闭等功能

    在默认情况下,只能访问health和info,其他端点需要手动配置

     如果需要允许所有端点对外开启,可以直接配置

    我们可以启动访问一下

     当然,这个时候信息很少,那是因为缺了一项配置

    health端点

    health端点默认只展示当前应用的健康信息,如果需要详细的信息,可以通过配置打开

     再次启动访问

    loggers端点

    访问 /actuator/loggers 可以获取到日志级别

    这儿有一个很重要的操作,那就是可以临时改变日志级别

    以post请求,在路径后边跟上root,可以将级别修改为别的级别

    info端点

    info端点可以展示程序的信息,默认情况下,只会返回一个空的json

    可以在配置文件进行配置,比如我配置下面这些

    然后进行访问 

    可以看到,这就是我定义的信息 

    beans端点

    如同字面意思,这个端点会返回我们有哪些bean

    heapdump 端点

    这个端点,会生成一个JVM堆文件,可以使用JDK的JVM监控工具VisualVM打开查看文件的内存快照

    这个就不要用工具请求了,不大好下载,直接放到浏览器请求就好

      

    threaddump 端点

    这个端点可以返回线程相关信息

    包括了线程名、线程ID、线程状态、是否等待锁资源等 

    shutdown 端点

    这个是一个关闭应用等端点,需要用post访问,且默认关闭,需要在配置文件开启

      

    metrics 端点

    这个端点用来返回当前程序的指标,比如内存信息、堆栈信息、GC信息等

    并且,我们可以详细看某个指标的具体信息,以 jvm.memory.max 为例子

    也可以用参数访问某一块具体空间,比如

    127.0.0.1:8080/actuator/metrics/jvm.memory.max?tag=id:MetaSpace 

    自定义监控端点

    从上面来看,springboot提供的这个监控还是可以的,但是各个服务需求不同,就会出现自定义的情况,所以,springboot也支持自定义监控端点

    自定义监控端点,会用到如下注解:

    @Endpoint: 在类上使用,声明当前类是一个监控端点,支持http和jmx

    @WebEndpoint: 在类上使用,声明当前类是一个监控端点,支持http

    @JmxEndpoint: 在类上使用,声明当前类是一个监控端点,支持jmx

    @ReadOpreation: 在方法上使用,可用来返回端点展示的信息,使用get请求

    @WriteOperation: 在方法上使用,用来修改端点展示的信息,使用post请求

    @DeleteOperation: 在方法上使用,可以用来删除对应端点信息,使用delete请求

    @Selector: 在方法参数上使用,用来定位一个端点的具体指标路由

    搞一个试试

    1. import org.apache.commons.lang3.StringUtils;
    2. import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
    3. import org.springframework.boot.actuate.endpoint.annotation.Selector;
    4. import org.springframework.boot.actuate.endpoint.annotation.WriteOperation;
    5. import org.springframework.boot.actuate.endpoint.web.annotation.WebEndpoint;
    6. import org.springframework.stereotype.Component;
    7. @WebEndpoint(id = "myEndpoint")
    8. @Component
    9. public class MyEndpoint {
    10. private String status = "alive";
    11. private String desc = "version 1";
    12. @ReadOperation
    13. public String testReadOperation() {
    14. return status;
    15. }
    16. @ReadOperation
    17. public String testReadOperation(@Selector String name) {
    18. if (StringUtils.isNoneBlank(name) && name.equals("status")) {
    19. return status;
    20. } else {
    21. return desc;
    22. }
    23. }
    24. @WriteOperation
    25. public void testWriteOperation(@Selector String arg0, @Selector String value) {
    26. if (arg0.equals("status")) {
    27. status = value;
    28. } else {
    29. desc = value;
    30. }
    31. }
    32. }

    至于权限设置,因为actuator有的操作是敏感操作,所以可以基于  springbootsecurity 去限制

  • 相关阅读:
    详解:-bash: nohup:: command not found​​​​
    使用EasyExcel 导入数据,失败原因数据导出
    键入网址到网页显示,期间发生了什么?
    Sophon AutoCV Q&A大放送:如何加速视觉模型生产和落地(下篇)
    外包干了3个月,技术确实退步明显
    使用 Aspect 更快地构建 React 可重用组件
    找不到mfc140u.dll怎么办?修复缺失mfc140u.dll的多种方案分享
    添加IDEA到右键打开里面
    ssm/php/node/python农产品销售网站
    HSV空间改进的多尺度Retinex算法
  • 原文地址:https://blog.csdn.net/weixin_46097842/article/details/125860592