If you are developing a Spring MVC application, Spring Boot Actuator will auto-configure
all enabled endpoints to be exposed over HTTP. The default convention is to use the
id
of the endpoint with a prefix of /application
as the URL path. For example, health
is exposed as /application/health
.
Sometimes it is useful to customize the prefix for the management endpoints.
For example, your application might already use /application
for another purpose.
You can use the management.context-path
property to change the prefix for your
management endpoint:
management.context-path=/manage
The application.properties
example above will change the endpoint from /application/{id}
to
/manage/{id}
(e.g. /manage/info
).
Note | |
---|---|
Unless the management port has been configured to
expose endpoints using a different
HTTP port, |
Exposing management endpoints using the default HTTP port is a sensible choice for cloud based deployments. If, however, your application runs inside your own data center you may prefer to expose endpoints using a different HTTP port.
The management.port
property can be used to change the HTTP port.
management.port=8081
Since your management port is often protected by a firewall, and not exposed to the public you might not need security on the management endpoints, even if your main application is secure. In that case you will have Spring Security on the classpath, and you can disable management security like this:
management.security.enabled=false
(If you don’t have Spring Security on the classpath then there is no need to explicitly disable the management security in this way, and it might even break the application.)
When configured to use a custom port, the management server can also be configured with
its own SSL using the various management.ssl.*
properties. For example, this allows a
management server to be available via HTTP while the main application uses HTTPS:
server.port=8443 server.ssl.enabled=true server.ssl.key-store=classpath:store.jks server.ssl.key-password=secret management.port=8080 management.ssl.enabled=false
Alternatively, both the main server and the management server can use SSL but with different key stores:
server.port=8443 server.ssl.enabled=true server.ssl.key-store=classpath:main.jks server.ssl.key-password=secret management.port=8080 management.ssl.enabled=true management.ssl.key-store=classpath:management.jks management.ssl.key-password=secret
You can customize the address that the management endpoints are available on by
setting the management.address
property. This can be useful if you want to
listen only on an internal or ops-facing network, or to only listen for connections from
localhost
.
Note | |
---|---|
You can only listen on a different address if the port is different to the main server port. |
Here is an example application.properties
that will not allow remote management
connections:
management.port=8081 management.address=127.0.0.1
If you don’t want to expose endpoints over HTTP you can set the management port to -1
:
management.port=-1
The information exposed by the health endpoint varies depending on whether or not it’s accessed anonymously, and whether or not the enclosing application is secure. By default, when accessed anonymously in a secure application, any details about the server’s health are hidden and the endpoint will simply indicate whether or not the server is up or down.
Sample summarized HTTP response (default for anonymous request):
$ curl -i localhost:8080/health HTTP/1.1 200 X-Application-Context: application Content-Type: application/vnd.spring-boot.actuator.v2+json;charset=UTF-8 Content-Length: 15 {"status":"UP"}
Sample summarized HTTP response for status "DOWN" (notice the 503 status code):
$ curl -i localhost:8080/health HTTP/1.1 503 X-Application-Context: application Content-Type: application/vnd.spring-boot.actuator.v2+json;charset=UTF-8 Content-Length: 17 {"status":"DOWN"}
Sample detailed HTTP response:
$ curl -i localhost:8080/health HTTP/1.1 200 OK X-Application-Context: application Content-Type: application/vnd.spring-boot.actuator.v2+json;charset=UTF-8 Content-Length: 221 { "status" : "UP", "diskSpace" : { "status" : "UP", "total" : 63251804160, "free" : 31316164608, "threshold" : 10485760 }, "db" : { "status" : "UP", "database" : "H2", "hello" : 1 } }