一、Actuator是什么
Actuator是SpringBoot中一个很强大的功能,它自带的监控功能可以对程序内部运行情况监控和管理,通过restful api请求进行监管、审计、收集系统的运行情况,如应用的监控状况、Bean加载情况、环境变量、日志信息、线程信息等。
Actuator还能与外部应用监控系统进行整合,比如Prometheus, Graphite, DataDog, Influx, Wavefront, New Relic等。这些应用监控系统提供了仪表盘、图标、分析和告警等功能,可以让你通过统一的接口来轻松的实现应用监控和管理你。
二、如何配置Actuator
Maven 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
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端口才会有信息,配置信息如下
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 开启info端口获取maven中的属性 -->
<executions>
<execution>
<goals>
<goal>build-info</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
env 端点,他的作用是显示 ConfigurableEnvironment 中的属性,应用获取环境信息,包括:环境变量、JVM属性、应用的配置配置、命令行中的参数 localhost:8080/actuator/env
mapping端点,url与控制器映射关系信息 localhost:8080/actuator/info
{
"build": {
"version": "0.0.1-SNAPSHOT",
"artifact": "springboot-actuator",
"name": "springboot-actuator",
"group": "com.example",
"time": "2020-05-06T04:012:36.793Z"
}
}
metrics 端点,提供了一些有用的应用程序指标(JVM 内存使用、系统CPU使用等),如内存的使用情况、HTTP请求统计以及外部资源指标等。
查看所有度量指标
/metrics:该端点用来返回当前应用的各类重要度量指标,比如:内存信息、线程信息以及垃圾回收信息等信息。可以通过actuator/metrics/{name} 来获取详细信息,例如/actuator/metrics/jvm.buffer.memory.usedlocalhost:8080/actuator/metrics
运行时改变特定日志日志等级
通过 POST 方式请求http://localhost:8080/actuator/loggers/(name),传以下参数
{
"configuredLevel": "DEBUG"
}
端点列表
获取endponit信息
127.0.0.1:8080/actuator/endpointName
安全建议
在使用Actuator时,一些不正确的使用或者一些不经意的疏忽,会引起严重的信息泄露等安全隐患事故。在代码审查的时候如果是springboot项目并且有actuator依赖的时候,应该需要对安全依赖及配置进行检查。也可作为一条规则添加到黑盒扫描器中进一步把控。其安全的做法是一定要引入security依赖,打开安全限制并进行身份验证。同时设置单独的Actuator管理端口并配置不对外网开放,这样操作基本上就没什么多大问题了。
原创声明:本文为【Java学习提升】原创博文,转载请注明出处。
本文来源于公众号:【Java学习提升】 专注于Java领域技术分享,Java知识体系学习、分享面试经验,让我们结伴而行,共同成长!