SpringBoot Actuator埋点和监控及简单使用

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.xmlbuild.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.usedhttp://localhost:8080/actuator/metrics/memory.total, 分别获取系统内存使用率和总内存。

结论

Actuator提供了一个非常全面和灵活的方式来监视和管理Spring Boot应用程序。在这篇文章中,我们介绍了Actuator的主要特点,以及如何使用Actuator来自定义端点和监控辅助器。通过示例,我们也展示了如何使用Actuator来跟踪自定义的指标。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot Actuator埋点和监控及简单使用 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • 一文读懂Spring Cloud-Hystrix

    一文读懂Spring Cloud-Hystrix 简介 Spring Cloud-Hystrix 是 Spring Cloud 组件中的一个,用于帮助开发人员构建分布式系统中服务的容错性和可用性。当一个服务调用其他服务时,如果被调用的服务暂时不可用或者繁忙,调用方服务可以根据Hystrix的配置进行服务降级、服务熔断、服务限流等处理,以保证服务的可用性。 H…

    人工智能概览 2023年5月25日
    00
  • Nginx日志管理介绍

    Nginx是一个流行的高性能的HTTP服务器和反向代理服务器,它可以用来提供Web服务,也可以用来进行负载均衡和连接池等。在使用Nginx时,日志管理是必不可少的一项任务,本文将对Nginx日志管理进行介绍。 1. Nginx日志格式 在Nginx中,日志格式是由log_format指令定义的,例如: http { log_format main ‘$rem…

    人工智能概览 2023年5月25日
    00
  • 关于Django ForeignKey 反向查询中filter和_set的效率对比详解

    标题:关于Django ForeignKey 反向查询中filter和_set的效率对比详解 介绍 在Django中,ForeignKey是一种非常常见的关系,其反向查询也是经常被用到的。在进行反向查询时,通常会使用filter或者_set来获取相关的数据对象,但是这两种方法哪一种更高效呢?本攻略将详细讲解这个问题。 什么是filter和_set filte…

    人工智能概览 2023年5月25日
    00
  • django 使用 request 获取浏览器发送的参数示例代码

    下面是一份关于”Django 使用 request 获取浏览器发送的参数示例代码”的攻略: 步骤一:浏览器输入 URL 地址 在浏览器中输入 URL:http://example.com/mysite/myview/?name=John&age=30 步骤二:urls.py 文件中设置 URL 映射规则 在 urls.py 文件中设置 URL 的映射…

    人工智能概论 2023年5月24日
    00
  • Linux下将Python的Django项目部署到Apache服务器

    下面就是将Python的Django项目部署到Apache服务器的完整攻略。 准备工作 安装Apache服务器:在Linux终端上使用下面的命令安装Apache2: sudo apt-get update sudo apt-get install apache2 安装mod_wsgi:在Linux终端上使用下面的命令安装mod_wsgi: sudo apt-…

    人工智能概览 2023年5月25日
    00
  • 详解opencv Python特征检测及K-最近邻匹配

    详解OpenCV Python特征检测及K-最近邻匹配 简介 本文旨在详细讲解如何使用OpenCV Python进行特征检测,并使用K-最近邻算法进行特征匹配。特别适用于计算机视觉和机器学习的初学者。 准备工作 在开始学习前,需要先安装好OpenCV库和Python环境。可以参考官网进行安装,或者使用pip进行快速安装。pip install opencv-…

    人工智能概览 2023年5月25日
    00
  • django中ImageField的使用详解

    下面是关于“Django 中 ImageField 的使用详解”的完整攻略: 1. ImageField 简介 Django 中的 ImageField 是一个用来存储图片的字段,它使用 Pillow 库实现对于图片的操作和存储。可以用来上传图片,处理图片,同时也方便图片管理。 2. 创建 ImageField 为了在模型中使用 ImageField,我们需…

    人工智能概览 2023年5月25日
    00
  • Python使用pywebview开发桌面应用的全过程

    下面我将详细讲解使用pywebview开发Python桌面应用的全过程。 一、pywebview概述 pywebview是一个Python模块,可以用于创建本地桌面GUI应用程序,这些应用程序使用web技术构建,如HTML,CSS和JavaScript。 pywebview的主要特点包括: 仅支持Python 3.x 支持多个项目,包括Qt,GTK3和Coc…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部