这是对使用优秀的 Micrometer 库来检测基于 Spring Boot 2 的应用程序并在 Prometheus 中记录指标的快速介绍
Micrometer 在不同监控工具提供的客户端库上提供了一个基于 Java 的外观。
以 Prometheus 为例,如果我要将我的 Java 应用程序与 Prometheus 集成,我会使用名为 Prometheus Client Java 的客户端库,使用数据结构(Counter、Gauge 等)来收集和向普罗米修斯提供数据。如果出于任何原因更改了监控系统,则必须为新系统更改代码。
Micrometer 试图通过提供应用程序在编写代码时使用的通用外观来缓解这种情况,绑定到监控系统纯粹是一个运行时问题,因此将 Metrics 系统从 Prometheus 更改为 Datadog 只需要更改运行时库而不需要任何代码更改。
不需要做任何特别的事情来获得 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