spring-boot-actuator模块提供了一个监控和管理生产环境的模块,可以使用http、jmx、ssh、telnet等拉管理和监控应用。审计(Auditing)、健康(health)、数据采集(metrics gathering)会自动加入到应用里面。
![]()
首先,写一个最基本的spring boot项目。基于Maven的项目添加‘starter’依赖
1  | <dependency>  | 
启动信息里面可以看到这样一些日志
1  | 2017-9-20 09:57:40.953 INFO 4064 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/trace],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()  | 
具体的描述:
| 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 | 
health
比如:http://localhost:7231/health
你可以得到结果
1  | {  | 
在应用配置加上
1  | endpoints.health.sensitive=false  | 
在次访问http://localhost:7231/health
1  | {  | 
可以检查的其他一些情况的健康信息。下面的HealthIndicators会被Spring Boot自动配置(在合适的时候):
| 名称 | 描述 | 
|---|---|
| DiskSpaceHealthIndicator | 低磁盘空间检测 | 
| DataSourceHealthIndicator | 检查是否能从DataSource获取连接 | 
| MongoHealthIndicator | 检查一个Mongo数据库是否可用(up) | 
| RabbitHealthIndicator | 检查一个Rabbit服务器是否可用(up) | 
| RedisHealthIndicator | 检查一个Redis服务器是否可用(up) | 
| SolrHealthIndicator | 检查一个Solr服务器是否可用(up) | 
自定义当然也可以,你可以注册实现了HealthIndicator接口的Spring beans,Health响应需要包含一个status和可选的用于展示的详情。
1  | import org.springframework.boot.actuate.health.HealthIndicator;  | 
trace
访问http://localhost:7231/trace可以看到结果,默认为最新的一些HTTP请求
1  | [  | 
看看 InMemoryTraceRepository,默认是100个事件,如果需要可以定义自己的 InMemoryTraceRepository 实例。如果需要,你可以创建自己的替代 TraceRepository 实现。
1  | /**  | 
如果需要追踪其他的事件,你可以将一个TraceRepository注入到你的Spring Beans中。
info
当执行 http://localhost:7231/info 的时候,结果什么没有
但是,单加入加入一些配置
1  | info.app.name=ecs  | 
执行/info
1  | {  | 
/info 是用来在构建的时候,自动扩展属性的。对于Maven项目,可以通过 @..@ 占位符引用Maven的’project properties’。
env
通过/env可以访问环境信息
1  | {  | 
通过/env/{name:.*}可以访问特定的环境属性
比如:
1  | http://localhost:7231/env/java.vm.name  | 
metrics
/metrics显示了应用当前的指标信息
1  | {  | 
此处我们可以看到基本的 memory , heap , class loading , processor 和 thread pool 信息,连同一些HTTP指标。在该实例
中,可以使用 /metrics/{name:.*} 访问单个属性。
- 系统内存总量(mem),单位:Kb
 - 空闲内存数量(mem.free),单位:Kb
 - 处理器数量(processors)
 - 系统正常运行时间(uptime),单位:毫秒
 - 应用上下文(就是一个应用实例)正常运行时间(instance.uptime),单位:毫秒
 - 系统平均负载(systemload.average)
 - 堆信息(heap,heap.committed,heap.init,heap.used),单位:Kb
 - 线程信息(threads,thread.peak,thead.daemon)
 - 类加载信息(classes,classes.loaded,classes.unloaded)
 - 垃圾收集信息(gc.xxx.count, gc.xxx.time)
 - 最大连接数(datasource.xxx.max)
 - 最小连接数(datasource.xxx.min)
 - 活动连接数(datasource.xxx.active)
 - 连接池的使用情况(datasource.xxx.usage)
 
dump
/dump执行一个线程转储,这是一个例子。
1  | [  | 
mappings
/mappings显示一个所有@RequestMapping路径的整理列表,一切尽在眼中。
1  | {  | 
autoconfig
autoconfig显示一个auto-configuration的报告,该报告展示所有auto-configuration候选者及它们被应用或未被应用的原因
1  | {  | 
configprops
/configprops显示一个所有@ConfigurationProperties的整理列表.
1  | {  | 
https://segmentfault.com/a/1190000004318360?_ea=568366
https://segmentfault.com/u/codecraft
更多的细节和探索,需要自己看看源码和spring boot的官方文档

