Spring Boot包含很多其他的特性,它们可以帮你监控和管理发布到生产环境的应用。你可以选择使用HTTP端点,JMX或远程shell(SSH或Telnet)来管理和监控应用。审计(Auditing),健康(health)和数据采集(metrics gathering)会自动应用到你的应用。
执行器HTTP端点仅适用于基于Spring MVC的应用程序。
介绍
Metrics基本上是成熟公司里面必须做的一件事情,简单点来说就是对应用的监控,之前在一些技术不成熟的公司其实是不了解这种概念,因为业务跟技术是相关的 当业务庞大起来,技术也会相对复杂起来,对这些复杂的系统进行监控就存在必要性了,特别是在soa化的系统中,完整一个软件的功能分布在各个系统中,针对这些功能进行监控就更必要了 而Spring Boot Actuator 提供了metrics service,让监控变得统一化了,方便管理
开启production-ready特性
spring-boot-actuator模块提供了Spring Boot所有的production-ready特性。启用该特性的最简单方式就是添加对spring-boot-starter-actuator ‘Starter POM’的依赖。
执行器(Actuator)的定义:执行器是一个制造业术语,指的是用于移动或控制东西的一个机械装置。一个很小的改变就能让执行器产生大量的运动。
基于Maven的项目想要添加执行器只需添加下面的’starter’依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
端点
执行器端点允许你监控应用及与应用进行交互。Spring Boot包含很多内置的端点,你也可以添加自己的。例如,health端点提供了应用的基本健康信息。
端点暴露的方式取决于你采用的技术类型。大部分应用选择HTTP监控,端点的ID映射到一个URL。例如,默认情况下,health端点将被映射到/health。
下面的端点都是可用的:
ID | 描述 | 敏感(Sensitive) |
---|---|---|
autoconfig | 显示一个auto-configuration的报告,该报告展示所有auto-configuration候选者及它们被应用或未被应用的原因 | true |
beans | 显示一个应用中所有Spring Beans的完整列表 | true |
configprops | 显示一个所有@ConfigurationProperties的整理列表 | true |
dump | 执行一个线程转储 | true |
env | 暴露来自Spring ConfigurableEnvironment的属性 | true |
health | 展示应用的健康信息(当使用一个未认证连接访问时显示一个简单的’status’,使用认证连接访问则显示全部信息详情) | false |
info | 显示任意的应用信息 | false |
metrics | 展示当前应用的’指标’信息 | true |
mappings | 显示一个所有@RequestMapping路径的整理列表 | true |
shutdown | 允许应用以优雅的方式关闭(默认情况下不启用) | true |
trace | 显示trace信息(默认为最新的一些HTTP请求) | true |
如果您使用Spring MVC,还可以使用以下附加端点:
ID | 描述 | 敏感默认值 |
---|---|---|
docs | 显示Actuator端点的文档,包括示例请求和响应。需要spring-boot-actuator-docs在类路径上 | false |
heapdump | 返回GZip压缩hprof堆转储文件。 | true |
jolokia | 通过HTTP暴露JMX bean(当Jolokia在类路径上时)。 | true |
logfile | 返回日志文件的内容(if logging.file或logging.path属性已设置)。支持使用HTTP Range标头来检索部分日志文件的内容。 | true |
根据端点是如何暴露的,该sensitive属性可以用作安全提示。例如,敏感端点在通过HTTP访问时将需要用户名/密码(或者如果Web安全性未启用,则简单地禁用)。
自定义端点
使用Spring属性可以自定义端点。你可以设置端点是否开启(enabled),是否敏感(sensitive),甚至它的id。例如,下面的application.properties改变了敏感性和beans端点的id,也启用了shutdown。
endpoints.beans.id=springbeans
endpoints.beans.sensitive=false
endpoints.shutdown.enabled=true
注:前缀endpoints + . + name被用来唯一的标识被配置的端点。
默认情况下,除了shutdown外的所有端点都是启用的。如果希望指定选择端点的启用,你可以使用endpoints.enabled属性。
例如,下面的配置禁用了除info外的所有端点:
endpoints.enabled=false
endpoints.info.enabled=true
用于执行器MVC端点的超媒体
如果endpoints.hypermedia.enabled
设置为true
,并且 Spring HATEOAS位于类路径上(例如通过spring-boot-starter-hateoas或使用 Spring Data REST),则使用超媒体链接增强了执行器的HTTP端点,并添加了“发现页面”,其中包含所有端点。“发现页面” /actuator默认可用。它被实现为端点,允许使用属性来配置其路径(endpoints.actuator.path)以及是否启用(endpoints.actuator.enabled)。
当配置了自定义管理上下文路径时,“发现页面”将自动从/actuator管理上下文的根移动。例如,如果管理上下文路径/management那么发现页面将可用/management。
如果HAL浏览器通过其webjar(org.webjars:hal-browser)或spring-data-rest-hal-browser类似的HTML“发现页面”在类路径中,则以HAL浏览器的形式提供。
CORS支持
跨原始资源共享 (CORS)是一种W3C规范,允许您以灵活的方式指定什么样的跨域请求被授权。执行器的MVC端点可以配置为支持这种情况。
默认情况下禁用CORS支持,只有在endpoints.cors.allowed-origins属性设置完成后才能启用 。下面的配置允许 GET和POST来自example.com域的呼叫:
endpoints.cors.allowed-origins = http://example.com
endpoints.cors.allowed-methods = GET,POST
```
>EndpointCorsProperties 以获取完整的选项列表。
健康信息
健康信息可以用来检查应用的运行状态。它经常被监控软件用来提醒人们生产系统是否停止。health端点暴露的默认信息取决于端点是如何被访问的。对于一个非安全,未认证的连接只返回一个简单的’status’信息。对于一个安全或认证过的连接其他详细信息也会展示
健康信息是从你的ApplicationContext中定义的所有HealthIndicator beans收集过来的。Spring Boot包含很多auto-configured的HealthIndicators,你也可以写自己的。
安全与HealthIndicators
HealthIndicators返回的信息常常性质上有点敏感。例如,你可能不想将数据库服务器的详情发布到外面。因此,在使用一个未认证的HTTP连接时,默认只会暴露健康状态(health status)。如果想将所有的健康信息暴露出去,你可以把endpoints.health.sensitive设置为false。
为防止’拒绝服务’攻击,Hea