Spring Boot actuator服务监控与管理
Actuator是SpringBoot中一个很强大的功能,它自带的监控功能可以对程序内部运行情况监控和管理,通过restful api请求进行监管、审计、收集系统的运行情况,如应用的监控状况、Bean加载情况、环境变量、日志信息、线程信息等。
Actuator还能与外部应用监控系统进行整合,比如Prometheus, Graphite, DataDog, Influx, Wavefront, New Relic等。这些应用监控系统提供了仪表盘、图标、分析和告警等功能,可以让你通过统一的接口来轻松的实现应用监控和管理你。
Spring Boot2.0及以上的版本中,默认只开放了info、health两个端点(其内部内置了非常多的端点,如(health、info、beans、httptrace、shutdown)等等),如果需要开放其他端点需要手动配置
配置如下:
开启所有端点
management.endpoints.web.exposure.include=*
# 显示详细的 health 信息
management.endpoint.health.show-details=always
# 打开 shutdown 端点,通过 POST 访问该端点可以关闭应用
management.endpoint.shutdown.enabled=true
然后在pom.xml文件中添加配置信息,info端口才会有信息,配置信息如下
env 端点,他的作用是显示 ConfigurableEnvironment 中的属性,应用获取环境信息,包括:环境变量、JVM属性、应用的配置配置、命令行中的参数 localhost:8080/actuator/env
metrics 端点,提供了一些有用的应用程序指标(JVM 内存使用、系统CPU使用等),如内存的使用情况、HTTP请求统计以及外部资源指标等。
查看所有度量指标
/metrics:该端点用来返回当前应用的各类重要度量指标,比如:内存信息、线程信息以及垃圾回收信息等信息。可以通过actuator/metrics/{name} 来获取详细信息,例如/actuator/metrics/jvm.buffer.memory.usedlocalhost:8080/actuator/metrics
端点列表
安全建议
在使用Actuator时,一些不正确的使用或者一些不经意的疏忽,会引起严重的信息泄露等安全隐患事故。在代码审查的时候如果是springboot项目并且有actuator依赖的时候,应该需要对安全依赖及配置进行检查。也可作为一条规则添加到黑盒扫描器中进一步把控。其安全的做法是一定要引入security依赖,打开安全限制并进行身份验证。同时设置单独的Actuator管理端口并配置不对外网开放,这样操作基本上就没什么多大问题了。
编写自定义HealthIndicators
你可以注册实现HealthIndicator接口的Spring beans来提供自定义健康信息。你需要实现health()方法,并返回一个Health响应,该响应需要包含一个status和其他用于展示的详情。
注 对于给定HealthIndicator的标识是bean name去掉HealthIndicator后缀剩下的部分。在以上示例中,可以在my的实体中获取健康信息。
除Spring Boot预定义的Status类型,Health也可以返回一个代表新的系统状态的自定义Status。在这种情况下,你需要提供一个HealthAggregator接口的自定义实现,或使用management.health.status.order属性配置默认实现。
例如,假设一个新的,代码为FATAL的Status被用于你的一个HealthIndicator实现中。为了配置严重性级别,你需要将以下配置添加到application属性文件中:
management.health.status.order=DOWN, OUT_OF_SERVICE, UNKNOWN, UP
如果使用HTTP访问health端点,你可能想要注册自定义的status,并使用HealthMvcEndpoint进行映射。例如,你可以将FATAL映射为HttpStatus.SERVICE_UNAVAILABLE。
