Spring Boot Actuator埋点和监控
Spring Boot Actuator是Spring Boot提供的一个监控和管理应用程序的扩展功能,它包含了很多的HTTP端点(Endpoints),可以用于获取应用程序的各种信息和管理应用程序。Actuator可以把应用程序信息以JSON的方式暴露出来,还可以使用Spring Boot自带的监控器(Metrics)监控应用程序的各项指标。
使用Actuator并暴露端点
为了使用Actuator,我们需要在Maven或Gradle中添加以下依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
}
在配置文件中,我们需要添加以下配置来启用Actuator的所有端点:
management.endpoints.web.exposure.include=*
Actuator默认只开放了几个敏感端点,所以我们需要在配置文件中指定需要开放的端点。上述配置指定了开放所有端点。
然后我们就可以通过HTTP访问Actuator已经暴露的端点了。
例如下面的URL可以获取Actuator的健康检查端点,
http://localhost:8080/actuator/health
Actuator 端点也可通过配置文件的方式进行自定义。比如,我们需要在我们的应用中加入一个 /customEndpoint
的端点,可以进行如下的配置:
management.endpoints.web.exposure.include=health,info,customEndpoint
management.endpoints.customEndpoint.id=myEndpoint
这样,我们就可以找到 http://localhost:8080/actuator/myEndpoint
,并以JSON形式获取我们自定义的自述信息。
Actuator中的监控辅助器
Spring Boot Actuator不仅仅可以提供一些常用的HTTP端点,还提供了一些监控辅助器(Metrics),用来监控应用程序的各项指标。通常,我们可以通过这些监控辅助器来观察应用程序的运行状况,并提供针对性的优化。
内建监控辅助器包括以下几种:
- Counter(计数器): 统计数量,增加或减少
- Gauge(仪表): 测量值,可以是任何类型
- Timer(定时器): 统计持续时间和流速等
- DistributionSummary(分布摘要): 统计样本的总数和总数的分布
我们可以通过在pom.xml
或build.gradle
中加入以下依赖来使用Actuator的监控辅助器。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.5.9</version>
</dependency>
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-registry-prometheus:1.5.9'
这里的micrometer-registry-prometheus
是监控辅助器Micrometer
的一个配套扩展。该扩展将我们的应用程序所监控到的各项指标以Prometheus
的格式发布,方便Prometheus进行采集和监控。
相关示例
示例1:计数器
在默认情况下,Actuator的计数器会追踪212个不同的计数器(key)的数量,其中常见的计数器(key)包括http.server.requests 和 jdbc.connections.active等。
我们可以通过新增 CounterService
自定义一个计数器(key),比如记录系统的总请求数。
@Service
public class RequestCountService {
private final CounterService counterService;
public RequestCountService(CounterService counterService) {
this.counterService = counterService;
}
public void incrementRequestCount() {
this.counterService.increment("myapp.total.requests");
}
}
然后在Controller中调用该服务,记录系统的请求数。
@RestController
public class HomeController {
private final RequestCountService requestCountService;
public HomeController(RequestCountService requestCountService) {
this.requestCountService = requestCountService;
}
@RequestMapping("/")
public String index() {
requestCountService.incrementRequestCount();
return "Welcome to my app!";
}
}
现在您可以通过访问端点http://localhost:8080/actuator/metrics/myapp.total.requests
来获取 myapp.total.requests
计数器的值。
示例2:仪表
我们可以使用GaugeService
自定义仪表组件,并在Controller中调用该组件。例如,我们需要跟踪当前系统的内存使用率:
@Service
public class MemoryUsageService {
private static final String MEMORY_USED = "memory.used";
private static final String MEMORY_TOTAL = "memory.total";
private final GaugeService gaugeService;
public MemoryUsageService(GaugeService gaugeService) {
this.gaugeService = gaugeService;
}
public void recordMemoryUsage() {
Runtime rt = Runtime.getRuntime();
double memUsed = (rt.totalMemory() - rt.freeMemory()) / (1024.0 * 1024.0);
double memTotal = rt.maxMemory() / (1024.0 * 1024.0);
gaugeService.submit(MEMORY_USED, memUsed);
gaugeService.submit(MEMORY_TOTAL, memTotal);
}
}
Controller中实现如下:
@RestController
public class HomeController {
private final MemoryUsageService memoryUsageService;
public HomeController(MemoryUsageService memoryUsageService) {
this.memoryUsageService = memoryUsageService;
}
@RequestMapping("/")
public String index() {
memoryUsageService.recordMemoryUsage();
return "Memory usage recorded!";
}
}
这样,我们就可以通过访问端点http://localhost:8080/actuator/metrics/memory.used
和http://localhost:8080/actuator/metrics/memory.total
, 分别获取系统内存使用率和总内存。
结论
Actuator提供了一个非常全面和灵活的方式来监视和管理Spring Boot应用程序。在这篇文章中,我们介绍了Actuator的主要特点,以及如何使用Actuator来自定义端点和监控辅助器。通过示例,我们也展示了如何使用Actuator来跟踪自定义的指标。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot Actuator埋点和监控及简单使用 - Python技术站