Dachstein
Dachstein

Reputation: 4282

Spring Boot 2 - Actuator Metrics Endpoint not working

In my Spring Boot App (2.0.0.M7) application.properties I set

management.endpoint.metrics.enabled=true

However, when i hit

localhost:8080/actuator/metrics 

I get 404.

Whats the solution?

Upvotes: 51

Views: 89513

Answers (15)

Tung Tran
Tung Tran

Reputation: 11

Adding the following property:

management.endpoints.web.exposure.include=metrics

Upvotes: 0

Jon X
Jon X

Reputation: 9143

Set management.endpoints.web.exposure.include=metrics in application.properties to expose /actuator/metrics with HTTP.


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

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

Actuator endpoints let you monitor and interact with your application. Spring Boot includes a number of built-in endpoints and lets you add your own. For example, the health endpoint provides basic application health information.

Each individual endpoint can be enabled or disabled and exposed (made remotely accessible) over HTTP or JMX. An endpoint is considered to be available when it is both enabled and exposed. The built-in endpoints will only be auto-configured when they are available. Most applications choose exposure via HTTP, where the ID of the endpoint along with a prefix of /actuator is mapped to a URL. For example, by default, the health endpoint is mapped to /actuator/health.

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

By default, all endpoints except for shutdown are enabled.

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

Upvotes: 1

Anton
Anton

Reputation: 730

Put here the full config for micrometer. The following one is working fine for me. I use it for ELK stack

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: '*'

Upvotes: 0

KayV
KayV

Reputation: 13855

Adding the below property in application.properties solved the issues for me:

management.health.defaults.enabled=false

Upvotes: 1

DandelionYas
DandelionYas

Reputation: 1

As @senseiwu mentioned, Unlike the previous versions, Actuator in spring boot 2 comes with most endpoints disabled. Would we want to enable all of them, we could set

management.endpoints.web.exposure.include=* 

Alternatively, we could list endpoints that should be enabled.

You can easily use hal-browser which is a useful UI, mapped to "/" path by adding following dependencies:

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

In the hal-browser you need to type /actuator to see all endpoints. It has been tested in Spring Boot 2.3.0.M2 and works perfectly. You can learn more in the following links:

Spring REST and HAL Browser

Spring Boot Actuator

Upvotes: 0

mo rabah ouagoughi
mo rabah ouagoughi

Reputation: 66

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

it should works like that. * means expose all endpoints

Upvotes: 1

Vikki
Vikki

Reputation: 2025

The following configuration works for me

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

Then you need to add context path: http://localhost:8080/travel/actuator/metrics/

Upvotes: 0

disposedtrolley
disposedtrolley

Reputation: 438

Had the same issue upgrading from Spring Boot 1.5.15 to 2.1.4

Needed to modify the original dependency for the Spring Boot actuator in my pom.xml from:

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

notice the addition of the word starter in the artifactId.

Upvotes: 8

Dilan
Dilan

Reputation: 1449

"*" has a special meaning in YAML, so be sure to add quotes if you want to include (or exclude) all endpoints, as shown in the following example:

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

Upvotes: 7

Krish
Krish

Reputation: 215

You need to add the below props in your application.properties file. I had the same issue until I added the below props.

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

Upvotes: 8

Jeen
Jeen

Reputation: 391

Add the following line to your application.properties file:

management.endpoints.web.exposure.include=metrics

That's all.

Upvotes: 29

makson
makson

Reputation: 2273

According micrometer docs .Spring Boot 2.0.x supports Micrometer out of the box via Spring Boot Actuator.
The endpoint metric is disabled by default, in line with Spring Boot 2’s litmus test that any endpoint that potentially exposes sensitive data about an application should be disabled by default. It can be enabled by setting:

management.endpoints.web.exposure.include: metrics

Navigating to /actuator/metrics displays a list of available meter names.

To access them, use something like this: http://localhost:8080/actuator/metrics/jvm.memory.used

Upvotes: 6

senseiwu
senseiwu

Reputation: 5279

I would like to enhance the OP's answer with more information as I struggled a bit before finally stumbling upon this solution and there seem to be lots of confusion about changes to actuator behavior with Spring Boot 2

What hasn't changed

You need to include a dependency to spring-boot-starter-actuator

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

If you want to access actuator endpoints via HTTP, you also need to add a dependency to spring-boot-starter-web

So your pom dependencies will look like below

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

Changes introduced in Spring Boot 2

  1. Endpoints like /health, /metrics etc. are no longer available at the default root context. They are available from now on at http://{host}:{port}/actuator. Also, it doesn't matter whether your application's all other endpoints begin with some other context such as /hello -- actuator is available at /actuator and not at /hello/actuator.

  2. Response from /actuator endpoint is by default HATEOAS enabled. Prior to Spring Boot 2, this was the case only if HATEOAS is on the classpath and explicitly enabled in application.yml

  3. To make an actuator endpoint available via HTTP, it needs to be both enabled and exposed.

    By default:

    • only the /health and /info endpoints are exposed, regardless of Spring Security being present and configured in your application.

    • all endpoints but /shutdown are enabled (though only /health and /info are exposed)

  4. If you want to expose all of the endpoints (not always a good idea), you may do so by adding management.endpoints.web.exposure.include=* to application.properties. Don't forget to quote the wildcard if you're using yml-configurations.

  5. Old properties starting with endpoints.xyz are deprecated in favor of properties starting with management.xyz

For a full documentation, see official doc and also the migration guide

Upvotes: 87

tbo
tbo

Reputation: 9832

What worked for me is the following (in YAML format) working with spring boot 2 release:

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

also specific documentation can be found here

Upvotes: 12

Dachstein
Dachstein

Reputation: 4282

Okay i found the solution. I have added another line in application.properties

management.endpoints.web.expose=*

However, securing the actuator endoints is important

Read here: https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-monitoring.html

Upvotes: 3

Related Questions