笔者寄语: 笔者最近去医院检查了一下,脂肪肝,反思了笔者之前的恶习,在这里给广大程序猿朋友们一些建议:
- 少熬夜
- 少久坐,多运动
- 少点外卖,尽量自己做饭
Spring Boot Actuator主要用于监控和度量SpringBoot应用程序。主要有三种观察Actuator信息的方式:
Web端点
、远程shell
、JMX
。本文主要介绍相对常用的方式:通过Web端点(即:通过浏览器访问URL)观察Actuator的统计信息。
声明: 以下内容基于SpringBoot2.x。
Spring Boot Actuator的使用:
第一步:在SpringBoot项目的pom.xml中引入actuator依赖。
<!-- actuator监控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
第二步:配置application.yml或application.properties,使actuator端点可访问。
actuator端点可访问的前提是:目标端点已启用
且已暴露
。但由于默认情况下,Actuator已启用了除shutdown之外的所有端点,所以如果想访问的端点不是shutdown的话,我们只需要保证该端点已暴露即可。
-
启用/禁用端点: 通过配置
management.endpoint.<端点id>.enabled
为true/false
来启用/禁用
端点,如:# 启用shutdown对应的端点 management.endpoint.shutdown.enabled=true # 禁用端点id为<health>的端点 management.endpoint.health.enabled=false
提示一:在下文中,会罗列出Actuator所有的端点id及相应的说明。
提示二:Actuator会默认启用除shutdown之外的所有端点,如果嫌默认启用的端点过多,只想启用其中一两个端点的话,我们可以先设置默认关闭所有端点(management.endpoints.enabled-by-default=false),然后再指定启用我们需要的端点(management.endpoint.<端点id>.enabled=true),如:
-
暴露/隐藏端点: 通过配置
management.endpoints.web.exposure.include=xxx
来暴露Web端点
;通过配置management.endpoints.web.exposure.exclude=xxx
来隐藏(不暴露)Web端点
。其中xxx
可以是一个端点id
,也可以是通配符*(表示所有端点id)
,还可以是多个端点id(多个端点id之间使用逗号分割)
,如:# 暴露所有端点 management.endpoints.web.exposure.include=* # 隐藏(不暴露)端点 # management.endpoints.web.exposure.exclude=info # 隐藏(不暴露)端点 management.endpoints.web.exposure.exclude=env,beans
注:这里暴露/隐藏端点的方式是针对Web端点的,如果是jmx的话,key是management.endpoints.jmx.exposure.include或management.endpoints.jmx.exposure.exclude。
注:Web端点默认暴露的有info、health。
第三步:访问Web端点(ip
:端口
/${management.endpoints.web.base-path}
/${端点-id}
),观察监控信息。
示例访问(端点id为)env的端点信息:
注:低版本SpringBoot的management.endpoints.web.base-path值默认为/,高版本SpringBoot
的management.endpoints.web.base-path
值默认为actuator
。可通过主动设置其值来改变uri
,如设置management.endpoints.web.base-path=/abc后
,观察env信息,就需要访问ip:端口/abc/env
了。
注:如果访问Web端点时,需要跨域的话,那么可参考这样配置:
# 以下配置允许来自 example.com 域的 GET 和 POST 调用
management.endpoints.web.cors.allowed-origins=http://example.com
management.endpoints.web.cors.allowed-methods=GET,POST
Actuator端点ID及说明:
端点ID | 说明 | 已默认开启 | Web端点已默认暴露 |
---|---|---|---|
auditevents | 暴露当前应用程序的审计事件信息。 | 是 | 否 |
beans | 显示应用程序中所有 Spring bean 的完整列表。 | 是 | 否 |
conditions | 显示在配置和自动配置类上评估的条件以及它们匹配或不匹配的原因。 | 是 | 否 |
configprops | 显示所有 @ConfigurationProperties 的校对清单。 | 是 | 否 |
env | 暴露全部环境属性。 | 是 | 否 |
flyway | 显示已应用的 Flyway 数据库迁移。 | 是 | 否 |
health | 报告应用程序的健康指标,这些值由HealthIndicator的实现类提供。 注:health有三个标准: never(默认):默认不显示细节信息。 when-authorized:当鉴权通过时,才显示细节信息。 always:总是显示细节信息。 注:可在配置文件中形如management.endpoint.health.show-details=always来配置使用哪一个标准。 注:health的细节信息可包含的东西较全,如:磁盘、数据库、RabbitMQ、Solr、MongoDB、Redis、jms、mail等等。 | 是 | 是 |
httptrace | 显示 HTTP 追踪信息(默认情况下,最后 100 个 HTTP 请求/响应交换)。 | 是 | 否 |
info | 获取应用程序的定制信息,这些信息由info打头的属性提供。 注:可自定义,如:info.key=value。 | 是 | 是 |
integrationgraph | 显示 Spring Integration 图。 | 是 | 否 |
loggers | 显示和修改应用程序中日志记录器的配置。 | 是 | 否 |
liquibase | 显示已应用的 Liquibase 数据库迁移。 | 是 | 否 |
metrics | 报告各种应用程序度量信息,比如内存用量和HTTP请求计数。 | 是 | 否 |
mappings | 描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系。 | 是 | 否 |
scheduledtasks | 显示应用程序中的调度任务。 | 是 | 否 |
sessions | 允许从 Spring Session 支持的会话存储中检索和删除用户会话。当使用 Spring Session 的响应式 Web 应用程序支持时不可用。 | 是 | 否 |
shutdown | 正常关闭应用程序。 | 否 | 否 |
threaddump | 执行线程 dump。 | 是 | 否 |
如果使用web应用(Spring MVC, Spring WebFlux, 或者 Jersey),还有附加端点:
端点ID | 说明 | 已默认开启 | Web端点已默认暴露 |
---|---|---|---|
heapdump | 返回一个堆dump 文件。 | 是 | 否 |
jolokia | 通过 HTTP 暴露 JMX bean(当 Jolokia 在 classpath 上时,不适用于 WebFlux)。 | 是 | 否 |
logfile | 返回日志文件的内容(如果已设置logging.file 或 logging.path 属性)。支持使用 HTTP Range 头来检索部分日志文件的内容。 注:在SpringBoot高版本里,使用logging.file.path代替logging.path;使用logging.file.name代替logging.file。 注:logging.file.name可具体指定到哪一个日志文件名;logging.file.path只能指定到日志文件所在的目录,会默认指向该目录下名为Spring.log的日志文件。 | 是 | 否 |
prometheus | 以可以由 Prometheus 服务器抓取的格式暴露指标。 | 是 | 否 |
Actuator常用端点使用示例:
-
env端点(访问ip:端口/actuator/env): 查看所有配置属性(系统属性、环境变量、应用配置等等)。
注:如果想要单独查看env下某一项的配置,那么可访问/actuator/env/xxx即可,如:
-
beans端点(访问ip:端口/actuator/beans): 查看Spring中Ioc的beans。
-
conditions端点(访问ip:端口/actuator/conditions): SpringBoot中,autoconfig的一些类及其条件信息(含:哪些自动配置成功,哪些自动配置失败,哪些无条件自动配置)。
展开一个,观察一下:
为了方便理解,可看一下MybatisPlusAutoConfiguration类的源码:
-
mappings端点(访问ip:端口/actuator/mappings): 描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系。
-
metrics端点(访问ip:端口/actuator/metrics): 报告各种应用程序度量信息,比如内存、系统、jdbc、http、tomcat等等。
示例查看cpu数量:
-
httptrace端点(访问ip:端口/actuator/httptrace): 查看(最近100条)HTTP请求信息。
-
threaddump端点(访问ip:端口/actuator/threaddump): 查看线程dump信息。
-
health端点(访问ip:端口/actuator/health): 查看应用的健康信息。
-
info端点(访问ip:端口/actuator/info): 定制info信息。
比如在application.properties文件中配置有信息:
那么访问/actuator/info就可看到:
-
logfile端点(访问ip:端口/actuator/logfile): 用浏览器直接查看日志文件的内容。
在系统配置文件中,使用logging.file(或logging.file.name)指定日志文件:
然后,访问/actuator/logfile:
-
configprops端点(访问ip:端口/actuator/configprops): 显示所有 @ConfigurationProperties 的校对清单。
为了方便理解,可看一下HttpTraceProperties类的源码:
声明: 本文只是Actuator入门,更多Actuator用法与细节可自行查阅相关文档资料。
^_^ 如有不当之处,欢迎指正
^_^ 参考资料
《Spring Boot实战》Craig Walls 著,丁雪丰 译
《深入浅出Spring Boot》杨开振 著
^_^ 参考链接
https://docs.spring.io/spring-boot/docs…
https://docshome.gitbooks.io/springboot…
^_^ 本文已经被收录进《程序员成长笔记》 ,笔者JustryDeng