Spring Boot 2 - Actuator指标端点无法工作

49

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

management.endpoint.metrics.enabled=true

然而,当我击打时

localhost:8080/actuator/metrics 

我收到了404错误。

有什么解决方案吗?

14个回答

86
我希望能够增强OP的答案,提供更多信息。在最终找到这个解决方案之前,我曾经遇到过一些困难,并且关于Spring Boot 2中actuator行为的变化似乎存在很多困惑。 未发生变化的内容: 您需要包含对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都可以在/actuator而不是/hello/actuator上使用。

  2. /actuator终端节点的响应默认情况下启用了HATEOAS。在Spring Boot 2之前,只有在application.yml中明确启用如果HATEOAS在类路径上并显式启用时才会这样做。

  3. 要通过HTTP公开actuator终端节点,它需要同时启用和公开

    默认情况下:

    • 仅公开/health/info终端节点,无论Spring Security是否存在并在应用程序中进行配置。

    • 启用所有终端节点,但/shutdown除外(尽管仅公开/health/info

  4. 如果要公开所有终端节点(并不总是一个好主意),可以通过在application.properties中添加management.endpoints.web.exposure.include=*来实现。如果使用yml配置,请不要忘记引用通配符。

  5. endpoints.xyz开头的旧属性已弃用,取而代之的是以management.xyz开头的属性

如需完整文档,请参阅官方文档,同时还可以查看迁移指南


4
从spring-boot2开始,现在是management.endpoints.web.exposure.include=* - fdaugan
22
对于yaml配置,您需要引用通配符,否则它将无法解析:management.endpoints.web.exposure.include: '*' - Timi
我想知道如果默认情况下已经删除或禁用了这么多内容,执行器的用途是什么。我在我的项目中使用了执行器,唯一有用的是健康状态,甚至这也值得怀疑。它只能告诉我们某些东西是否正在运行,如果停止,则心跳消失。信息URL会创建一个空的JSON。那么为什么要使用它呢? - Martijn Hiemstra
没有太多被删除。某些敏感的端点出于某种良好的原因默认情况下是禁用的。 - senseiwu
这个有意义,但最新的文档说相反。https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready-endpoints-enabling-endpoints - Chad
显示剩余2条评论

29

请在您的 application.properties 文件中添加以下行:

management.endpoints.web.exposure.include=metrics

就这些。


2
另外,management.endpoints.web.exposure.include=* 对我也有效。 - Vladyslav Nikolaiev

12

以下是适用于Spring Boot 2版本的操作(YAML格式):

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

同时也可以在这里找到具体的文档。


2
当我使用它时,/metrics端点可以工作,但只显示键而不是值。怎么回事? - djangofan
1
是的,这就是它的工作原理。您可以选择要显示的指标,而不是在混乱的单个页面中显示所有指标,这对于像Prometheus或Atlas这样的其他应用程序读取指标也很有用。 - tbo

8

我遇到了从Spring Boot 1.5.15升级到2.1.4的同样问题。

需要修改在我的pom.xml中的Spring Boot actuator的原始依赖项,从:

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

to:

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

注意在artifactId中加入了单词starter

嗨!谢谢分享!“enabled”和“exposed”的区别是什么?谢谢! - fongfong
1
这真的很令人恼火,因为两者似乎都能够成功构建 - 但第一个却悄无声息地无法工作。 - Brent Bradburn

8
您需要在您的application.properties文件中添加以下属性。直到我添加了以下属性,我才解决了同样的问题。
management.endpoints.beans.enabled=false
management.endpoints.web.exposure.include=*

7
在YAML中,"*"具有特殊意义,如果您想包括(或排除)所有端点,请确保添加引号,如以下示例所示:
management:
  endpoints:
    web:
      exposure:
        include: "*"

4
根据micrometer文档,Spring Boot 2.0.x通过Spring Boot Actuator原生支持Micrometer。
默认情况下,端点metric处于禁用状态,符合Spring Boot 2的基准测试,即任何可能暴露应用程序敏感数据的端点都应该默认禁用。可以通过设置以下内容来启用它:

management.endpoints.web.exposure.include:metrics

导航到/actuator/metrics会显示可用计量器名称列表。
要访问它们,请使用类似以下内容的东西: http://localhost:8080/actuator/metrics/jvm.memory.used

只有这个对我起作用了,通过指定management.endpoints.web.exposure.include=metrics来设置application.properties - Poli

3

1

application.properties中设置management.endpoints.web.exposure.include=metrics,以便使用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

Actuator端点允许您监视和与应用程序交互。Spring Boot包括许多内置端点,并允许您添加自己的端点。例如,health端点提供基本的应用程序健康信息。

每个单独的端点都可以启用禁用并在HTTPJMX公开(远程访问)。只有当端点同时启用和公开时,才被认为是可用的。 内置端点仅在可用时才会自动配置。大多数应用程序选择通过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


1
在application.properties中添加下面的属性,解决了我的问题:
management.health.defaults.enabled=false

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接