在 Spring Boot 2 中使用千分尺

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(88)   2024-04-22 06:21:39

这是对使用优秀的 Micrometer 库来检测基于 Spring Boot 2 的应用程序并在 Prometheus 中记录指标的快速介绍

介绍

Micrometer 在不同监控工具提供的客户端库上提供了一个基于 Java 的外观。

以 Prometheus 为例,如果我要将我的 Java 应用程序与 Prometheus 集成,我会使用名为 Prometheus Client Java 的客户端库,使用数据结构(Counter、Gauge 等)来收集和向普罗米修斯提供数据。如果出于任何原因更改了监控系统,则必须为新系统更改代码。

Micrometer 试图通过提供应用程序在编写代码时使用的通用外观来缓解这种情况,绑定到监控系统纯粹是一个运行时问题,因此将 Metrics 系统从 Prometheus 更改为 Datadog 只需要更改运行时库而不需要任何代码更改。

检测 Spring Boot 2 应用程序

不需要做任何特别的事情来获得 Micrometer 对基于 Spring Boot 2 的应用程序的支持,添加执行器启动器将 Micrometer 作为传递依赖项拉入:

例如。在基于 gradle 的项目中,这就足够了:

dependencies {
    compile('org.springframework.boot:spring-boot-starter-actuator')
    ...
}

此外,由于目的是将数据发送到 Prometheus,因此必须引入依赖关系,以提供必要的 Micrometer SPI。

dependencies {
    ...
    runtime("io.micrometer:micrometer-registry-prometheus")
    ...
}

默认情况下,Micrometer 提供一组智能绑定,用于检测基于 Spring 的 Web 和 Webflux 端点,并添加仪表以收集持续时间、调用次数。此外,它还提供绑定以收集 JVM 指标——内存使用情况、线程池等。

需要启用一个应用程序属性来公开一个端点,Prometheus 将使用该端点来抓取指标数据:

endpoints:
  prometheus:
    enabled: true

如果此时启动应用程序,“/applications/prometheus”端点应该可用,显示一组丰富的指标,以下是我机器上的示例:

默认指标非常丰富,应该涵盖应用程序的大部分常见指标要求,如果需要其他指标,可以轻松添加,如以下代码片段所示:

class MessageHandler {
    
    private val counter = Metrics.counter("handler.calls", "uri", "/messages")
    
    fun handleMessage(req: ServerRequest): Mono<ServerResponse> {
        return req.bodyToMono<Message>().flatMap { m ->
            counter.increment()
            ...
...
}

与普罗米修斯集成

Prometheus 可以配置为从 Spring Boot2 应用程序公开的端点抓取数据,Prometheus 配置的一个片段如下所示:

scrape_configs:
  - job_name: 'myapp'
    metrics_path: /application/prometheus
    static_configs:
      - targets: ['localhost:8080']

这并不是真正的生产配置,在生产环境中,最好使用 Prometheus Push Gateway 来代理指标集合。

Prometheus 提供了一个基本的 UI 来预览它抓取的信息,默认情况下可以在端口 9090 访问它。这是一个示例图,其中包含负载测试期间生成的数据:

总结

Micrometer 使检测应用程序和收集一组良好的基本指标变得非常容易,这些指标可以在 Prometheus 中存储和可视化。如果您有兴趣进一步了解,我在此处提供了一个使用 Micrometer 的示例应用程序。

标签2: Java教程
地址:https://www.cundage.com/article/jcg-using-micrometer-spring-boot-2.html

相关阅读

Java HashSet 教程展示了如何使用 Java HashSet 集合。 Java哈希集 HashSet 是一个不包含重复元素的集合。此类为基本操作(添加、删除、包含和大小)提供恒定时间性...
SpringApplicationBuilder 教程展示了如何使用 SpringApplicationBuilder 创建一个简单的 Spring Boot 应用程序。 春天 是用于创建企业应...
通道是继 buffers 之后 java.nio 的第二个主要新增内容,我们在之前的教程中已经详细了解了这一点。通道提供与 I/O 服务的直接连接。 通道是一种在字节缓冲区和通道另一端的实体(通...
课程大纲 Elasticsearch 是一个基于 Lucene 的搜索引擎。它提供了一个分布式的、支持多租户的全文搜索引擎,带有 HTTP Web 界面和无模式的 JSON 文档。 Elasti...
解析器是强大的工具,使用 ANTLR 可以编写可用于多种不同语言的各种解析器。 在这个完整的教程中,我们将: 解释基础:什么是解析器,它可以用来做什么 查看如何设置 ANTLR 以便在 Java...
Java 是用于开发各种桌面应用程序、Web 应用程序和移动应用程序的最流行的编程语言之一。以下文章将帮助您快速熟悉 Java 语言,并迈向 API 和云开发等更复杂的概念。 1. Java语言...
Java中的继承是指子类继承或获取父类的所有非私有属性和行为的能力。继承是面向对象编程的四大支柱之一,用于提高层次结构中类之间的代码可重用性。 在本教程中,我们将了解 Java 支持的继承类型,...
Java Message Service 是一种支持正式通信的 API,称为 网络上计算机之间的消息传递。 JMS 为支持 Java 程序的标准消息协议和消息服务提供了一个通用接口。 JMS 提...
Java 项目中的一项常见任务是将日期格式化或解析为字符串,反之亦然。解析日期意味着你有一个代表日期的字符串,例如“2017-08-3”,你想把它转换成一个代表 Java 中日期的对象,例如Ja...
之前,我介绍了spring 3 + hibernate 集成 示例和struts 2 hello world 示例。在本教程中,我将讨论在将 spring 框架与 struts 与 hibern...