思考问题
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=always2. /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/root
的POST
请求。如果在生产环境中,你想要你的应用输出一些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; } } 复制代码