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的官方文档