Actuator - 使用与理论

Actuator是SpringBoot用于应用监控和管理的模块,提供健康检查、度量指标、配置信息等。通过配置暴露端点,如/actuator/health和/actuator/metrics,可以获取应用状态和性能数据。安全方面,建议配合SpringSecurity使用,避免直接暴露敏感端点。
摘要由CSDN通过智能技术生成

 思考问题

1. Actuator有何作用,又该如何使用的呢

Spring Boot Actuator 模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP 跟踪等,帮助我们监控和管理Spring Boot 应用

这个模块是一个采集应用内部信息暴露给外部的模块,上述的功能都可以通过HTTP 和 JMX 访问

 

使用教程:

1. 导入依赖:spring-boot-starter-actuator

2. 导入依赖后,将默认启动actuator,此时有默认的两个端点可使用:/actuator/health 和 /actuator/info 這兩個 endpoint。

 

Actuator根据端点的作用的话,我们大概可以分为三大类:

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

2. Actuator 有哪些端点可用

3. Actuator 有哪些可用的配置

1. Actuator 端点暴露配置 

# 可以這樣寫,就會開啟所有endpoints(不包含shutdown)
# exposure 表示暴露,即需要暴露的端点
management.endpoints.web.exposure.include=*

# 也可以這樣寫,就只會開啟指定的endpoint,因此此處只會再額外開啟/actuator/beans和/actuator/mappings

management.endpoints.web.exposure.include=beans,mappings

# exclude可以用來關閉某些endpoints 
# exclude通常會跟include一起用,就是先include,然後再exclude 
# 例如下面这个包含所有端点,但排除 /actuator/beans 這個endpoint 的使用
management.endpoints.web.exposure.exclude=beans 
management.endpoints.web.exposure.include=* 

# 如果要開啟/actuator/shutdown,要額外再加這一行 
# ShutDown要开启必须额外追加该行
management.endpoint.shutdown.enabled=true

2. Actuator 路径配置

#這樣寫的話,原本內建的/actuator/xxx路徑,都會變成/manage/xxx,可以用來防止被其他人猜到
management.endpoints.web.base-path=/manage

#同时可以将health修改成healthcheck
management.endpoints.web.path-mapping.health=healthcheck

 3. Actuator 端口配置

#指定端口,默认跟server.port一样,可以防止被其他人猜到
management.server.port=10111

4. Actuator 缓存配置

# 对于一些不带参数的端点请求会自动进行缓存,我们可以通过如下方式配置缓存时间,下面配置表示 beans 端点的缓存时间为 100s
management.endpoint.beans.cache.time-to-live=100s

4. Actuator 端点开放后,默认是直接可访问到的。如果想要保证保全性,建议引入SpringSecurity

5. Actuator 的重要的端点解析

1. /actuator/health 健康检查接口

当我们开启health的健康端点时,我们能够查到应用健康信息是一个汇总的信息,访问 /actuator/health时,我们获取到的信息是{"status":"UP"},status的值还有可能是 DOWN。要想查看详细的应用健康信息需要配置:management.endpoint.health.show-details=always

2. /actuator/metrics 度量追踪接口

/metrics 端点用来返回当前应用的各类重要度量指标,比如:内存信息、线程信息、垃圾回收信息、tomcat、数据库连接池等。

不同于1.x,Actuator在这个界面看不到具体的指标信息,只是展示了一个指标列表。为了获取到某个指标的详细信息,我们可以请求具体的指标信息,像这样:

http://localhost:8080/actuator/metrics/{MetricName}

比如我访问 /actuator/metrics/jvm.memory.max 就可查看jvm的最大内存是多少,返回信息(name、description、baseUnit、measurements、availableTags)

 自定义统计指标:除了使用 metrics 端点默认的这些统计指标外,我们还可以实现自定义统计指标。Metrics类 提供 4 种基本的度量类型:Gauge、Counter、Timer、Summary

 

3. /loggers 端点
/loggers 端点暴露了我们程序内部配置的所有logger的信息。我们访问/actuator/loggers可以看到.

/loggers端点能够动态修改你的日志等级。比如,我们可以通过以下几种方式来修改 root logger的日志等级。我们只需要发起一个URL 为http://localhost:8080/actuator/loggers/rootPOST请求。

如果在生产环境中,你想要你的应用输出一些Debug信息以便于你诊断一些异常情况,你只需要按照上述方式就可以修改,而不需要重启应用。

4. /beans端点:会返回Spring 容器中所有bean的别名、类型、是否单例、依赖等信息。

5. /heapdump 端点:/actuator/heapdump会自动生成一个 Jvm 的堆文件 heapdump。我们可以使用 JDK 自带的 Jvm 监控工具 VisualVM 打开此文件查看内存快照。

 

6. /threaddump 端点:这个端点我个人觉得特别有用,方便我们在日常定位问题的时候查看线程的情况。 主要展示了线程名、线程ID、线程的状态、是否等待锁资源、线程堆栈等信息。就是可能查看起来不太直观。

6. Actuator 如下配置,看看

management:
  endpoint:
    shutdown:
      enabled: true
  endpoints:
    web:
      exposure:
        include: '*'
    jmx:
      exposure:
        include: '*'
  server:
    # 自定义端口
    port: 8888
    # 不允许远程管理连接,安全性考虑
    address: 127.0.0.1

为什么 management.endpoints 下有一个 web 和 jmx

        原因:endpoint的暴露方式有两种,即HTTP和JMX,只是说我们常用的HTTP方式,因此经常看见web,要开启JMX消息队列的方式,就需要如上配置jmx参数

不建议开启shutdown:

        原因:management.endpoints.{shutdown}.enabled: 默认是关闭的,如果将端点 shutdown 开启,意味着可能被人家关闭机器 

7. Actuator 自定义接口如何完成 

默认的端点虽然可以满足大多数的需求,但一些特殊的需求还是需要能够支持自定义端点的。

自定义 Endpoint 端点,只需要在我们的新建Bean上使用 @Endpoint 注解即可, Bean 中的方法就可以通过 JMX 或者 HTTP 公开

除此之外,还可以使用 @JmxEndpoint@WebEndpoint 编写 EndPoint。但这些 EndPoint 仅限于各自的公开方式。例如,@WebEndpoint 仅通过HTTP公开,而不通过JMX公开。

那么是不是类中所有的方法都支持对外公开呢?

很明显不是的。Actuator提供了三个用于方法上的注解,只有加三个注解的方法才支持对外公开,并且每个注解都有支持它的HTTP method。

  • @ReadOperation对应HTTP的GET请求
  • @WriteOperation对应HTTP的POST请求
  • @DeleteOperation对应HTTP的DELETE请求

简单应用如下:

通过访问 /actuator/my?content=endpointGet 就会触发第一个方法 endpointCustomRead,返回“请求的内容:endpointGet”

  • @Component
    @Endpoint(id = "my")
    public class EndpointCustom {
    
       @ReadOperation
       public String endpointCustomRead(String content) {
          return "请求的内容: " + content;
       }
    
       @WriteOperation
       public String endpointCustomWrite(String content) {
          return "写的内容: " + content;
       }
    
       @DeleteOperation
       public String endpointCustomDelete(String content) {
          return "删除的内容: " + content;
       }
    
    }
    复制代码

参考链接 

1. Spring boot -- Actuator 详解 - 入门❤❤❤❤❤

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值