您现在的位置:首页 >> 家居资讯

最佳实践|Spring Boot 领域如何快速接入 Prometheus 监控

发布时间:2025/12/11 12:17    来源:新昌家居装修网

此之前卫生保健情况的发生,避免显现出对金融业务的影响。当情况发生后,一个网站无需对情况顺利已完并成明知和处理方式。通过对相异受控这两项以及历史资料的量化,尽也许找寻并解决其本质情况。

终端工序概览

月里,我们讲讲为当中心调动在 Kubernetes 战略性上的 Spring Boot 不显消费者服务量化方式中如何顺利已完并成 Prometheus 终端。针对 Spring Boot 量化方式中,新社区发放了内容可即用的 Spring Boot Actuator 框架,便利 Java 程序员顺利已完并成code埋点和受控资料利用、转换器。从 Spring Boot 2.0 开始,Actuator 将底层改为 Micrometer,发放了比较超强、比较灵活性的受控能力。Micrometer 是一个受控门面,可以叠加并成受控圈内的 Slf4j 。借助 Micrometer,量化方式中尽也许对接各种受控种系统,例如:AppOptics,Datadog,Elastic,InfluxDB 等,当然,也还包括我们今天所参阅的 Prometheus。

Micrometer 在将 Prometheus 这两项对打来 Java 量化方式中的这两项时,全力支持量化方式中程序员用三个各种类型的自然语言来映射:

MicroMeter 当中的 Counter 互换于 Prometheus 当中的 Counter,用来阐述一个单调减去的表达式,如某个连接器的访问期间最少,CPU命当中/访问期间总最少等。Timer 在逻辑上则有了 Counter,即如果适用 Timer 挖掘出每个连接器的响应时间段,或许也会挖掘出访问期间最少。故无需为某个连接器同时均须 Timer 与 Counter 两个这两项 MicroMeter 当中的 Gauge 互换于 Prometheus 当中的 Gauge,用来阐述在一个范围内过后波动的表达式,如 CPU 适用百余人,多线程出水口任务配置文件数等。 MicroMeter 当中的 Timer 互换于 Prometheus 当中的 Histogram,用来阐述与时间段关的的资料,如某个连接器 RT 时间段分布区等等。 Micrometer 当中的 DistributionSummary 互换 Prometheus 当中的 Summary ,与 Histogram 类似,Summary 也是用作人口统计资料分布区的,但由于资料的分布区状况是在消费者端数倍数已完并成后再传布 Prometheus 顺利已完并成磁盘,因此 Summary 的结果无法在多个机器两者之间顺利已完并成资料聚合,无法人口统计均局镜像的资料分布区,适用痛快有一定在实践中。

当我们无需把调动在 Kubernetes 战略性当中的 Spring Boot 量化方式中终端到 Prometheus 时,无需按照code埋点->调动量化方式中->消费者服务辨认出这个工序来顺利已完并成。

首先,我们无需在code当中过渡到 Spring Boot Actuator 关的 maven 忽视,并对我们无需受控的资料顺利已完并成提出申请,或对 Controller 内的方式中打上响应的注解。

其次,我们将埋点后的量化方式中调动在 Kubernetes 当中,并向 Prometheus 提出申请向量化方式中拉取受控资料的端点(也就是 Prometheus 消费者服务辨认出)。阿里幽 Prometheus 消费者服务发放了适用 ServiceMonitor CRD 顺利已完并成消费者服务辨认出的方式中。

仍要在目的量化方式中的受控挖掘出端点被 Prometheus 获得并成功辨认出后,我们就可以开始在 Grafana 右边的设计资料源及都可的于上了。当然,我们同时也无需根据某些这两项这两项顺利已完并成互换的同步的设计。这些期望在阿里幽 Prometheus 追踪消费者服务都能很便利地符合。

终端工序大并成

月里,我们进入实战演练即场,这里挑选一个基于 Spring Boot & Spring Cloud Alibaba 紧密结合的幽原生不显消费者服务量化方式中()作为我们改装的孔径。

我们最终目的是:

1、受控种系统的正对面:Frontend 消费者服务是一个基于 SpringMVC 开发的正对面量化方式中,应运而生举例来说的消费者流量,我们主要相对于重视的是举例来说连接器的这两项 RED 这两项(调用百余人 Rate,失败数 Error,劝告花费 Duration);

2、受控种系统的这两项链路:对后端消费者服务 critical path 上的并不一定顺利已完并成受控,如多线程出水口的配置文件状况、意味着内 Guava Cache CPU的命当中状况;

3、对金融业务超强关的的自圈内定这两项(比如某个连接器的 UV 等等);

4、对 JVM GC 及磁盘器适用状况顺利已完并成受控;

5、对上述这两项顺利已完并成统一集聚展出、以及的设计这两项这两项的同步。

第一步,过渡到 Spring Boot Actuator 忽视,顺利已完并成初始的设计

首先,我们无需过渡到 Spring Boot Actuator 的关的忽视,在 application.properties 的设计当中掩盖受控资料接口(这里圈内定为 8091)。获得并成功后,我们方能访问期间量化方式中的 8091 接口的/actuator/prometheus 偏移拿到 OpenMetrics 标准化的受控资料。

org.springframework.boot

spring-boot-starter-actuator

io.micrometer

micrometer-registry-prometheus

# application.properties掺入所列的设计用作掩盖这两项

spring.application.name=frontend

management.server.port=8091

management.endpoints.web.exposure.include=*

management.metrics.tags.application=${spring.application.name}

第二步,code埋点及改装

为了给予某个 Api 连接器的 RED 这两项,我们无需在互换的连接器方式中上打下面的 @Timed 注解。我们以演示计划当中的 index 主页连接器为例。警惕这里,@Timed 注解当中的 value 即为掩盖到/actuator/prometheus 当中的这两项名字,histogram=true 回应我们掩盖这个连接器劝告整整的 histogram 直方图各种类型这两项,便于我们后续数倍数 P99,P90 等劝告时间段分布区状况。

@Timed(value = "main_page_request_duration", description = "Time taken to return main page", histogram = true)

@ApiOperation(value = "网页", tags = {"网页操作主页"})

@GetMapping("/")

public String index(Model model) {

model.addAttribute("products", productDAO.getProductList());

model.addAttribute("FRONTEND_APP_NAME", Application.APP_NAME);

model.addAttribute("FRONTEND_SERVICE_TAG", Application.SERVICE_TAG);

model.addAttribute("FRONTEND_IP", registration.getHost());

model.addAttribute("PRODUCT_APP_NAME", PRODUCT_APP_NAME);

model.addAttribute("PRODUCT_SERVICE_TAG", PRODUCT_SERVICE_TAG);

model.addAttribute("PRODUCT_IP", PRODUCT_IP);

model.addAttribute("new_version", StringUtils.isBlank(env));

return "index.html";

}

如果我们的量化方式中当中适用了意味着内CPU坎,比如颇为罕见的 Guava Cache 坎等等。如果我们想扫描意味着内CPU的试运行状况,我们无需按照 Micrometer 发放的修饰方式中,对待受控的这两项并不一定顺利已完并成烧录。

Guava Cache 改装主要是四方式中,code改动相比较小,很比较易就可以终端:

1、注入 MeterRegistry,这里注入的基本借助于是 PrometheusMeterRegistry,由 Spring Boot 自行注入方能

2、适用工具类 api,即图当中展出的 GuavaCacheMetrics.monitor 包装一下本地CPU

3、开启CPU资料记录,即调用一下.recordStats()方式中

4、增加一个称呼,用作聚合互换的这两项。

多线程出水口改装主要是三方式中,也并不是很多样:

1、注入 MeterRegistry,这里注入的基本借助于是 PrometheusMeterRegistry;

2、适用工具类 api 包装一下多线程出水口;

3、增加一个称呼,用作聚合互换的这两项。

当然,我们在开辨认出实生活当中一定还有许多金融业务超强关的的自圈内定这两项,为了受控这些这两项,我们在向 Bean 当中注入 MeterRegistry 后,无需按照我们的期望和互换桥段形态 Counter,Gauge 或 Timer(这些各种类型的区隔和适用桥段上文有提到)来顺利已完并成资料人口统计,并将其提出申请到 MeterRegistry 顺利已完并成这两项掩盖,下面是一个简单的举例来说。

@Service

public class DemoService {

Counter visitCounter;

public DemoService(MeterRegistry registry) {

visitCounter = Counter.builder("visit_counter")

.description("Number of visits to the site")

.register(registry);

}

public String visit() {

visitCounter.increment();

return "Hello World!";

}

}

至此,我们的量化方式中code改装工作到这里就均部已完并成了,下一步工作就是将量化方式中镜像继续紧密结合并继续调动到已安装 ARMS Prometheus 的 Kubernetes 战略性当中。以后,我们 ARMS Prometheus 基本功能当中的设计 ServiceMonitor,顺利已完并成消费者服务辨认出。

掺入好 ServiceMonitor 后,我们可以在 Targets 列表当中看着正要提出申请的量化方式中 Service。

第三步,看侧边的设计

量化方式中的受控资料已获得并成功利用并磁盘到 ARMS Prometheus。月里,也是最这两项的一步,就是根据这些资料,的设计都可的于上及同步。这里,我们借助 Grafana 新社区当中Linux于上堆栈来紧密结合我们自己的金融业务受控堆栈。主要基于所列两个堆栈:

Spring Boot 2.1 Statistics: JVM (Micrometer):

借助这些堆栈以及 ARMS Prometheus 内置的 Grafana 消费者服务,我们可以很便利地将日常开发和运维现实生活当中比较友善的这两项组织在一张的 Grafana Dashboard 上。这里给大家抛砖引玉一下,敲一张我们之下基于上述堆栈和自身金融业务紧密结合的一个真实的于上。这里面包含了一些总览,比如模组试运行时间段,磁盘器适用百余人等等,也有一些具体这两项,如堆内堆外磁盘器,分代 GC 状况等等,还有像连接器劝告的 RED 等等,这里就不过多赘述了,大家可以充分发挥自己的想象力来创造独一无二的酷炫于上~

本文为阿里幽原创内容,未经无需不得刊出。

南京牛皮癣检查
上海癫痫医院哪里最好
银川妇科医院哪家医院好
佛山男科医院挂号
驻马店白癜风医院哪家比较好
风湿免疫科
小儿支气管炎
咳嗽有痰吃什么药
阴囊湿疹
五官科

上一篇: 当代系退出殆尽!天风证券股东再生变异,湖北国资21亿接盘,这一特色股权结构明晰

下一篇: 一个大小白的最全Python可视化教程,超全的

友情链接