【问题标题】:Actuator /metrics endpoint does not include http.server.requestsActuator /metrics 端点不包括 http.server.requests
【发布时间】:2019-06-21 16:33:09
【问题描述】:

根据弹簧靴执行器的文档

Auto-configuration enables the instrumentation of requests handled by Spring MVC. When management.metrics.web.server.auto-time-requests is true, this instrumentation occurs for all requests. Alternatively, when set to false, you can enable instrumentation by adding @Timed

还有
By default, metrics are generated with the name, http.server.requests

当我访问 /metrics 端点时,我得到了

{
  "mem": 405105,
  "mem.free": 150352,
  "processors": 8,
  "instance.uptime": 440055,
  "uptime": 455888,
  "systemload.average": 1.904296875,
  "heap.committed": 315392,
  "heap.init": 262144,
  "heap.used": 164015,
  "heap": 4194304,
  "nonheap.committed": 92800,
  "nonheap.init": 4992,
  "nonheap.used": 89714,
  "nonheap": 0,
  "threads.peak": 64,
  "threads.daemon": 43,
  "threads.totalStarted": 95,
  "threads": 46,
  "classes": 12459,
  "classes.loaded": 12459,
  "classes.unloaded": 0,
  "gc.g1_young_generation.count": 12,
  "gc.g1_young_generation.time": 127,
  "gc.g1_old_generation.count": 0,
  "gc.g1_old_generation.time": 0,
  "httpsessions.max": -1,
  "httpsessions.active": 0,
  "datasource.primary.active": 0,
  "datasource.primary.usage": 0.0,
  "gauge.response.example.users": 2.0,
  "counter.status.200.example.users": 5
}

所以 http.server.requests 不存在。 counter.status.200.example 显示了通过我的应用程序的请求,但它们在每个端点上是分开的。我需要整个应用程序的整体。 我尝试禁用management.metrics.web.server.auto-time-requests 并将@Timed 添加到端点,但效果不佳。结果和上面的一样。

有谁知道我如何显示对应用程序提出的总体请求? 提前谢谢你。

*编辑

当我添加 compile('io.micrometer:micrometer-registry-prometheus:latest.release') 我收到以下错误

Parameter 0 of method prometheusEndpointFix in PrometheusEndpointConfiguration required a bean of type 'PrometheusEndpoint' that could not be found.

即使@Bean 在那里..

@Configuration
class PrometheusEndpointConfiguration {

  @Bean
  public PrometheusEndpoint prometheusEndpoint() {
    return new PrometheusEndpoint(CollectorRegistry.defaultRegistry);
  }
...
}

【问题讨论】:

  • 这看起来很像旧的 Spring Boot 1.x 执行器指标。所以我假设你使用的是 Spring Boot 1.x,对吧?
  • 是的,我使用的是 Spring Boot 1.5.2
  • 我也尝试过compile 'io.micrometer:micrometer-spring-legacy:latest.release',它支持 1.5 并且对于 http.server.requests 指标 micrometer.io/docs/ref/spring/1.5 声明相同

标签: java spring-boot spring-mvc prometheus spring-boot-actuator


【解决方案1】:

当通过 micrometer-spring-legacy 将 Micrometer 与 Spring Boot 1.5 一起使用时,Spring Boot 1.5 Actuator 框架中的“旧”/metrics 端点不会被 Micrometer 取代。在 Spring Boot 1.5 应用程序中,旧的执行器指标实现和 Micrometer 彼此完全独立。

目前,我知道在这种情况下轻松可视化 Micrometer 收集的指标的唯一方法是使用 Micrometers Prometheus 后端,将micrometer-registry-prometheus 附加到micrometer-spring-legacy。默认情况下,这将公开 /prometheus 端点并以 Prometheus 公开格式公开指标。

当然,您也可以推出自己的端点实现,它模仿 Spring Boot 2 /actuator/metrics 端点,该端点查询 MeterRegistry 并可视化所有包含的指标。但即便如此,这也应该仅用于调试事物,而不是永久读取此端点并将该数据保存在度量存储中的某个位置。 Prometheus 展示格式已针对该确切用例“开发”。 (而且它的可读性很强,因此可以作为第一个入口点,以防您不抓取这些指标。)

【讨论】:

  • 我编辑了我的问题,添加了您提出的建议。
  • @PPetkov 您不得使用/添加任何额外的 Prometheus-Java 特定库,例如 simpleclient_spring_boot。我提到的两个 Micrometer 依赖项提供了所需的一切。
  • 我的项目中确实有 simpleclient_spring_boot 库。删除它解决了这个问题。谢谢!
  • 这种情况下的两个端点是什么?我知道“/metrics”是 Spring Actuator 的一个,我应该使用哪个端点来获取微米指标?
  • @San 正如我在答案中所写,使用 Spring Boo 1.5,Micrometer 可以提供的唯一执行器端点是添加 micrometer-registry-prometheus,这将暴露 /prometheus 端点。所有其他 Micrometer 后端实现都没有提供这种方法,因为它们基于推送操作,因此不需要在应用程序级别进行抓取,而是由应用程序推送到相应的指标存储。
【解决方案2】:

一个问题是在使用执行器并遵循spring boot 2.2.6 的指导时,我注意到如果没有请求发生,http.server.requests 将不会显示在指标列表中,所以远的。发出第一个 REST 请求后,http 指标变为可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    相关资源
    最近更新 更多