引言
在微服务架构中,我们把单块系统拆分成多个服务。在部署时,一个服务很可能分布在不同的主机,甚至是不同的机房。随着服务的不断增多,服务间相互调用、相互依赖。为了掌握服务的状态及服务所在主机的情况,就显得尤为重要!
Spring Boot Actuator
spring boot actuator为我们暴露很多端点(endpoints),可以用来获取环境属性、线程信息、健康状况等。下表列出了常用的端点。
路径 | 描述 |
---|---|
/health | 显示应用程序的状态 |
/metrics | 显示内存、GC、线程、堆栈等信息 |
/trace | 显示最近100条请求详细信息 |
/mappings | 显示所有通过@RequestMapping配置的路径 |
/env | 显示全部环境属性,包括profiles、systemProperties、systemEnvironment、applicationConfig |
/dump | 显示线程快照 |
/autoconfig | 显示自动配置的生效及未生效列表,对了解bean的加载很有帮助 |
/beans | 查看程序中所有的bean |
/shutdown | 关闭应用程序,默认是不可用的,可以通过endpoints.shutdown.enabled=true开启 |
如何开启
引入spring-boot-startr-actuator后自动开启。
org.springframework.boot
spring-boot-starter-actuator
虽然很简单,如果大家不方便自己搭建,可以通过git下载一下例子
git clone https://github.com/feelgood3000/actuator.git
下载后运行ActuatorApplication的main()方法即可。
在浏览器打开如下地址:http://localhost:8080/metrics,返回内容如下:
{
"mem": 446758,
"mem.free": 316977,
"processors": 4,
"instance.uptime": 39453,
"uptime": 46245,
"systemload.average": 3.32568359375,
"heap.committed": 391680,
"heap.init": 131072,
"heap.used": 74702,
"heap": 1864192,
"nonheap.committed": 55872,
"nonheap.init": 2496,
"nonheap.used": 55079,
"nonheap": 0,
"threads.peak": 25,
"threads.daemon": 21,
"threads.totalStarted": 28,
"threads": 23,
"classes": 7793,
"classes.loaded": 7793,
"classes.unloaded": 0,
"gc.ps_scavenge.count": 10,
"gc.ps_scavenge.time": 170,
"gc.ps_marksweep.count": 2,
"gc.ps_marksweep.time": 130,
"httpsessions.max": -1,
"httpsessions.active": 0,
"datasource.primary.active": 0,
"datasource.primary.usage": 0
}
其他可以自己看一下,返回内容通过字段就可以知道含义。
配置
端点开关
支持对每个端点进行开关,配置为endpoints.[endpointName].enabled=true,endpointName为端点的名字,比如我们想禁用info端点,在application.properties中添加如下内容即可:
endpoints.info.enabled=false
如果我们只想开启其中一两个端点,我们可以先把所有端点禁用,再单独配置要开启的端点。
endpoints.enabled=false
endpoints.info.enabled=true
端点端口号
有时为了安全考虑,我们不想跟服务占用同一个端口,可以单独给actuator配置端口。
server.port=8080
management.port=8888
自定义路径
我们也可以修改默认的路径,来起到安全的目的。
配置格式为endpoints.[endpointsName].id=[path]
比如我们想把metrics的访问路径从http://localhost:8080/metrics修改为http://localhost:8080/feelgood3000,则配置为:
endpoints.metrics.id=feelgood3000
添加前缀
我们可以通过配置修改访问endpoints的路径。
management.context-path=/manage
添加如上配置后,所有端点的路径从原来的http://localhost:8080/endpointName,改为http://localhost:8080/manage/endpointName了。