第13章
监控Spring
Boot应用
13
监控
Spring
Boot
应用
第十三章 监控Spring Boot应用,授课教师:陈恒大连外国语大学,本章目标,了解Actuator的管理功能掌握如何通过HTTP进行Spring Boot的应用监控和管理功能掌握如何自定义端点和HealthIndicator实现,1,本章内容,2,13.1 端点的分类与测试13.2 自定义端点13.3 自定义HealthIndicator,13.1 端点的分类与测试,13.1.1 端点的开启与暴露13.1.2 应用配置端点的测试13.1.3 度量指标端点的测试13.1.4 操作控制端点的测试,3,13.1.1 端点的开启与暴露,Spring Boot提供了许多监控和管理功能的端点。根据端点的作用,可以将Spring Boot提供的原生端点分为三大类:应用配置端点、度量指标端点和操作控制端点。【例13-1】查看Spring Boot默认暴露的端点。,4,【例13-1】,1创建基于Spring Boot Actuator依赖的Web应用ch13_1创建基于Spring Boot Actuator依赖的Web应用ch13_1。2配置JSON输出格式在Web应用ch13_1的配置文件application.properties中,配置JSON字符串的输出格式,具体如下:#输出的JSON字符串格式更美观spring.jackson.serialization.indent-output=true,5,6,【例13-1】,3启动主程序查看默认暴露的端点启动Web应用ch13_1的主程序Ch131Application后,通过访问“http:/localhost:8080/actuator”查看默认暴露的端点,运行效果如下图所示。,从上图可以看出Spring Boot默认暴露了health和info两个端点。如果想暴露Spring Boot提供的所有端点,需要在配置文件application.properties配置“management.endpoints.web.exposure.include=*”,配置后重启应用主程序,重新访问“http:/localhost:8080/actuator”即可查看所有暴露的端点。,端点暴露设置,7,默认情况下,除了shutdown端点是关闭的,其它端点都是开启的。配置一个端点的开启,使用management.endpoint.enabled属性,如启用shutdown端点:management.endpoint.shutdown.enabled=true 我们在配置文件中可使用“management.endpoints.web.exposure.include”属性列出暴露的端点,示例如下:management.endpoints.web.exposure.include=info,health,env,beans“*”可用来表示所有的端点,例如,除了env和beans端点,通过HTTP暴露所有端点,示例如下:management.endpoints.web.exposure.include=*management.endpoints.web.exposure.exclude=env,beans,13.1 端点的分类与测试,13.1.1 端点的开启与暴露13.1.2 应用配置端点的测试13.1.3 度量指标端点的测试13.1.4 操作控制端点的测试,8,13.1.2 应用配置端点的测试,通过应用配置端点就可以帮助我们轻松的获取一系列关于Spring应用配置内容的详细报告,比如:自动化配置的报告、Bean创建的报告、环境属性的报告等。,9,1conditions,该端点在1.x版本中名为autoconfig,该端点用来获取应用的自动化配置报告,其中包括所有自动化配置的候选项。同时还列出了每个候选项自动化配置的各个先决条件是否满足。所以,该端点可以帮助我们方便的找到一些自动化配置为什么没有生效的具体原因。该报告内容将自动化配置内容分为三部分:positiveMatches中返回的是条件匹配成功的自动化配置;negativeMatches中返回的是条件匹配不成功的自动化配置;unconditionalClasses无条件配置类。启动并暴露该端点后,可通过“http:/localhost:8080/actuator/conditions”测试访问。,10,2beans,该端点用来获取应用上下文中创建的所有Bean,启动并暴露该端点后,可通过“http:/localhost:8080/actuator/beans”测试访问。每个Bean中都包含以下几个信息:外层的key是Bean的名称;aliases是Bean的别名;scope是Bean的作用域;type是Bean的Java类型;resource是class文件的具体路径;dependencies是依赖的Bean名称。,11,3configprops,该端点用来获取应用中配置的属性信息报告,prefix属性代表了属性的配置前缀,properties代表了各个属性的名称和值,例如可以设置spring.http.encoding.charset=UTF-8。启动并暴露该端点后,可通过“http:/localhost:8080/actuator/configprops”测试访问。,12,4env,该端点与configprops端点不同,它用来获取应用所有可用的环境属性报告。包括:环境变量、JVM属性、应用的配置、命令行中的参数等内容。启动并暴露该端点后,可通过“http:/localhost:8080/actuator/env”测试访问。,13,5mappings,该端点用来返回所有Spring MVC的控制器映射关系报告。启动并暴露该端点后,可通过“http:/localhost:8080/actuator/mappings”测试访问。,14,6info,该端点用来返回一些应用自定义的信息。默认情况下,该端点只会返回一个空的json内容。我们可以在application.properties配置文件中通过info前缀来设置一些属性。比如:info.app.name=spring-boot-helloinfo.app.version=v1.0.0启动并暴露该端点后,可通过“http:/localhost:8080/actuator/info”测试访问。,15,13.1 端点的分类与测试,13.1.1 端点的开启与暴露13.1.2 应用配置端点的测试13.1.3 度量指标端点的测试13.1.4 操作控制端点的测试,16,13.1.3 度量指标端点的测试,通过度量指标端点可获取应用程序运行过程中用于监控的度量指标,比如:内存信息、线程信息、HTTP请求统计等。,17,1metrics,该端点用来返回当前应用的各类重要度量指标,比如:内存信息、线程信息、垃圾回收信息等。启动并暴露该端点后,可通过“http:/localhost:8080/actuator/metrics”测试访问。metrics端点可以提供应用运行状态的完整度量指标报告,这项功能非常的实用,但是对于监控系统中的各项监控功能,它们的监控内容、数据收集频率都有所不同,如果我们每次都通过全量获取报告的方式来收集,略显粗暴。所以,我们还可以通过/metrics/name接口来更细粒度的获取度量信息,比如我们可以通过访问/metrics/jvm.memory.used来获取当前JVM使用的内存数量。,18,2health,该端点用来获取应用的各类健康指标信息。在spring-boot-starter-actuator模块中自带实现了一些常用资源的健康指标检测器。启动并暴露该端点后,可通过“http:/localhost:8080/actuator/health”测试访问。结果中的“UP”表示健康,“DOWN”表示异常。可以在配置文件中,配置属性management.endpoint.health.show-details=always,将详细健康信息显示给所有用户。再次启动应用后,刷新http:/localhost:8080/actuator/health,显示健康指标详细信息。,19,3threaddump,该端点用来暴露程序运行中的线程信息。它使用java.lang.management.ThreadMXBean的dumpAllThreads方法来返回所有含有同步信息的活动线程详情。启动并暴露该端点后,可通过“http:/localhost:8080/actuator/threaddump”测试访问。,20,4scheduledtasks,该端点统计应用程序中调度的任务。启动并暴露该端点后,可通过“http:/localhost:8080/actuator/scheduledtasks”测试访问。,21,13.1 端点的分类与测试,13.1.1 端点的开启与暴露13.1.2 应用配置端点的测试13.1.3 度量指标端点的测试13.1.4 操作控制端点的测试,22,13.1.4 操作控制端点的测试,操作控制类端点拥有更强大的控制能力,如果使用它们,需要通过属性来配置开启。在原生端点中,只提供了一个用来关闭应用的端点:shutdown。可以通过如下配置开启它:management.endpoint.shutdown.enabled=true。,23,shutdown端点不支持get提交,不可以直接在浏览器上访问,所以我们这里可以使用Google Chrome的Postman REST Client测试。用post方式访问“http:/localhost:8080/actuator/shutdown”,测试效果如下图所示。,本章内容,24,13.1 端点的分类与测试13.2 自定义端点13.3 自定义HealthIndicator,13.2 自定义端点,Spring Boot提供了注解Endpoint供我们定义一个端点类,并在端点类的方法上使用ReadOperation注解来显示监控信息(对应Get请求),使用WriteOperation来动态更新监控信息(对应Post请求)。【例13-2】自定义端点。,25,【例13-2】,26,1创建基于Spring Data JPA和Spring Boot Actuator依赖的Web应用ch13_2创建基于Spring Data JPA和Spring Boot Actuator依赖的Web应用ch13_2。2修改pom.xml文件添加MySQL连接器依赖修改pom.xml文件添加MySQL连接器依赖。3配置数据源因为该实例是监控数据源信息,所以需要在配置文件application.properties中配置数据源,具体内容如下:#数据库地址spring.datasource.url=jdbc:mysql:/localhost:3306/springbootjpa?characterEncoding=utf8#数据库用户名spring.datasource.username=root#数据库密码spring.datasource.password=root#数据库驱动spring.datasource.driver-class-name=com.mysql.jdbc.Driver#输出的JSON字符串格式更美观 spring.jackson.serialization.indent-output=true,【例13-2】,27,4自定义端点创建名为com.ch.ch13_2.endPoint的包,并在该包中使用注解Endpoint自定义端点类DataSourceEndpoint。在该端点类中,使用ReadOperation注解来显示数据源信息,使用WriteOperation来动态更新数据源信息。,5暴露端点在配置文件application.properties中暴露端点,内容如下:#暴露所有端点,当然包括data-source,我们也可以只暴露data-source端点management.endpoints.web.exposure.include=*,6测试端点,28,首先,启动应用程序主类Ch132Application,然后通过“http:/localhost:8080/actuator/data-source”测试端点data-source,运行效果如左下图所示。,使用Google Chrome的Postman REST Client发送POST请求“http:/localhost:8080/actuator/data-source?max=20”,POST请求执行后,“http:/localhost:8080/actuator/data-source”测试端点data-source,运行效果如右上图所示。,本章内容,29,13.1 端点的分类与测试13.2 自定义端点13.3 自定义HealthIndicator,13.3 自定义HealthIndicator,当Spring Boot自带的HealthIndicator接口实现类不能满足我们的需求时,就需要自定义HealthIndicator接口实现类。自定义HealthIndicator接口实现类很简单,只需要实现HealthIndicator接口,并重写接口方法health,返回一个Health对象。【例13-3】自定义HealthIndicator。,30,1创建HealthIndicator接口实现类MyHealthIndicator,31,Componentpublic class MyHealthIndicator implements HealthIndicatorOverridepublic Health health()int errorCode=check();if(errorCode!=0)/down方法表示异常,withDetail方法添加任意多的异常信息return Health.down().withDetail(message,error:+errorCode).build();/up方法表示健康return Health.up().build();/*模拟返回一个错误状态*/private int check()return 1;,32,2将健康详细信息显示给所有用户 在配置文件application.properties中,配置将详细健康信息显示给所有用户。配置内容如下:#将详细健康信息显示给所有用户management.endpoint.health.show-details=always 3测试运行 health的对象名默认为类名去掉HealthIndicator后缀,并且首字母小写,因此该例的health对象名为my。启动应用程序主类Ch132Application,并通过“http:/localhost:8080/actuator/health/my”测试运行,效果如下图所示。,本章总结,主要介绍了Spring Boot的Actuator功能,并通过HTTP进行Spring Boot的应用监控和管理功能的测试。当Spring Boot自带的端点和HealthIndicator实现不能满足需要时,可以自定义端点和HealthIndicator实现。因此,本章还介绍了如何自定义端点和HealthIndicator实现。掌握如何通过HTTP进行Spring Boot的应用监控和管理功能。掌握如何自定义端点和HealthIndicator实现。,33,致谢,34,Thanks!,