used enable docs dependency actuator json spring spring-boot

json - enable - spring boot actuator properties



Salida JSON de impresiĆ³n bonita de los puntos finales de Spring Boot Actuator (13)

Aquí está mi función de Emacs para recuperar Spring Actuator Json desde los puntos finales:

(defvar my/spring-actuator-server-history nil) (defvar my/spring-actuator-last-server "http://localhost:8080") (defvar my/spring-actuator-path-history nil) (defvar my/spring-actuator-path-completion ''("actuator" "auditevents" "autoconfig" "beans" "configprops" "dump" "env" "flyway" "health" "heapdump" "info" "jolokia" "liquibase" "logfile" "loggers" "mappings" "metrics" "shutdown" "trace"))) (defun my/spring-actuator (server path) (interactive (list (read-string "Server: " my/spring-actuator-last-server ''my/spring-actuator-server-history) (completing-read "Path: " my/spring-actuator-path-completion nil nil "" ''my/spring-actuator-path-history))) (setq my/spring-actuator-last-server server) (let ( (bufname (format "actuator: %s" path)) ) (when (get-buffer bufname) (kill-buffer bufname)) (switch-to-buffer (url-retrieve-synchronously (format "%s/%s" server path))) (rename-buffer bufname) (goto-char (point-min)) (re-search-forward "^$" nil ''move) (forward-char) (delete-region (point-min) (point)) (json-pretty-print-buffer) (json-mode) ))

Si no le gusta la dependencia de la biblioteca externa json-mode reemplácela con js-mode .

Spring Boot Actuator proporciona varios puntos finales para monitorear una aplicación como:

/metrics /beans /health ...

Comprobando los puntos finales con:

curl http://localhost:8080/metrics

resultados en:

{"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}

Esto está bien para el consumo de la máquina pero es difícil de leer para los humanos .

Me gustaría formatear (es decir, en letra pequeña) la salida JSON de los puntos finales de Spring Boot Actuator para que sea más fácil de leer por el personal de operaciones.

Algo como:

{ "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, ... }

Intenté establecer

http.mappers.json-pretty-print=true

pero esta configuración no afectó la salida del Actuador.

¿Hay una configuración para habilitar una impresión bonita de la salida JSON del actuador de arranque Spring ?

ACTUALIZAR:

La muestra oficial me funciona.

Es importante seguir los comentarios de @DaveSyer: la propiedad que se establece es

http.mappers.jsonPrettyPrint=true

La investigación aún está en curso.

Mientras tanto, uso la línea de comandos json pretty print como solución alternativa :

Instale jsonpp (por ejemplo para OS X):

brew install jsonpp

Luego canalice la salida de enrollamiento a través de jsonpp que formatea el archivo json sobre la marcha:

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

Resultados en:

{ "counter.status.200.env": 1, "counter.status.200.health": 1, "counter.status.200.info": 2, "counter.status.200.metrics": 2, ... }


Con spring-boot 1.2.6, necesitas usar:

spring.jackson.serialization.INDENT_OUTPUT=true

De mi registro cuando uso los antiguos http.mappers. *:

http.mappers.json-pretty-print is deprecated. If you are using Jackson, spring.jackson.serialization.INDENT_OUTPUT=true should be used instead.


Desafortunadamente, la propiedad de la aplicación

spring.jackson.serialization.INDENT_OUTPUT

No me funcionó (versiones de arranque de primavera 1.2.6 a 1.4.0.RELEASE). En lugar de eso, en mi extensión de WebMvcConfigurerAdapter , he invalidado configureMessageConverters () y he agregado mi propio Jackson2ObjectMapperBuilder:

@Configuration @EnableWebMvc public class WebMvcConfig extends WebMvcConfigurerAdapter { ... private MappingJackson2HttpMessageConverter jacksonMessageConverter() { Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder() .featuresToDisable(SerializationFeature.FAIL_ON_EMPTY_BEANS, SerializationFeature.WRITE_CHAR_ARRAYS_AS_JSON_ARRAYS) .featuresToEnable(SerializationFeature.INDENT_OUTPUT).modulesToInstall(hibernate4Module()); // can use this instead of featuresToEnable(...) builder.indentOutput(true); return new MappingJackson2HttpMessageConverter(builder.build()); } @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(jacksonMessageConverter()); super.configureMessageConverters(converters); } ... }

Eso parece ser el truco para mí en Spring boot 1.4.0.RELEASE y la salida de mi actuador ahora está bastante impresa (junto con todas las demás salidas json)


En lugar de usar curl me gusta usar httpie como un cliente de línea de comandos http:

http http://localhost:8080/metrics

Esto ya daría formato y la sintaxis destacaría la respuesta json sin tener que canalizar la salida en otro comando. También la sintaxis del comando es un poco más amigable para los humanos.


En realidad yo quería hacer lo mismo. Pero luego pregunté: ¿por qué? Para depurar mejor mi servicio que viene con una pequeña penalización de rendimiento.

Solo usa una extensión del navegador, como esta :) para obtener una vista como esta


Haz lo siguiente:

@Configuration public class JacksonConfig { @Autowired private ObjectMapper objectMapper; //reuse the pre-configured mapper @PostConstruct public void setup() { objectMapper.enable(SerializationFeature.INDENT_OUTPUT); //whatever else you need } }

Esto funciona porque Spring Boot usa un bean ObjectMapper para realizar todas las operaciones relacionadas con JSON.

Sin embargo, tenga en cuenta que esta configuración imprimirá bastante todas las salidas JSON, no solo las cosas relacionadas con el actuador.

ACTUALIZAR

¡La respuesta de @DaveSyer es obviamente mejor! No había encontrado el objeto HttpMapperProperties que se usa para configurar Jackson. This es Javadoc.


La propiedad "http.mappers" funciona para mí, pero creo que podría necesitarla en camello ("jsonPrettyPrint").


Para Spring Boot 1.5.1 tengo en mi archivo YML:

spring: jackson: serialization: INDENT_OUTPUT: true

La respuesta de @BertrandRenuart fue la más cercana, pero según IDE no vio a indent_output como correcta.



Si está utilizando la serialización GSON con Spring, ninguna de las otras respuestas funcionará para usted. Tendrás que usar esta opción de configuración:

spring.gson.pretty-printing=true

Confirmado trabajando con Spring Boot a partir de la versión 2.0.3.Release . 2.0.3.Release .


Uso el módulo json.tool comúnmente instalado de json.tool :

curl --silent http://localhost:8080/metrics | python -mjson.tool


Yo uso jq para imprimir JSON y para filtrarlo. Es básicamente sed para JSON. En el mac, se puede instalar con homebrew. ( https://stedolan.github.io/jq/ )

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


esto no funciona

spring.jackson.serialization.INDENT_OUTPUT=true

esto funciona spring.jackson.serialization.indent-output=true