这是快速入门,介绍了如何使用出色的Micrometer库来检测基于Spring Boot 2的应用程序并在Prometheus中记录指标

介绍

Micrometer在各种监视工具提供的客户端库上提供了基于Java的外观。

以Prometheus为例,如果我要将Java应用程序与Prometheus集成,我将使用称为Prometheus Client Java的客户端库,使用数据结构(Counter,Gauge等)来收集数据并将其提供给Prometheus。 如果出于任何原因更改了监视系统,则必须为新系统更改代码。

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

prometheus spring boot 客户端_数据分析

检测Spring Boot 2应用程序

为基于Spring Boot 2的应用程序获得Micrometer支持并不需要做任何特殊的事情,在执行器启动器中添加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”端点应该可用,其中显示了一组丰富的指标,以下是我的计算机上的示例:

prometheus spring boot 客户端_spring_02

默认度量标准非常丰富,应涵盖应用程序的大多数通用度量标准要求,如果需要其他度量标准,则可以很容易地添加它,如以下代码片段所示:

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集成

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

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

这实际上不是生产配置,在生产设置中,最好使用Prometheus Push Gateway来代理度量标准的收集。

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

prometheus spring boot 客户端_spring_03

结论

千分尺可以很容易地对应用程序进行检测并收集一组可以在Prometheus中存储和可视化的基本指标。 如果您有兴趣进一步进行此操作,请在此处找到使用微米计的示例应用程序

翻译自: https://www.javacodegeeks.com/2017/11/using-micrometer-spring-boot-2.html