我们本节要实现的是Java服务级监控用于对每个应用占用的内存、线程池的线程数量、restful调用数量和响应时间、JVM状态、GC信息等进行监控,并可将指标信息同步至Prometheus中集中展示和报警。

首先我们先了解下什么是actuator?

Spring Boot Actuator 模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP 跟踪等,帮助我们监控和管理Spring Boot 应用。

Spring Boot Actuator 做度量统计收集,使用Prometheus进行数据收集,Grafana进行数据展示,用于监控生成环境机器的性能指标和业务数据指标。一般,我们叫这样的操作为”埋点”。SpringBoot中的依赖spring-actuator中集成的度量统计API使用的框架是Micrometer,官网是Micrometer.io。在实践中发现了业务开发者滥用了Micrometer的度量类型Counter,导致无论什么情况下都只使用计数统计的功能。这篇文章就是基于Micrometer分析其他的度量类型API的作用和适用场景。

OK,如果要使用 SpringBoot Actuator提供的监控功能,首先我们要先在Spring Boot程序中加入依赖。我们这里采用Spring Boot2.X的版本。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

只要加上了这个依赖,SpringBoot 在运行时就会自动放开/actuator/health和/actuator/info这两个endpoint,我们就可以通过这两个 endpoint 查看当前 SpringBoot 运行的情况。

在这里插入图片描述

我这里用一个之前我做测试的SpringBoot项目。

在这里插入图片描述

浏览器访问 http://localhost:8080/actuator ,这里由于我是本地启动的8080的服务,大家可以根据你们自己的服务的IP地址➕端口进行访问。

在这里插入图片描述

默认只暴露 health 端点,如果想要看到更多,可以配置更多端点。application.yml或者application.properties中进行配置。

#暴露指定端点
management.endpoints.web.exposure.include=env,info,config,health

#暴露全部
management.endpoints.web.exposure.include=*

在这里插入图片描述

在这里插入图片描述

拼上health我们来看下服务的运行情况,http://localhost:8080/actuator/health

在这里插入图片描述

health 端点中常见的状态值及其含义:

  • “UP”: 应用程序健康状态良好,所有依赖项都处于可用状态。
  • “DOWN”: 应用程序健康状态不佳,至少有一个依赖项处于不可用状态。
  • “OUT_OF_SERVICE”: 应用程序无法提供服务,所有依赖项都处于离线状态。
  • “UNKNOWN”: 应用程序健康状态未知,无法确定依赖项的状态。

在这里插入图片描述

当我们有自研组件的不满足的情况下,需要自定义,参考实现 DataSourceHealthIndicator

/**
 * @author lixiang
 * @date 2023/7/17 17:52
 */
@Component
public class CustomHealthIndicator extends AbstractHealthIndicator {

    /**
     * 这个方法写检测的逻辑,测试中间件服务是否正常启动
     * @param builder
     * @throws Exception
     */
    @Override
    protected void doHealthCheck(Health.Builder builder) throws Exception {
        //builder.down().withDetail("custom","自定义中间件");
        builder.up().withDetail("custom","自定义中间件");
    }
}

在这里插入图片描述

OK。关于SpringBoot整合Actuator我们先介绍到这里,主要是我们用health端点去查看服务的运行情况,下面我们来将服务整合到Promethus上。

首先,加入依赖包。

<!--整合prometheus-->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

重启服务,访问接口: http://localhost:8080/actuator,会发现prometheus的端点。

在这里插入图片描述

访问: http://localhost:8080/actuator/prometheus,我们会看到prometheus的格式数据。

在这里插入图片描述

然后将SpringBoot程序打包,上传到linux服务器启动。

mvn clean package

守护进程启动 nohup java -jar xxxx.jar &

在这里插入图片描述

prometheus整合配置,编辑文件 prometheus.yml

  - job_name: "order-service"
    scrape_interval: 15s
    scrape_timeout: 10s
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['192.168.140.134:8080']

热更新配置 curl -X POST http://localhost:9090/-/reload

在这里插入图片描述
在这里插入图片描述

好啦,关于Promethus监控SpringBoot微服务应用配置实战,就到这里啦,记得三连➕关注哦!

在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐