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日

相关文章

  • 使用mongoose和bcrypt实现用户密码加密的示例

    使用mongoose和bcrypt可以很方便地实现用户密码加密和解密。下面是实现的具体步骤: 在Node.js项目中安装mongoose和bcrypt 可以通过npm命令在项目中安装mongoose和bcrypt: npm install mongoose bcrypt –save 创建一个mongoose模型 创建一个user模型来存储用户的信息,包括用…

    人工智能概论 2023年5月25日
    00
  • node.js连接mongoDB数据库 快速搭建自己的web服务

    node.js连接mongoDB数据库快速搭建自己的web服务,其步骤具体如下: 步骤一:安装node.js和mongoDB 首先,需要安装node.js和mongoDB。可以从官网下载对应的安装程序,网址分别是:https://nodejs.org/ 和 https://www.mongodb.com/。 步骤二:安装依赖模块 在node.js中,可以使用…

    人工智能概论 2023年5月25日
    00
  • python目标检测IOU的概念与示例

    下面我将为您详细讲解“python目标检测IOU的概念与示例”的完整攻略。 什么是IOU 在目标检测中,IOU(Intersection Over Union)是一种度量两个边界框重叠度的指标。IOU的计算方法如下: IOU = Intersection / Union 其中,Intersection是两个边界框的交集面积,Union是两个边界框的并集面积。…

    人工智能概论 2023年5月25日
    00
  • flask和vue前后端分离项目部署的示例代码

    下面我将为你详细讲解Flask和Vue前后端分离项目部署的攻略,分为以下几个步骤: 1. 开发前的准备工作 在开始开发前,我们需要准备好以下工具和环境: Python环境。推荐安装Python 3.6以上的版本。 Node.js环境。推荐安装8.11以上的版本。 Vue CLI。可使用npm install -g @vue/cli命令进行安装。 MySQL数…

    人工智能概论 2023年5月25日
    00
  • Java研发京东4面:事务隔离+乐观锁+HashMap+秒杀设计+微服务

    Java研发京东4面攻略 事务隔离 什么是事务隔离? 事务隔离是数据库系统为了保证数据并发性、一致性和完整性所采取的一种保护机制,它表示同一时刻不同的事务所获取的数据的访问权限。 事务隔离级别 在MySQL中,常用的事务隔离级别有4种:读未提交(read uncommitted)、读已提交(read committed)、可重复读(repeatable re…

    人工智能概览 2023年5月25日
    00
  • pytorch标签转onehot形式实例

    下面是详细讲解“pytorch标签转onehot形式实例”的完整攻略,包含两条示例说明。 什么是标签标注 标签标注就是将离散数据用数字标号来表示。比如,对于一个三分类问题,我们可能将标签分别表示为0,1,2,这就是一种标签标注方式。 为什么需要将标签转为onehot形式 在深度学习中,常常会有需要对数据进行编码的情况,特别是对于有序分类或连续性数据的编码,可…

    人工智能概论 2023年5月25日
    00
  • 如何更优雅地写python代码

    当我们在编写Python代码时,除了保证代码功能正确外,还要考虑代码的可读性和可维护性。优雅的Python代码可以让其他人更容易理解你的代码,也能提高代码的可维护性。下面是一些如何更优雅地写Python代码的攻略: 1. 编写简洁的代码 避免写冗长的代码,使用Pythonic的方式编写代码,能够提高代码的可读性。比如: 使用列表推导式或生成器表达式代替循环语…

    人工智能概论 2023年5月25日
    00
  • Docker Nginx容器和Tomcat容器实现负载均衡与动静分离操作

    下面是实现 Docker Nginx 容器和 Tomcat 容器实现负载均衡与动静分离操作的完整攻略。 1. 确保环境准备就绪 在开始之前,我们需要确保一些环境准备就绪: 已安装 Docker。 在本地创建了 Tomcat 镜像以及 Nginx 镜像。 如果您不熟悉上面的准备工作,请参考 Docker 初学者指南。 2. 编写 Docker Compose …

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