
Spring Boot监控1、Spring Boot actuator它是Spring Boot 中提供了一个用于监控和管理自身应用信息的模块帮助我们及时发现应用程序故障1.初体验通过集成 actuator 可以将 Spring Boot 应用本身的一些信息通过 HTTP 或 JMX 的方式暴露出去可以让第三方的监控工具拉取这些信息进行信息的管理查看监控和告警。pom.xml添加starter依赖dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactIdversion2.3.12.RELEASE/version/dependencyyaml添加配置management:endpoints:# 默认开启端点enabled-by-default:trueweb:exposure:# 暴露所有端点include:*访问http://ip:port/项目路径/actuator内置端点概述iddescSensitiveauditevents显示当前应用程序的审计事件信息Yesbeans显示应用Spring Beans的完整列表Yescaches显示可用缓存信息Yesconditions显示自动装配类的状态及及应用信息Yesconfigprops显示所有 ConfigurationProperties 列表Yesenv显示 ConfigurableEnvironment 中的属性Yesflyway显示 Flyway 数据库迁移信息Yeshealth显示应用的健康信息未认证只显示status认证显示全部信息详情Noinfo显示任意的应用信息在资源文件写info.xxx即可Noliquibase展示Liquibase 数据库迁移Yesmetrics展示当前应用的 metrics 信息Yesmappings显示所有 RequestMapping 路径集列表Yesscheduledtasks显示应用程序中的计划任务Yessessions允许从Spring会话支持的会话存储中检索和删除用户会话。Yesshutdown允许应用以优雅的方式关闭默认情况下不启用Yesthreaddump执行一个线程dumpYeshttptrace显示HTTP跟踪信息默认显示最后100个HTTP请求 - 响应交换Yes2.端点的配置从Spring Boot 2.x开始我们需要手动的去启用和暴露端点。默认情况下除了/shutdown之外的所有端点都是可用的同时只有/health和/info端点是对外暴露的。暴露和排除端点management:endpoints:# 默认开启端点enabled-by-default:trueweb:exposure:# 暴露端点*表示所有已经开启的端点 也可以通过逗号分隔多个要暴露的端点include:*# 排除端点虽然开启端点但没有暴露无法访问exclude:beans开启指定端点management:endpoints:# 默认不开启端点只有/health和/info端点enabled-by-default:falseweb:exposure:# 暴露端点*表示所有已经开启的端点 也可以通过逗号分隔多个要暴露的端点include:*# 排除端点虽然开启端点但没有暴露无法访问exclude:beansendpoint:health:# 开启health端点 ,注意开启后还需要暴露端点enabled:truebeans:# beans虽然开启了但是被排除了没有暴露也无法访问enabled:true注1.Actuator中/shutdown端点比较敏感该端点默认是不可用的需要我们手动开启。2./shutdown端点仅接收POST请求3 自定义端点除了使用Actuator默认给予的端点外还可以自定义端点来满足自定义监控的要求。在 Actuator中加入端点只需要加入注解Endpoint 即可这个注解会同时提供JMX 监控和Web 监控。如果只想提供JMX监控可以使用注解JmxEndpoint; 如果只想提供 Web 监控可以使用注解WebEndpoint。编码Component//id 自定义端点的唯一标识Endpoint(iddbcheck)publicclassDatabaseConnectionEndpoint{Value(${spring.datasource.driver-class-name})privateStringdriverClassName;Value(${spring.datasource.url})privateStringurl;Value(${spring.datasource.username})privateStringusername;Value(${spring.datasource.password})privateStringpassword;//一个端点只能存在一个ReadOperation标准的方法// 它表示HTTP的get请求ReadOperationpublicMapString,ObjecttestConnectDatabase(){System.out.println(DatabaseConnectionEndpoint.testConnectDatabase);MapString,ObjectmapnewHashMap();Connectionconnnull;try{Class.forName(driverClassName);connDriverManager.getConnection(url,username,password);map.put(success,true);map.put(message,测试数据库连接成功);}catch(Exceptione){map.put(success,false);map.put(message,e.getMessage());}finally{if(conn!null){try{conn.close();}catch(SQLExceptionthrowables){throwables.printStackTrace();}}}returnmap;}}配置相关参数spring:datasource:driver-class-Name:com.mysql.jdbc.Driverurl:jdbc:mysql://localhost:3306?useUnicodetruecharacterEncodingutf-8useSSLfalseusername:rootpassword:root注1.一个Endpint中只能定义一个ReadOperation注解2.除了ReadOperation外还可以定义WriteOperation对应POST请求和DeleteOperation对应DELETE请求4 自定义HealthIndicatorhealth端点用来显示程序的健康信息。health端点在默认情况下 仅显示status: UP。 如需显示详细信息 可以做如下配置management:endpoint:health:enabled:true# 显示health端点的详细信息show-details:always再次访问/health端点可以看到如下结果可以看到健康指示器下面多出来的两个健康指标分别为diskSpace磁盘空间和ping检查。{status:UP,components:{diskSpace:{status:UP,details:{total:329034756096,free:45609562112,threshold:10485760,exists:true}},ping:{status:UP}}}如果内置的健康指标项无法满足需要我们可以自定义健康指标项。例如我们现在需要监测服务器是否可以访问万维网 (World wide Webwww)就可以自定义健康指标。ComponentpublicclassWwwHealthIndicatorextendsAbstractHealthIndicator{privatefinalstaticStringBAIDU_HOSTwww.baidu.com;privatefinalstaticintTIME_OUT3000;OverrideprotectedvoiddoHealthCheck(Health.Builderbuilder)throwsException{if(ping()){builder.withDetail(message,当前服务可以访问万维网).up();}else{builder.withDetail(message,当前服务不可以访问万维网).outOfService();}}privatebooleanping(){try{returnInetAddress.getByName(BAIDU_HOST).isReachable(TIME_OUT);}catch(IOExceptione){returnfalse;}}}2、Spring Boot Admin目前所有的端点信息不直观可以通过 Spring Boot Admin 来对 actuator 信息进行管理。Spring Boot Admin 用于管理和监控 Spring Boot 应用程序的运行状态。在 Spring Boot 项目中可以通过集成 Spring Boot Admin Client 向 Spring Boot Admin Server 进行注册这样我们就可以在Spring Boot Admin Server 统一管理 Spring Boot 应用。Spring Boot Admin 主要功能点显示应用程序的监控状态应用程序上下线监控查看 JVM 和线程信息可视化的查看日志及下载日志文件动态切换日志级别HTTP 请求信息跟踪等实用功能将 actuator 提供的数据进行可视化开发Admin服务端新建一个项目pom.xml引入spring-boot-admin-starter-server依赖dependencygroupIdde.codecentric/groupIdartifactIdspring-boot-admin-starter-server/artifactId!-- 注意版本要和springboot的版本兼容--version2.3.1/version/dependency启动类上添加EnableAdminServer注解SpringBootApplicationEnableAdminServerpublicclassAdminApplication{publicstaticvoidmain(String[]args){SpringApplication.run(AdminApplication.class,args);}}为避免和其它项目冲突服务端口配置为8081server:port:8081访问http://localhost:8081配置Admin客户端Spring Boot actuator项目项目中增加spring-boot-admin-starter-client依赖dependencygroupIdde.codecentric/groupIdartifactIdspring-boot-admin-starter-client/artifactIdversion2.3.1/version/dependencyyaml中配置admin服务端的地址spring:boot:admin:client:url:http://localhost:8081instance:#使用ip注册prefer-ip:true访问http://localhost:8081