Spring Boot参考教程内部应用监控(Actuator)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot参考教程内部应用监控(Actuator)相关的知识,希望对你有一定的参考价值。

3. 内部应用监控(Actuator)

如上2.4中所述,传统spring工程中工程的初始化过程,bean的生命周期,应用的内部健康情况均无法监控,为了解决这个问题,spring boot提供了Actuator执行器。

下面具体介绍什么是Actuator,以及怎么使用。

1 启用Actuator

 

3.1.1. 加入依赖

 

加入如下Starter pom:

 

       <dependency>

           <groupId>org.springframework.boot</groupId>

           <artifactId>spring-boot-starter-actuator</artifactId>

       </dependency>

 

3.1.2.配置

 

application.properties配置文件中加入配置:

management.security.enabled=false

 

注:因Actuator会将应用内部信息的端点暴露出来,这样就会产生安全问题,

Spring Boot默认将Springsecurity加入了工程,因此默认此配置是true,禁用安全以便测试。

 

3.1.3.启动

直接Run as JavaApplication启动即可。

 

3.1.4 测试

技术分享

测试结果如上

直接访问http://localhost:8080/beans即可。

返回的json文档为应用内上下文所有的Bean以及相互关系等。

 

2 Endpoints(端点)

Spring Boot Actuator的关键特性是在应用程序里提供众多Web端点,通过它们了解应用程序运行时的内部状况。有了Actuator,你可以知道Bean在Spring应用程序上下文里是如何组装在一起的,掌握应用程序可以获取的环境属性信息,获取运行时度量信息的快照等等。

Actuator提供了13个端点:

HTTP方法 路 径 描 述

GET/autoconfig提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过

GET/configprops描述配置属性(包含默认值)如何注入Bean

GET/beans描述应用程序上下文里全部的Bean,以及它们的关系

GET/dump获取线程活动的快照

GET/env获取全部环境属性

GET/env/{name}根据名称获取特定的环境属性值

GET/health报告应用程序的健康指标,这些值由HealthIndicator的实现类提供

GET/info获取应用程序的定制信息,这些信息由info打头的属性提供

GET/mappings描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系

GET/metrics报告各种应用程序度量信息,比如内存用量和HTTP请求计数

GET/metrics/{name}报告指定名称的应用程序度量值

POST/shutdown关闭应用程序,要求endpoints.shutdown.enabled设置为true

GET/trace提供基本的HTTP请求跟踪信息(时间戳、HTTP头等)

具体每一个端点的详细情况请阅读《Spring Boot实战》—丁雪丰 第七章 深入Actuator。

笔者提供电子版书籍,在此不再赘述。本章笔者着重介绍如何配置使用Actuator。

 

3 配置使用

关于Actuator的配置项,可查看Spring官网Spring Boot ReferenceGuide 中Commonapplication properties章节。

技术分享

3.1 启用禁用端点

虽然Actuator的端点都很有用,但你不一定需要全部这些端点。默认情况下,所有端点(除

/shutdown)都启用。将endpoints.endpoint-id.enabled设置为false,即可禁用端点,将endpoints.endpoint-id.enabled设置为true,即可启动端点。

测试禁用端点:修改配置文件,加入endpoints.beans.enabled=false。启动后访问:

技术分享

3.2 修改端点ID

如果想修改端点的固定id为定制id,加入配置:endpoints.*.id=newId即可。

测试:配置文件中加入endpoints.beans.id=springbeans启动后访问:

技术分享

3.3 通过JMX监控应用

 

Actuator还把它的端点以MBean的方式发布了出来,可以通过JMX来查看和管理。Actuator的端点都发布在org.springframework.boot域下。使用jcnsole.exe查看如下:

技术分享

3.4 添加自定义度量信息

/metrics端点获得运行中应用程序的内部度量信息,包括内存、垃圾回收和线程信息等,如果还想定义自己的度量,方式如下:

Spring提供如下两个接口及其用途:

CounterService这个接口里定义了三个方法,分别用来增加、减少或重置特定名称的度量值,代码如下:

packageorg.springframework.boot.actuate.metrics;

publicinterface CounterService {

voidincrement(String metricName);

voiddecrement(String metricName);

voidreset(String metricName);

}

GaugeService接口与CounterService类似,能将某个值记录到特定名称的度量值里。

packageorg.springframework.boot.actuate.metrics;

publicinterface GaugeService {

voidsubmit(String metricName, double value);

}

Spring Boot已经提供了两者的实现。我们所要做的就是把它们的实例注入所需的Bean,在适当的时候调用其中的方法,更新想要的度量值即可。

 

编写代码如下:

技术分享

l 启动测试

 
技术分享

另:关于Bean的注入可以使用另外一种方式:

技术分享

 

关于Actuator还有更多的使用方式,如添加自定义跟踪仓库,插入自定义健康指标等。

笔者不在演示,如有兴趣,可参考《Spring Boot实战》。

3.5 更改端点路径

 

实际应用中为了将暴露的端点与应用的业务接口区分开,或者便于进行安全控制,以及便于根据端点深入开发使用监控信息,可能需要将暴露的端点进行分组。

在配置文件中加入配置:

management.context-path=/endpoints

启动测试:

技术分享

技术分享

3.6 端点保护

3.3.6.1使用SpringSecurity配置项

 

应用的安全机制,我们可以使用Spring Security,Spring Security是针对整个应用的,使用后访问应用,会弹出HTTP基础身份验证对话框。

l 加入依赖

       <dependency>

          <groupId>org.springframework.boot</groupId>

          <artifactId>spring-boot-starter-security</artifactId>

       </dependency>

l 加入配置

security.user.name=admin

security.user.password=admin

management.security.roles=SUPERUSER

l 启动测试

技术分享

输入配置密码即可,一般开发中不会使用配置文件进行应用权限的管理,而是会结合数据库或LDAP使用。

 

3.3.6.2自定义安全配置

 

我们可以使用自定义安全配置覆盖自动配置的选项,此处不在详细介绍,后续章节将详细价绍SpringBoot集成Spring Security的具体使用。

 

 

<实例代码>

Github:https://github.com/chunyuding/SpringBoot-Demo

https://github.com/chunyuding/SpringBoot-Demo.git

码云:https://gitee.com/dingchunyu/SpringBoot-Demo

      https://gitee.com/dingchunyu/SpringBoot-Demo.git

 

<推荐书籍>

 百度云:http://pan.baidu.com/s/1qYA0Nxi

 

以上是关于Spring Boot参考教程内部应用监控(Actuator)的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot应用监控的实战教程

Spring Boot2.0之 监控管理

使用 VisualVM 通过 Kubernetes 集群后面的 JMX 监控 dockerised Spring Boot 应用程序内部

Spring Boot 应用监控: Java获取 CPU,内存, JVM 内部运行状况代码

SpringBoot入门教程:Spring Boot Admin 监控

使用 Spring Boot Admin 监控应用状态