Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pretty print JSON output of Spring Boot Actuator endpoints

Spring Boot Actuator provides several endpoints to monitor an application as:

/metrics /beans /health ... 

Checking the endpoints with:

curl http://localhost:8080/metrics 

results in:

{"counter.status.200.env":1,"counter.status.200.health":1,"counter.status.200.info":2,"counter.status.200.metrics":2,"gauge.response.env":5.0,"gauge.response.health":22.0,"gauge.response.info":1.0,"gauge.response.metrics":1.0,"mem":1030144,"mem.free":56118,"processors":8,"uptime":5108095,"instance.uptime":5102906,"heap.committed":1030144,"heap.init":262144,"heap.used":974031,"heap":3728384,"threads.peak":81,"threads.daemon":21,"threads":77,"classes":8854,"classes.loaded":8860,"classes.unloaded":6,"gc.ps_scavenge.count":119,"gc.ps_scavenge.time":7223,"gc.ps_marksweep.count":12,"gc.ps_marksweep.time":17573} 

This is fine for machine consumption but hard to read by humans.

I'd like to format (i.e. pretty print) the JSON output of the Spring Boot Actuator endpoints to make them easier to read by operations personel.

Something like:

{   "counter.status.200.env":1,   "counter.status.200.health":1,   "counter.status.200.info":2,   "counter.status.200.metrics":2,   "gauge.response.env":5.0,   "gauge.response.health":22.0,   "gauge.response.info":1.0,   ... } 

I tried setting

http.mappers.json-pretty-print=true  

but this setting didn't affect the Actuator output.

Is there a configuration to enable pretty print of the Spring Boot Actuator JSON output?

UPDATE:

The official sample works for me.

It's important to follow the comments from @DaveSyer: the property to set is

http.mappers.jsonPrettyPrint=true 

Investigation is still under way.

In the meantime I use the the json pretty print command line as workaround:

Install jsonpp (e.g. for OS X):

brew install jsonpp 

Then pipe the curl output trough jsonpp which formats the json file on the fly:

curl http://localhost:8080/metrics | jsonpp 

Results in:

{   "counter.status.200.env": 1,   "counter.status.200.health": 1,   "counter.status.200.info": 2,   "counter.status.200.metrics": 2,   ... } 
like image 355
Bernhard Woditschka Avatar asked Jul 01 '14 06:07

Bernhard Woditschka


People also ask

How do I get all API endpoints in Spring Boot?

In a Spring Boot application, we expose a REST API endpoint by using the @RequestMapping annotation in the controller class. For getting these endpoints, there are three options: an event listener, Spring Boot Actuator, or the Swagger library.

How do I find my actuator information?

You can reach the info actuator on your local machine: http://localhost:8080/actuator/info once you start your Spring Boot application.


2 Answers

As per http://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-jackson-objectmapper, the official way to enable pretty print with Jackson in Spring Boot (1.2.2 at least) is to set the following property:

 # Pretty-print JSON responses  spring.jackson.serialization.indent_output=true 
like image 72
Bertrand Renuart Avatar answered Sep 18 '22 13:09

Bertrand Renuart


For Spring Boot 1.5.1 I have in my YML file:

spring:   jackson:     serialization:       INDENT_OUTPUT: true 

@BertrandRenuart answer was the closest, but by IDE did not see indent_output as correct.

like image 43
Witold Kaczurba Avatar answered Sep 18 '22 13:09

Witold Kaczurba