Spring Boot 2 - 执行器指标端点不起作用

时间:2018-01-29 14:29:10

标签: spring-boot spring-boot-actuator

在我的Spring Boot App(2.0.0.M7)application.properties中,我设置了

 magick convert -verbose difference.png -fuzz 7% -draw 'alpha 1,1 floodfill' test.png

然而,当我点击

management.endpoint.metrics.enabled=true

我得到404。

解决方案是什么?

14 个答案:

答案 0 :(得分:41)

我想用更多的信息来增强OP的答案,因为我在最终绊倒这个解决方案之前有点挣扎,而且似乎有很多关于使用Spring Boot 2改变执行器行为的困惑

什么没有改变

您需要在 spring-boot-starter-actuator

中包含依赖项
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
</dependencies>

如果要通过HTTP访问执行器端点,还需要向 spring-boot-starter-web

添加依赖关系

所以你的pom依赖关系将如下所示

    <dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
</dependencies>

Spring Boot 2中引入的更改

  1. /health/metrics等终端在默认根上下文中不再可用。它们从现在开始提供 http://{host}:{port}/actuator。 此外,您的应用程序的所有其他端点是否以/hello等其他上下文开头并不重要 - 执行器位于/actuator而不是/hello/actuator

  2. /actuator端点的响应默认情况下HATEOAS已启用。在Spring Boot 2之前,只有application.yml

  3. 中的if HATEOAS is on the classpath and explicitly enabled
  4. 要通过HTTP提供执行器端点,需要启用并公开

    默认情况下:

    • 只有/health/info端点公开,无论您的应用程序中是否存在和配置了Spring Security。

    • 所有端点但/shutdown已启用(但仅公开/health/info

  5. 如果您想公开所有端点(并不总是一个好主意),您可以将management.endpoints.web.exposure.include=*添加到application.properties。如果您正在使用yml-configurations,请不要忘记引用通配符。

  6. 不推荐使用以endpoints.xyz开头的旧属性,转而使用以management.xyz开头的属性
  7. 有关完整文档,请参阅official doc以及migration guide

答案 1 :(得分:6)

将以下行添加到application.properties文件中:

management.endpoints.web.exposure.include=metrics

就是这样。

答案 2 :(得分:3)

对我来说有用的是以下(采用YAML格式),使用spring boot 2 release:

management:
  endpoints:
    web:
      exposure:
        include: info, health, metrics
  metrics:
    export:
      atlas:
        enabled: false

还可以找到具体的文档here

答案 3 :(得分:3)

您需要在application.properties文件中添加以下道具。在添加以下道具之前,我遇到了同样的问题。

management.endpoints.beans.enabled=false
management.endpoints.web.exposure.include=*

答案 4 :(得分:2)

好的,我找到了解决方案。我在application.properties

中添加了另一行
management.endpoints.web.expose=*

然而,确保执行器端点非常重要

在这里阅读: https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-monitoring.html

答案 5 :(得分:1)

根据micrometer docs .Spring Boot 2.0.x通过弹簧启动执行器支持Micrometer开箱即用。
默认情况下,端点度量标准处于禁用状态,与Spring Boot 2的试金石一致,默认情况下应禁用任何可能暴露应用程序敏感数据的端点。可以通过设置:

启用它
  

management.endpoints.web.exposure.include:metrics

导航到/actuator/metrics会显示可用的仪表名称列表。

要访问它们,请使用以下内容: http://localhost:8080/actuator/metrics/jvm.memory.used

答案 6 :(得分:0)

“ *”在YAML中具有特殊含义,因此,如果要包括(或排除)所有端点,请确保添加引号,如以下示例所示:

management:
  endpoints:
    web:
      exposure:
        include: "*"

答案 7 :(得分:0)

从Spring Boot 1.5.15升级到2.1.4时遇到相同的问题

需要从以下位置修改我的pom.xml中Spring Boot执行器的原始依赖性:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-actuator</artifactId>
</dependency>

收件人:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

请注意在starter中添加单词artifactId

答案 8 :(得分:0)

以下配置适用于我

server.servlet.context-path = / travel management.endpoints.web.exposure.include = *

然后,您需要添加上下文路径: http://localhost:8080/travel/actuator/metrics/

答案 9 :(得分:0)

management:
  endpoints:
    web:
      base-path: "/"
      exposure:
        include: '*'

它应该像那样工作。 *表示公开所有端点

答案 10 :(得分:0)

正如@senseiwu所述,与以前的版本不同,Spring Boot 2中的Actuator禁用了大多数端点。 我们是否要启用所有这些,我们可以设置

management.endpoints.web.exposure.include=* 

或者,我们可以列出应启用的端点。

您可以轻松使用hal-browser,这是一个有用的UI,通过添加以下依赖项将其映射到“ /”路径:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-rest-hal-browser</artifactId>
</dependency>

在hal-browser中,您需要键入/ actuator以查看所有端点。 它已经在Spring Boot 2.3.0.M2中进行了测试,并且运行良好。 您可以通过以下链接了解更多信息:

Spring REST and HAL Browser

Spring Boot Actuator

答案 11 :(得分:0)

在application.properties中添加以下属性为我解决了问题:

management.health.defaults.enabled=false

答案 12 :(得分:0)

将千分尺的完整配置放在这里。以下一个对我来说工作正常。我将它用于 ELK 堆栈

management:
  metrics:
    enable:
      jvm: true
      all: true
    export:
      elastic:
        enables: true
        step: 10s
        index: micrometer-${spring.application.name}
        host: http://localhost:9200
      simple:
        enabled: true
    distribution:
      percentiles-histogram:
        http:
          server:
            requests: true
      sla:
        http:
          server:
            requests: 100ms, 400ms, 500ms, 2000ms
      percentiles:
        http:
          server:
            requests: 0.5, 0.9, 0.95, 0.99
  endpoint:
    metrics:
      enabled: true
  endpoints:
    web:
      exposure:
        include: '*'

答案 13 :(得分:0)

management.endpoints.web.exposure.include=metrics 中设置 application.properties 以使用 HTTP 公开 /actuator/metrics


参考:https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html

参考:https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints

执行器端点可让您监控应用程序并与之交互。 Spring Boot 包含许多内置端点,并允许您添加自己的端点。例如,健康端点提供基本的应用健康信息。

每个单独的端点都可以通过 enableddisabled exposedHTTPJMX(远程访问)。端点在启用和公开时被视为可用。 内置端点只有在可用时才会自动配置。大多数应用程序选择通过 HTTP 公开,其中端点的 ID 以及 /actuator 的前缀映射到 URL。例如,默认情况下,health 端点映射到 /actuator/health。

参考:https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints.enabling

默认情况下,除关闭之外的所有端点都处于启用状态。

参考:https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints.exposing