{"id":3237,"date":"2020-12-20T21:26:25","date_gmt":"2020-12-21T00:26:25","guid":{"rendered":"https:\/\/devkico.itexto.com.br\/?p=3237"},"modified":"2020-12-21T09:06:37","modified_gmt":"2020-12-21T12:06:37","slug":"verifique-seu-ambiente-de-producao-com-o-actuator-do-spring-boot","status":"publish","type":"post","link":"https:\/\/devkico.itexto.com.br\/?p=3237","title":{"rendered":"Verifique seu ambiente de produ\u00e7\u00e3o com o Health Checking do Spring Boot Actuator"},"content":{"rendered":"\n<p>No <a href=\"https:\/\/devkico.itexto.com.br\/?p=3205\">post anterior<\/a> mostrei a voc\u00ea o que \u00e9 o Actuator, seus principais recursos e, muito importante: como garantir que ele n\u00e3o se torne uma falha de seguran\u00e7a. Agora apresento aquele que \u00e9 meu recurso favorito nesta ferramenta: o health checking.<\/p>\n\n\n\n<p>O objetivo aqui \u00e9 n\u00e3o s\u00f3 te mostrar como tirar proveito deste recurso a partir da implementa\u00e7\u00e3o dos seus pr\u00f3prios indicadores, mas tamb\u00e9m contar alguns usos que fa\u00e7o do recurso que talvez possam lhe ser \u00fateis.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">O que \u00e9 o Health Checking<\/h1>\n\n\n\n<p>Como o pr\u00f3prio nome j\u00e1 diz, o health checking nos permite verificar a qualidade do servi\u00e7o que implantamos: pense nesta parte do Actuator como aquela respons\u00e1vel pro realizar os testes que verificam se n\u00e3o h\u00e1 alguma condi\u00e7\u00e3o que esteja degradando ou mesmo impossibilitando a execu\u00e7\u00e3o dos seus servi\u00e7os. Vamos a alguns exemplos r\u00e1pidos de health checking:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Verificar se h\u00e1 espa\u00e7o em disco suficiente para a execu\u00e7\u00e3o do seu c\u00f3digo.<\/li><li>Checar se outros servi\u00e7os que sua aplica\u00e7\u00e3o precisa acessar est\u00e3o acess\u00edveis.<\/li><li>No caso de novas implanta\u00e7\u00f5es, verificar se todas as condi\u00e7\u00f5es para o requisito que voc\u00ea implementou est\u00e3o de acordo.<\/li><li>Checar se \u00e9 poss\u00edvel acessar o banco de dados.<\/li><\/ul>\n\n\n\n<p>Resumindo: qualquer verifica\u00e7\u00e3o que voc\u00ea precise fazer relativas \u00e0s condi\u00e7\u00f5es que sua plataforma deve atender para que funcione corretamente.<\/p>\n\n\n\n<p>Este \u00e9 um post mais pr\u00e1tico pois o principal conceito que voc\u00ea precisa ter em mente acabei de te dar.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Primeiro contato e configura\u00e7\u00f5es de seguran\u00e7a<\/h1>\n\n\n\n<p>Se voc\u00ea j\u00e1 incluiu o Actuator em seu projeto tal como descrito no post anterior e acessou o endpoint <em>\/actuator\/health<\/em> voc\u00ea ver\u00e1 a seguinte sa\u00edda que \u00e9 bem sem gra\u00e7a:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"226\" height=\"77\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-16.png\" alt=\"\" class=\"wp-image-3245\"\/><\/figure><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>\u00c9 poss\u00edvel ter uma sa\u00edda bem mais detalhada mas, como sempre, voc\u00ea precisa ter <strong>seguran\u00e7a em mente<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Seguran\u00e7a<\/h2>\n\n\n\n<figure class=\"wp-block-image alignfull size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"422\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/seguranca-1024x422.jpg\" alt=\"Seguran\u00e7a\" class=\"wp-image-3227\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/seguranca-1024x422.jpg 1024w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/seguranca-300x124.jpg 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/seguranca-768x316.jpg 768w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/seguranca.jpg 1280w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Pode parecer estranho: no <a href=\"https:\/\/devkico.itexto.com.br\/?p=3205\">post anterior<\/a> n\u00f3s vimos como limitar o acesso ao Actuator, mas mesmo assim h\u00e1 algumas quest\u00f5es de seguran\u00e7a que voc\u00ea deve levar em considera\u00e7\u00e3o ao expor os detalhes de health checking do seu sistema.<\/p>\n\n\n\n<p>O feedback que recebemos agora h\u00e1 pouco nos mostrou que o sistema est\u00e1 ok (por isto o &#8220;UP&#8221;), mas quais verifica\u00e7\u00f5es foram feitas? Ser\u00e1 que \u00e9 poss\u00edvel obter um detalhamento maior? Yeap! Entra a pr\u00f3xima chave de configura\u00e7\u00e3o <em><strong>management.endpoint.health.show-details<\/strong><\/em> que pode receber os seguintes valores:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><td><strong>Valor<\/strong><\/td><td><strong>Comportamento<\/strong><\/td><\/tr><tr><td>always<\/td><td>Sempre ir\u00e1 mostrar o detalhamento completo do health checking para todos os usu\u00e1rios do sistema e que tenham acesso ao Actuator.<\/td><\/tr><tr><td>never<\/td><td>Detalhes jamais ser\u00e3o expostos.<\/td><\/tr><tr><td>when-authorized<\/td><td>Uma op\u00e7\u00e3o interessante: voc\u00ea s\u00f3 exibir\u00e1 os detalhes do health checking para usu\u00e1rios que possuam um conjunto espec\u00edfico de permiss\u00f5es. <\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Voc\u00ea define quais as permiss\u00f5es que o usu\u00e1rio precisa ter para acessar os detalhes do health checking usando a configura\u00e7\u00e3o <strong><em>management.endpoint.health.roles<\/em><\/strong>, tal como no exemplo a seguir, no qual apenas usu\u00e1rios com a permiss\u00e3o ROLE_ADMIN tem acesso ao detalhamento:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">management.endpoint.health.roles=ROLE_ADMIN<\/pre>\n\n\n\n<p>Com todas as condi\u00e7\u00f5es satisfeitas, voc\u00ea agora obt\u00e9m um detalhamenteo bem melhor ao acessar o endpoint <strong>\/actuator\/health<\/strong>:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"366\" height=\"465\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-17.png\" alt=\"sa\u00edda detalhada do health checking\" class=\"wp-image-3246\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-17.png 366w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-17-236x300.png 236w\" sizes=\"(max-width: 366px) 100vw, 366px\" \/><\/figure><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Bem mais legal, hein? Podemos ver aqui tr\u00eas componentes, que na realidade s\u00e3o tr\u00eas health checkings: db, que verifica se conseguimos obter uma conex\u00e3o v\u00e1lida com o banco de dados, diskSpace, que verifica o espa\u00e7o livre em disco e, finalmente, ping que, bom, \u00e9 apenas um ping ao sistema.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mais um pequeno detalhe de seguran\u00e7a: evitar um DoS acidental<\/h3>\n\n\n\n<p>Seguran\u00e7a vai al\u00e9m de evitar expor dados para quem n\u00e3o deve ter acesso. Alguns testes que voc\u00ea executa podem ser caros do ponto de vista computacional. Sendo assim, caso sejam executados diversas vezes em um curto espa\u00e7o de tempo podem prejudicar a qualidade de servi\u00e7o do seu sistema.<\/p>\n\n\n\n<p>O Actuator pode cachear as respostas dos endpoints disponibilizados: com isto voc\u00ea evita o reprocessamento desnecess\u00e1rio dos mesmos e, consequentemente, evita uma s\u00e9rie de problemas caso o processamento destes endpoints seja caro do ponto de vista computacional. Esta configura\u00e7\u00e3o \u00e9 por endpoint, e no caso do &#8220;\/health&#8221; a chave de configura\u00e7\u00e3o \u00e9 <strong><em>management.endpoint.health.cache.time-to-live<\/em><\/strong>.<\/p>\n\n\n\n<p>O valor default desta configura\u00e7\u00e3o \u00e9 &#8220;0ms&#8221;, ou seja, n\u00e3o h\u00e1 cacheamento. Aumente este valor para algo tipo &#8220;5000ms&#8221; para que haja um cacheamento de 5 segundos, por exemplo. Fa\u00e7a isto se achar interessante: eu acho.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Como nascem os testes?<\/h1>\n\n\n\n<figure class=\"wp-block-image alignfull size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"401\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/origem-1024x401.jpg\" alt=\"De onde v\u00eam os testes?\" class=\"wp-image-3247\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/origem-1024x401.jpg 1024w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/origem-300x117.jpg 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/origem-768x301.jpg 768w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/origem.jpg 1280w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Ap\u00f3s habilitarmos a apresenta\u00e7\u00e3o do detalhamento do health checking obtivemos a seguinte sa\u00edda:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-17.png\" alt=\"sa\u00edda detalhada do health checking\"\/><\/figure><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>N\u00f3s n\u00e3o escrevemos os componentes db, diskSpace ou ping. De onde vieram? Isto \u00e9 algo legal no ecossistema Spring Boot: os autores de m\u00f3dulos como o JPA, por exemplo, escrevem seus pr\u00f3prios testes, que automaticamente s\u00e3o disponibilizados ao Actuator do Spring Boot usando a funcionalidade de <a href=\"https:\/\/devkico.itexto.com.br\/?p=3157\">auto configura\u00e7\u00e3o<\/a> do framework. A  maioria dos m\u00f3dulos (quase todos mesmo) oferecem isto para voc\u00ea de gra\u00e7a, tais como o Redis, JPA, Sessions, etc. <\/p>\n\n\n\n<p>E, claro, n\u00f3s vamos ver aqui tamb\u00e9m como escrever os nossos pr\u00f3prios testes tamb\u00e9m, n\u00e9? Ou melhor: &#8220;Health Indicators&#8221;.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Um Health Indicator para chamar de seu<\/h2>\n\n\n\n<p>Usei o termo &#8220;teste&#8221; at\u00e9 agora por raz\u00f5es estritamente did\u00e1ticas. N\u00e3o \u00e9 o nome correto: o ideal \u00e9 &#8220;Health Indicator&#8221;, por que \u00e9 isto que eles realmente s\u00e3o: <strong>indicadores<\/strong>. Eles \u00e9 que nos dizem se a condi\u00e7\u00e3o est\u00e1 ou n\u00e3o satisfeita e, tamb\u00e9m, os detalhes que indicam <strong>o qu\u00ea<\/strong> pode estar errado.<\/p>\n\n\n\n<p>Para come\u00e7ar vamos escrever um health indicator bem simples, que apenas verifique a exist\u00eancia ou n\u00e3o de um arquivo em nosso sistema de arquivos. Vamos ao c\u00f3digo:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"412\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-19-1024x412.png\" alt=\"\" class=\"wp-image-3249\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-19-1024x412.png 1024w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-19-300x121.png 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-19-768x309.png 768w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-19.png 1125w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Tudo o que voc\u00ea precisa fazer neste nosso primeiro indicador \u00e9 criar um <strong>bean<\/strong> do Spring que implemente a interface <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/api\/org\/springframework\/boot\/actuate\/health\/HealthIndicator.html\">org.springframework.boot.actuate.health.HealthIndicator<\/a>. Observe que precisamos implementar um \u00fanico m\u00e9todo chamado <strong>health<\/strong> que retorna um objeto do tipo&#8230; <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/api\/org\/springframework\/boot\/actuate\/health\/Health.html\">Health<\/a>.<\/p>\n\n\n\n<p>A classe Health \u00e9 um builder (leia o javadoc <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/api\/org\/springframework\/boot\/actuate\/health\/Health.html\">aqui<\/a>) que \u00e9 bem f\u00e1cil de ser usado como pode ser visto no nosso exemplo. Essencialmente voc\u00ea pode ter os seguintes valores para o seu indicador de sa\u00fade:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Valor<\/strong><\/td><td><strong>Descri\u00e7\u00e3o<\/strong><\/td><\/tr><tr><td>UP<\/td><td>Todas as condi\u00e7\u00f5es necess\u00e1rias est\u00e3o ok.<\/td><\/tr><tr><td>DOWN<\/td><td>Algo est\u00e1 errado.<\/td><\/tr><tr><td>OUT_OF_SERVICE<\/td><td>Indica que um componente do sistema n\u00e3o est\u00e1 dispon\u00edvel e portanto n\u00e3o deve ser usado<\/td><\/tr><tr><td>UNKNOWN<\/td><td>O servi\u00e7o est\u00e1 em estado desconhecido<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Neste <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/api\/org\/springframework\/boot\/actuate\/health\/Status.html\">link<\/a> voc\u00ea encontra o Javadoc com a descri\u00e7\u00e3o detalhada de todos os estados. Na pr\u00e1tica s\u00f3 uso UP e DOWN: s\u00e3o mais que suficientes para a esmagadora maioria das coisas que preciso.<\/p>\n\n\n\n<p>Voltemos ao nosso indicador. Acessando novamente o endpoint \/actuator\/health temos a seguinte sa\u00edda:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"739\" height=\"683\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-20.png\" alt=\"\" class=\"wp-image-3250\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-20.png 739w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-20-300x277.png 300w\" sizes=\"(max-width: 739px) 100vw, 739px\" \/><\/figure><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Observe alguns detalhes importantes:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>O c\u00f3digo HTTP da requisi\u00e7\u00e3o \u00e9 503 &#8211; Service Unavailable. Com isto sua ferramenta de monitoramento favorita pode te avisar de forma automatizada que algo n\u00e3o est\u00e1 ok.<\/li><li>Observe que no detalhamento do erro inclu\u00ed uma chave chamada &#8220;causa&#8221;, cujo texto \u00e9 a mensagem informando qual o problema que encontrei.<\/li><li>O nome do componente \u00e9 o nome do nosso bean Spring: config.<\/li><\/ul>\n\n\n\n<p>Voltando ao nosso c\u00f3digo fonte, voc\u00ea pode incluir quantas chaves de informa\u00e7\u00e3o quiser em seu erro, o que possibilita expor todos os problemas encontrados em seu indicador. Quando crio o arquivo esperado, o sistema volta ao estado normal:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"456\" height=\"336\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-21.png\" alt=\"\" class=\"wp-image-3251\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-21.png 456w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-21-300x221.png 300w\" sizes=\"(max-width: 456px) 100vw, 456px\" \/><\/figure><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Observe que se quiser, voc\u00ea pode incluir detalhes na mensagem de sucesso tamb\u00e9m, veja como customizei a sa\u00edda de nosso indicador:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"376\" height=\"310\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-22.png\" alt=\"\" class=\"wp-image-3252\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-22.png 376w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-22-300x247.png 300w\" sizes=\"(max-width: 376px) 100vw, 376px\" \/><\/figure><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Como exerc\u00edcio, usando o exemplo de c\u00f3digo que apresentei acima, descubra como inclui o detalhamento da imagem acima. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Agrupadores<\/h2>\n\n\n\n<p>Talvez voc\u00ea queira organizar os health indicators em grupos. Um grupo, por exemplo, contendo todos os indicadores de persist\u00eancia. Nunca precisei desta funcionalidade mas acho que pode ser interessante para algu\u00e9m. Por esta raz\u00e3o estou incluindo aqui este <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/html\/production-ready-features.html#production-ready-health-groups\">link<\/a> para que voc\u00ea se aprofunde no assunto caso seja do seu interesse.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Endpoints<\/h1>\n\n\n\n<figure class=\"wp-block-image alignfull size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"370\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/actuator_endpoints-1024x370.jpg\" alt=\"\" class=\"wp-image-3259\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/actuator_endpoints-1024x370.jpg 1024w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/actuator_endpoints-300x109.jpg 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/actuator_endpoints-768x278.jpg 768w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/actuator_endpoints.jpg 1280w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>N\u00e3o h\u00e1 muito o que dizer sobre os endpoints de health checking do Actuator, mas acho importante que voc\u00ea tenha em mente dois endere\u00e7os que s\u00e3o essenciais.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Executando todos os indicadores<\/h2>\n\n\n\n<p>Simples, voc\u00ea acessa o endpoint <strong>\/health<\/strong><\/p>\n\n\n\n<p>A\u00ed todos os indicadores ser\u00e3o executados. N\u00e3o exagere no n\u00famero de indicadores, pois isto ir\u00e1 impactar o desempenho do seu sistema.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Executando um indicador espec\u00edfico<\/h2>\n\n\n\n<p>\u00c9 poss\u00edvel acessar indicadores individuais. Com isto, se quiser verificar s\u00f3 parte do seu sistema, basta executar o seguinte endpoint: <strong>\/health\/[identificador do indicador]<\/strong><\/p>\n\n\n\n<p>Se quiser acessar, por exemplo, apenas o indicador &#8220;db&#8221;, o endere\u00e7o ser\u00e1 <strong>\/health\/db<\/strong><\/p>\n\n\n\n<p>Quer acessar um agrupador? <strong>\/health\/[id do agrupador]<\/strong> . Um indicador no agrupador? <strong>\/health\/[id do agrupador]\/[id do indicador]<\/strong> .<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Aplica\u00e7\u00f5es<\/h1>\n\n\n\n<figure class=\"wp-block-image alignfull size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"322\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/aplicacoes_hc-1024x322.jpg\" alt=\"\" class=\"wp-image-3257\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/aplicacoes_hc-1024x322.jpg 1024w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/aplicacoes_hc-300x94.jpg 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/aplicacoes_hc-768x242.jpg 768w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/aplicacoes_hc.jpg 1280w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>No in\u00edcio deste post apresentei alguns exemplos de <em>indicadores<\/em>. Agora acho importante falar com maiores detalhes sobre como costumo escrever os nossos pr\u00f3prios. Talvez estes usos lhe inspirem a melhorar a qualidade de servi\u00e7o dos seus sistemas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mecanismos de persist\u00eancia<\/h2>\n\n\n\n<p>Se o sistema possui qualquer mecanismo de persist\u00eancia de dados, escrevo indicadores que verifiquem o sucesso das seguintes a\u00e7\u00f5es:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Escrita.<\/li><li>Leitura.<\/li><li>Remo\u00e7\u00e3o.<\/li><li>Acesso autorizado \u00e0 informa\u00e7\u00e3o.<\/li><li>Acesso n\u00e3o autorizado \u00e0 informa\u00e7\u00e3o.<\/li><li>Obten\u00e7\u00e3o de informa\u00e7\u00e3o existente.<\/li><li>Obten\u00e7\u00e3o de informa\u00e7\u00e3o n\u00e3o existente.<\/li><\/ul>\n\n\n\n<p>Por persist\u00eancia aqui quero dizer qualquer servi\u00e7o que me permita a escrita e leitura de dados:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Storages (S3 da AWS, Blobs da Azure, Spaces do Digital Ocean ou at\u00e9 mesmo sistemas de arquivos).<\/li><li>Bancos de dados relacionais ou n\u00e3o.<\/li><li>Sistemas de mensageria (RabbitMQ, SQS, ActiveMQ, etc).<\/li><\/ul>\n\n\n\n<p>Este tipo de teste \u00e9 essencial em produ\u00e7\u00e3o, costumo escrever testes que executem as a\u00e7\u00f5es essenciais de persist\u00eancia mas n\u00e3o apenas isto: tamb\u00e9m o acesso a estes dados. Escrevo indicadores que validem, por exemplo, que estou obtendo erros ao tentar acessar dados que n\u00e3o tenho acesso ou mesmo informa\u00e7\u00f5es n\u00e3o existentes.<\/p>\n\n\n\n<p>A vantagem deste tipo de indicador \u00e9 que nos ajuda a garantir parte da pr\u00f3pria seguran\u00e7a do sistema.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Desempenho<\/h2>\n\n\n\n<p>H\u00e1 sistemas nos quais \u00e9 necess\u00e1rio atender requisitos muito espec\u00edficos de desempenho, tal como nos exemplos abaixo:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Tempo m\u00e1ximo de processamento de um endpoint.<\/li><li>N\u00famero de requisi\u00e7\u00f5es m\u00ednimo por tempo.<\/li><li>N\u00famero de registros escritos por unidade de tempo.<\/li><\/ul>\n\n\n\n<p>Aqui voc\u00ea deve estar entendendo por que inclui como requisito de seguran\u00e7a as configura\u00e7\u00f5es de cacheamento do endpoint health. S\u00e3o testes normalmente caros computacionalmente, e que voc\u00ea n\u00e3o quer ver sendo executados in\u00fameras vezes por segundo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Corre\u00e7\u00e3o de bugs<\/h2>\n\n\n\n<p>H\u00e1 implanta\u00e7\u00f5es que s\u00e3o realizadas para corrigir bugs, certo? Que tal incluir um health indicator que possa confirmar em produ\u00e7\u00e3o que o bug foi corrigido?<\/p>\n\n\n\n<p>Este \u00e9 um uso bem comum: voc\u00ea escreve o indicador que n\u00e3o s\u00f3 verifica que aquele problema foi corrigido mas tamb\u00e9m que as condi\u00e7\u00f5es para que a ocorr\u00eancia do problema n\u00e3o estejam presentes.<\/p>\n\n\n\n<p>O \u00fanico ponto de aten\u00e7\u00e3o com este tipo de indicador \u00e9 que n\u00e3o recomendo que voc\u00ea inclua uma quantidade infinita deles em seu sistema, pois caso o fa\u00e7a com certeza ter\u00e1 problemas de desempenho no futuro quando os health indicators forem todos executados.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Integra\u00e7\u00f5es<\/h2>\n\n\n\n<p>Se o sistema tem integra\u00e7\u00f5es com outros sistemas (mecanismos de persist\u00eancia na pr\u00e1tica s\u00e3o integra\u00e7\u00f5es), \u00e9 interessante ter indicadores que validem o acesso a estas integra\u00e7\u00f5es.<\/p>\n\n\n\n<p>Voc\u00ea pode verificar, por exemplo, se o sistema contra o qual executa suas requisi\u00e7\u00f5es est\u00e1 online. Se for poss\u00edvel realizar requisi\u00e7\u00f5es reais contra estes sistemas, melhor ainda. Caso contr\u00e1rio, apenas saber que est\u00e3o acess\u00edveis j\u00e1 \u00e9 informa\u00e7\u00e3o suficiente.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Concluindo com alertas<\/h1>\n\n\n\n<figure class=\"wp-block-image alignfull size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"975\" height=\"470\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/finalizando.jpg\" alt=\"\" class=\"wp-image-3231\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/finalizando.jpg 975w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/finalizando-300x145.jpg 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/finalizando-768x370.jpg 768w\" sizes=\"(max-width: 975px) 100vw, 975px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>O health checking faz parte de uma fase vital de qualquer aplica\u00e7\u00e3o: a p\u00f3s implanta\u00e7\u00e3o. \u00c9 ele que nos possibilita verificar de verdade se o sistema <strong>realmente<\/strong> est\u00e1 operando como esperado e talvez por isto seja meu recurso favorito do Actuator.<\/p>\n\n\n\n<p>\u00c9 importante que voc\u00ea <strong>n\u00e3o confunda health checking com teste automatizado<\/strong> (JUnit). Apesar de terem a mesma fun\u00e7\u00e3o &#8211; verificar se um comportamento est\u00e1 ocorrendo tal como esperado &#8211; s\u00e3o executados de modo distinto e devem ser pensados de modo distinto. <\/p>\n\n\n\n<p>Enquanto a execu\u00e7\u00e3o de um teste automatizado n\u00e3o impacta de modo algum o usu\u00e1rio final do sistema, o health checking pode impactar negativamente (e muito) se for mal escrito. J\u00e1 vi alguns erros muito tristes envolvendo health indicators como, por exemplo, a realiza\u00e7\u00e3o de compras reais em plataformas de com\u00e9rcio eletr\u00f4nico (yeap!), gerando preju\u00edzos significativos tanto para os stakeholders quanto para os respons\u00e1veis pela manuten\u00e7\u00e3o do sistema. Ou mesmo testes de carga que acabam por derrubar a plataforma.<\/p>\n\n\n\n<p><strong>Outro ponto importante<\/strong>: n\u00e3o conte apenas com os indicadores providos por padr\u00e3o pelos m\u00f3dulos do Spring Boot. Eles verificam apenas funcionalidades banais como obten\u00e7\u00e3o de conex\u00f5es, por exemplo, mas n\u00e3o v\u00e3o al\u00e9m disto. Indicadores <strong>realmente valiosos<\/strong> s\u00e3o aqueles que dizem respeito ao <strong>contexto de neg\u00f3cio<\/strong> do seu sistema.<\/p>\n\n\n\n<p>Ainda n\u00e3o acabei meus posts sobre Actuator, mais est\u00e3o por vir, aguardem!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Para saber mais<\/h2>\n\n\n\n<p><a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/html\/appendix-application-properties.html\">Configura\u00e7\u00f5es comuns do Spring Boot<\/a> &#8211; este link da documenta\u00e7\u00e3o do Spring Boot cont\u00e9m as principais chaves de configura\u00e7\u00e3o do framework e seus m\u00f3dulos (incluindo o Actuator). \u00c9 uma fonte de refer\u00eancia <strong>muito \u00fatil<\/strong>. Leia com aten\u00e7\u00e3o as configura\u00e7\u00f5es relativas ao health checking do Actuator neste <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/html\/appendix-application-properties.html#common-application-properties-actuator\">link<\/a>.<\/p>\n\n\n\n<p><a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/html\/production-ready-features.html#production-ready-health\">Documenta\u00e7\u00e3o do Actuator sobre Health Checking<\/a> &#8211; a se\u00e7\u00e3o relativa a health checking da documenta\u00e7\u00e3o oficial do Spring Boot.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aprenda a usar o Actuator do Spring Boot para verificar a qualidade de servi\u00e7o dos seus sistemas!<\/p>\n","protected":false},"author":1,"featured_media":3256,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[113,6,87,59],"tags":[112,109,117,84,107],"class_list":["post-3237","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-actuator","category-java","category-spring-boot","category-spring-framework","tag-actuator","tag-devops","tag-health-checking","tag-java","tag-spring-boot"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Verifique seu ambiente de produ\u00e7\u00e3o com o Health Checking do Spring Boot Actuator - \/dev\/Kico<\/title>\n<meta name=\"description\" content=\"Que tal verificar se n\u00e3o h\u00e1 algo de errado com seu ambiente de produ\u00e7\u00e3o usando o Actuator do Spring Boot? Conhe\u00e7a o health checking!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/devkico.itexto.com.br\/?p=3237\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Verifique seu ambiente de produ\u00e7\u00e3o com o Health Checking do Spring Boot Actuator!\" \/>\n<meta property=\"og:description\" content=\"Que tal verificar se n\u00e3o h\u00e1 algo de errado com seu ambiente de produ\u00e7\u00e3o usando o Actuator do Spring Boot? Conhe\u00e7a o health checking!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devkico.itexto.com.br\/?p=3237\" \/>\n<meta property=\"og:site_name\" content=\"\/dev\/Kico\" \/>\n<meta property=\"article:published_time\" content=\"2020-12-21T00:26:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-12-21T12:06:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/healthchecking-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"920\" \/>\n\t<meta property=\"og:image:height\" content=\"920\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Verifique seu ambiente de produ\u00e7\u00e3o com Health Checking do Spring Boot Actuator!\" \/>\n<meta name=\"twitter:description\" content=\"Que tal verificar se n\u00e3o h\u00e1 algo de errado com seu ambiente de produ\u00e7\u00e3o usando o Actuator do Spring Boot? Conhe\u00e7a o health checking!\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/healthchecking-1.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@loboweissmann\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=3237\",\"url\":\"https:\/\/devkico.itexto.com.br\/?p=3237\",\"name\":\"Verifique seu ambiente de produ\u00e7\u00e3o com o Health Checking do Spring Boot Actuator - \/dev\/Kico\",\"isPartOf\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=3237#primaryimage\"},\"image\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=3237#primaryimage\"},\"thumbnailUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/healthchecking-1.jpg\",\"datePublished\":\"2020-12-21T00:26:25+00:00\",\"dateModified\":\"2020-12-21T12:06:37+00:00\",\"author\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\"},\"description\":\"Que tal verificar se n\u00e3o h\u00e1 algo de errado com seu ambiente de produ\u00e7\u00e3o usando o Actuator do Spring Boot? Conhe\u00e7a o health checking!\",\"breadcrumb\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=3237#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/devkico.itexto.com.br\/?p=3237\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=3237#primaryimage\",\"url\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/healthchecking-1.jpg\",\"contentUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/healthchecking-1.jpg\",\"width\":920,\"height\":920},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=3237#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/devkico.itexto.com.br\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Verifique seu ambiente de produ\u00e7\u00e3o com o Health Checking do Spring Boot Actuator\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\",\"url\":\"https:\/\/devkico.itexto.com.br\/\",\"name\":\"\/dev\/Kico\",\"description\":\"Desenvolvendo software\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/devkico.itexto.com.br\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\",\"name\":\"Kico (Henrique Lobo Weissmann)\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"caption\":\"Kico (Henrique Lobo Weissmann)\"},\"sameAs\":[\"https:\/\/x.com\/loboweissmann\"],\"url\":\"https:\/\/devkico.itexto.com.br\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Verifique seu ambiente de produ\u00e7\u00e3o com o Health Checking do Spring Boot Actuator - \/dev\/Kico","description":"Que tal verificar se n\u00e3o h\u00e1 algo de errado com seu ambiente de produ\u00e7\u00e3o usando o Actuator do Spring Boot? Conhe\u00e7a o health checking!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/devkico.itexto.com.br\/?p=3237","og_locale":"pt_BR","og_type":"article","og_title":"Verifique seu ambiente de produ\u00e7\u00e3o com o Health Checking do Spring Boot Actuator!","og_description":"Que tal verificar se n\u00e3o h\u00e1 algo de errado com seu ambiente de produ\u00e7\u00e3o usando o Actuator do Spring Boot? Conhe\u00e7a o health checking!","og_url":"https:\/\/devkico.itexto.com.br\/?p=3237","og_site_name":"\/dev\/Kico","article_published_time":"2020-12-21T00:26:25+00:00","article_modified_time":"2020-12-21T12:06:37+00:00","og_image":[{"width":920,"height":920,"url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/healthchecking-1.jpg","type":"image\/jpeg"}],"author":"Kico (Henrique Lobo Weissmann)","twitter_card":"summary_large_image","twitter_title":"Verifique seu ambiente de produ\u00e7\u00e3o com Health Checking do Spring Boot Actuator!","twitter_description":"Que tal verificar se n\u00e3o h\u00e1 algo de errado com seu ambiente de produ\u00e7\u00e3o usando o Actuator do Spring Boot? Conhe\u00e7a o health checking!","twitter_image":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/healthchecking-1.jpg","twitter_creator":"@loboweissmann","twitter_misc":{"Escrito por":"Kico (Henrique Lobo Weissmann)","Est. tempo de leitura":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/devkico.itexto.com.br\/?p=3237","url":"https:\/\/devkico.itexto.com.br\/?p=3237","name":"Verifique seu ambiente de produ\u00e7\u00e3o com o Health Checking do Spring Boot Actuator - \/dev\/Kico","isPartOf":{"@id":"https:\/\/devkico.itexto.com.br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devkico.itexto.com.br\/?p=3237#primaryimage"},"image":{"@id":"https:\/\/devkico.itexto.com.br\/?p=3237#primaryimage"},"thumbnailUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/healthchecking-1.jpg","datePublished":"2020-12-21T00:26:25+00:00","dateModified":"2020-12-21T12:06:37+00:00","author":{"@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7"},"description":"Que tal verificar se n\u00e3o h\u00e1 algo de errado com seu ambiente de produ\u00e7\u00e3o usando o Actuator do Spring Boot? Conhe\u00e7a o health checking!","breadcrumb":{"@id":"https:\/\/devkico.itexto.com.br\/?p=3237#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devkico.itexto.com.br\/?p=3237"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/?p=3237#primaryimage","url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/healthchecking-1.jpg","contentUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/healthchecking-1.jpg","width":920,"height":920},{"@type":"BreadcrumbList","@id":"https:\/\/devkico.itexto.com.br\/?p=3237#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devkico.itexto.com.br\/"},{"@type":"ListItem","position":2,"name":"Verifique seu ambiente de produ\u00e7\u00e3o com o Health Checking do Spring Boot Actuator"}]},{"@type":"WebSite","@id":"https:\/\/devkico.itexto.com.br\/#website","url":"https:\/\/devkico.itexto.com.br\/","name":"\/dev\/Kico","description":"Desenvolvendo software","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/devkico.itexto.com.br\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7","name":"Kico (Henrique Lobo Weissmann)","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","caption":"Kico (Henrique Lobo Weissmann)"},"sameAs":["https:\/\/x.com\/loboweissmann"],"url":"https:\/\/devkico.itexto.com.br\/?author=1"}]}},"jetpack_featured_media_url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/healthchecking-1.jpg","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/3237"}],"collection":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3237"}],"version-history":[{"count":6,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/3237\/revisions"}],"predecessor-version":[{"id":3265,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/3237\/revisions\/3265"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/media\/3256"}],"wp:attachment":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3237"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3237"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3237"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}